summaryrefslogtreecommitdiffstats
path: root/private/unimodem
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/unimodem
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/unimodem')
-rw-r--r--private/unimodem/common/makefile6
-rw-r--r--private/unimodem/common/proj.h40
-rw-r--r--private/unimodem/common/rovcomm.c2255
-rw-r--r--private/unimodem/common/rovdi.c1502
-rw-r--r--private/unimodem/common/rovini.c298
-rw-r--r--private/unimodem/common/rovmem.c2269
-rw-r--r--private/unimodem/common/rovpath.c503
-rw-r--r--private/unimodem/common/sec.c163
-rw-r--r--private/unimodem/common/sec.h24
-rw-r--r--private/unimodem/common/slot.c487
-rw-r--r--private/unimodem/common/sources65
-rw-r--r--private/unimodem/cpl/ci.c3677
-rw-r--r--private/unimodem/cpl/cpl.c2179
-rw-r--r--private/unimodem/cpl/detect.c2390
-rw-r--r--private/unimodem/cpl/detect.h112
-rw-r--r--private/unimodem/cpl/dll.c229
-rw-r--r--private/unimodem/cpl/dll.h42
-rw-r--r--private/unimodem/cpl/makefile6
-rw-r--r--private/unimodem/cpl/modem.bmpbin0 -> 5426 bytes
-rw-r--r--private/unimodem/cpl/modem.def14
-rw-r--r--private/unimodem/cpl/modem.h530
-rw-r--r--private/unimodem/cpl/modem.rc375
-rw-r--r--private/unimodem/cpl/modem.rcv22
-rw-r--r--private/unimodem/cpl/proj.h95
-rw-r--r--private/unimodem/cpl/resource.h186
-rw-r--r--private/unimodem/cpl/sources77
-rw-r--r--private/unimodem/cpl/ui.c1898
-rw-r--r--private/unimodem/cpl/util.c3528
-rw-r--r--private/unimodem/dirs30
-rw-r--r--private/unimodem/docs/win95/voicemod.docbin0 -> 839168 bytes
-rw-r--r--private/unimodem/inc/mcx16.h189
-rw-r--r--private/unimodem/inc/mcxioctl.h65
-rw-r--r--private/unimodem/inc/modem.h29
-rw-r--r--private/unimodem/inc/modemp.h283
-rw-r--r--private/unimodem/inc/rovcomm.h1087
-rw-r--r--private/unimodem/inc/rovdbg.h56
-rw-r--r--private/unimodem/inc/rovdi.h292
-rw-r--r--private/unimodem/inc/rovmem.h297
-rw-r--r--private/unimodem/inc/slot.h32
-rw-r--r--private/unimodem/inc/tspnotif.h62
-rw-r--r--private/unimodem/inf/makefile1
-rw-r--r--private/unimodem/inf/makefile.inc809
-rw-r--r--private/unimodem/inf/mdm3com.inx12
-rw-r--r--private/unimodem/inf/mdm3x.inx533
-rw-r--r--private/unimodem/inf/mdmaceex.inx545
-rw-r--r--private/unimodem/inf/mdmadc.inx159
-rw-r--r--private/unimodem/inf/mdmadtn.inx12
-rw-r--r--private/unimodem/inf/mdmairte.inx363
-rw-r--r--private/unimodem/inf/mdmar1.inx593
-rw-r--r--private/unimodem/inf/mdmarch.inx720
-rw-r--r--private/unimodem/inf/mdmarcht.inx421
-rw-r--r--private/unimodem/inf/mdmarn.inx690
-rw-r--r--private/unimodem/inf/mdmati.inx251
-rw-r--r--private/unimodem/inf/mdmatt.inx559
-rw-r--r--private/unimodem/inf/mdmaus.inx670
-rw-r--r--private/unimodem/inf/mdmblatz.inx490
-rw-r--r--private/unimodem/inf/mdmboca.inx406
-rw-r--r--private/unimodem/inf/mdmbsb.inx177
-rw-r--r--private/unimodem/inf/mdmbsch.inx371
-rw-r--r--private/unimodem/inf/mdmcm28.inx344
-rw-r--r--private/unimodem/inf/mdmcmcm.inx194
-rw-r--r--private/unimodem/inf/mdmcodex.inx200
-rw-r--r--private/unimodem/inf/mdmcom1.inx507
-rw-r--r--private/unimodem/inf/mdmcomm1.inx411
-rw-r--r--private/unimodem/inf/mdmcommu.inx420
-rw-r--r--private/unimodem/inf/mdmcpi.inx616
-rw-r--r--private/unimodem/inf/mdmcpq.inx729
-rw-r--r--private/unimodem/inf/mdmcpqpr.inx11
-rw-r--r--private/unimodem/inf/mdmcpv.inx428
-rw-r--r--private/unimodem/inf/mdmcrtix.inx344
-rw-r--r--private/unimodem/inf/mdmdefd.inx233
-rw-r--r--private/unimodem/inf/mdmdgitn.inx289
-rw-r--r--private/unimodem/inf/mdmdicom.inx376
-rw-r--r--private/unimodem/inf/mdmdisco.inx650
-rw-r--r--private/unimodem/inf/mdmdsi.inx822
-rw-r--r--private/unimodem/inf/mdmdyna.inx611
-rw-r--r--private/unimodem/inf/mdmeiger.inx421
-rw-r--r--private/unimodem/inf/mdmelink.inx201
-rw-r--r--private/unimodem/inf/mdmelpro.inx396
-rw-r--r--private/unimodem/inf/mdmelsa.inx465
-rw-r--r--private/unimodem/inf/mdmeric.inx419
-rw-r--r--private/unimodem/inf/mdmetech.inx415
-rw-r--r--private/unimodem/inf/mdmexp.inx576
-rw-r--r--private/unimodem/inf/mdmeyp.inx460
-rw-r--r--private/unimodem/inf/mdmgal.inx380
-rw-r--r--private/unimodem/inf/mdmgar.inx12
-rw-r--r--private/unimodem/inf/mdmgatew.inx398
-rw-r--r--private/unimodem/inf/mdmgen.inx701
-rw-r--r--private/unimodem/inf/mdmgv.inx462
-rw-r--r--private/unimodem/inf/mdmgvc.inx973
-rw-r--r--private/unimodem/inf/mdmgvcd.inx14
-rw-r--r--private/unimodem/inf/mdmhaeu.inx448
-rw-r--r--private/unimodem/inf/mdmhaeus.inx327
-rw-r--r--private/unimodem/inf/mdmhandy.inx388
-rw-r--r--private/unimodem/inf/mdmhay2.inx516
-rw-r--r--private/unimodem/inf/mdmhayes.inx801
-rw-r--r--private/unimodem/inf/mdmico.inx301
-rw-r--r--private/unimodem/inf/mdminfot.inx531
-rw-r--r--private/unimodem/inf/mdminsys.inx326
-rw-r--r--private/unimodem/inf/mdmintel.inx326
-rw-r--r--private/unimodem/inf/mdmintpc.inx440
-rw-r--r--private/unimodem/inf/mdmitex.inx459
-rw-r--r--private/unimodem/inf/mdmke.inx419
-rw-r--r--private/unimodem/inf/mdmkortx.inx474
-rw-r--r--private/unimodem/inf/mdmlasat.inx513
-rw-r--r--private/unimodem/inf/mdmlasno.inx14
-rw-r--r--private/unimodem/inf/mdmlce.inx499
-rw-r--r--private/unimodem/inf/mdmlight.inx372
-rw-r--r--private/unimodem/inf/mdmlngsh.inx280
-rw-r--r--private/unimodem/inf/mdmmart.inx326
-rw-r--r--private/unimodem/inf/mdmmcom.inx914
-rw-r--r--private/unimodem/inf/mdmmetri.inx99
-rw-r--r--private/unimodem/inf/mdmmhrtz.inx747
-rw-r--r--private/unimodem/inf/mdmmix.inx482
-rw-r--r--private/unimodem/inf/mdmmoto.inx950
-rw-r--r--private/unimodem/inf/mdmmoton.inx422
-rw-r--r--private/unimodem/inf/mdmmotou.inx391
-rw-r--r--private/unimodem/inf/mdmmtd.inx403
-rw-r--r--private/unimodem/inf/mdmmts.inx504
-rw-r--r--private/unimodem/inf/mdmmulog.inx393
-rw-r--r--private/unimodem/inf/mdmneuhs.inx231
-rw-r--r--private/unimodem/inf/mdmniss.inx12
-rw-r--r--private/unimodem/inf/mdmnokia.inx83
-rw-r--r--private/unimodem/inf/mdmnokno.inx204
-rw-r--r--private/unimodem/inf/mdmnova.inx220
-rw-r--r--private/unimodem/inf/mdmnovfx.inx405
-rw-r--r--private/unimodem/inf/mdmolic.inx12
-rw-r--r--private/unimodem/inf/mdmolive.inx385
-rw-r--r--private/unimodem/inf/mdmopt1.inx386
-rw-r--r--private/unimodem/inf/mdmoptn.inx473
-rw-r--r--private/unimodem/inf/mdmosi.inx190
-rw-r--r--private/unimodem/inf/mdmpace.inx489
-rw-r--r--private/unimodem/inf/mdmpbit.inx419
-rw-r--r--private/unimodem/inf/mdmpcsi.inx12
-rw-r--r--private/unimodem/inf/mdmpctel.inx12
-rw-r--r--private/unimodem/inf/mdmpenr.inx203
-rw-r--r--private/unimodem/inf/mdmphils.inx442
-rw-r--r--private/unimodem/inf/mdmpn1.inx437
-rw-r--r--private/unimodem/inf/mdmpnb.inx582
-rw-r--r--private/unimodem/inf/mdmpp.inx619
-rw-r--r--private/unimodem/inf/mdmprodm.inx575
-rw-r--r--private/unimodem/inf/mdmquant.inx12
-rw-r--r--private/unimodem/inf/mdmracal.inx382
-rw-r--r--private/unimodem/inf/mdmrfi.inx306
-rw-r--r--private/unimodem/inf/mdmrock.inx1091
-rw-r--r--private/unimodem/inf/mdmrock2.inx1060
-rw-r--r--private/unimodem/inf/mdmrock3.inx934
-rw-r--r--private/unimodem/inf/mdmrock4.inx512
-rw-r--r--private/unimodem/inf/mdmrock5.inx455
-rw-r--r--private/unimodem/inf/mdmsecdy.inx142
-rw-r--r--private/unimodem/inf/mdmsier.inx189
-rw-r--r--private/unimodem/inf/mdmsimpl.inx419
-rw-r--r--private/unimodem/inf/mdmsmart.inx399
-rw-r--r--private/unimodem/inf/mdmsmplt.inx12
-rw-r--r--private/unimodem/inf/mdmsnit1.inx364
-rw-r--r--private/unimodem/inf/mdmsnitn.inx413
-rw-r--r--private/unimodem/inf/mdmsonix.inx365
-rw-r--r--private/unimodem/inf/mdmspec.inx244
-rw-r--r--private/unimodem/inf/mdmspq28.inx391
-rw-r--r--private/unimodem/inf/mdmsrt.inx446
-rw-r--r--private/unimodem/inf/mdmsupr3.inx339
-rw-r--r--private/unimodem/inf/mdmsupra.inx311
-rw-r--r--private/unimodem/inf/mdmsuprv.inx558
-rw-r--r--private/unimodem/inf/mdmtaicm.inx341
-rw-r--r--private/unimodem/inf/mdmtdk.inx152
-rw-r--r--private/unimodem/inf/mdmtelbt.inx526
-rw-r--r--private/unimodem/inf/mdmtelin.inx603
-rw-r--r--private/unimodem/inf/mdmtelnk.inx255
-rw-r--r--private/unimodem/inf/mdmtexas.inx365
-rw-r--r--private/unimodem/inf/mdmtger.inx152
-rw-r--r--private/unimodem/inf/mdmti.inx155
-rw-r--r--private/unimodem/inf/mdmtkr.inx316
-rw-r--r--private/unimodem/inf/mdmtorn.inx384
-rw-r--r--private/unimodem/inf/mdmtosh.inx724
-rw-r--r--private/unimodem/inf/mdmtripl.inx240
-rw-r--r--private/unimodem/inf/mdmtron.inx432
-rw-r--r--private/unimodem/inf/mdmtrust.inx397
-rw-r--r--private/unimodem/inf/mdmucom.inx520
-rw-r--r--private/unimodem/inf/mdmusrcr.inx899
-rw-r--r--private/unimodem/inf/mdmusrf.inx392
-rw-r--r--private/unimodem/inf/mdmusrg.inx428
-rw-r--r--private/unimodem/inf/mdmusrsp.inx786
-rw-r--r--private/unimodem/inf/mdmusrwp.inx848
-rw-r--r--private/unimodem/inf/mdmvayrs.inx381
-rw-r--r--private/unimodem/inf/mdmvdot.inx369
-rw-r--r--private/unimodem/inf/mdmvict.inx438
-rw-r--r--private/unimodem/inf/mdmvv.inx604
-rw-r--r--private/unimodem/inf/mdmwell.inx393
-rw-r--r--private/unimodem/inf/mdmwhql0.inx565
-rw-r--r--private/unimodem/inf/mdmwoer.inx334
-rw-r--r--private/unimodem/inf/mdmyorik.inx440
-rw-r--r--private/unimodem/inf/mdmzoom.inx390
-rw-r--r--private/unimodem/inf/mdmzyp.inx379
-rw-r--r--private/unimodem/inf/mdmzyxel.inx173
-rw-r--r--private/unimodem/inf/mdmzyxld.inx631
-rw-r--r--private/unimodem/inf/mdmzyxlg.inx905
-rw-r--r--private/unimodem/inf/mdmzyxln.inx14
-rw-r--r--private/unimodem/inf/sources25
-rw-r--r--private/unimodem/lights/help.c63
-rw-r--r--private/unimodem/lights/lights.bmpbin0 -> 2972 bytes
-rw-r--r--private/unimodem/lights/lights.c1321
-rw-r--r--private/unimodem/lights/lights.def11
-rw-r--r--private/unimodem/lights/lights.h130
-rw-r--r--private/unimodem/lights/lights.icobin0 -> 15486 bytes
-rw-r--r--private/unimodem/lights/lights.rc120
-rw-r--r--private/unimodem/lights/lights.rcv39
-rw-r--r--private/unimodem/lights/lightsid.h65
-rw-r--r--private/unimodem/lights/makefile6
-rw-r--r--private/unimodem/lights/modem01.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/lights/modem02.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/lights/modem03.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/lights/modem04.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/lights/modemdis.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/lights/off.bmpbin0 -> 134 bytes
-rw-r--r--private/unimodem/lights/on.bmpbin0 -> 134 bytes
-rw-r--r--private/unimodem/lights/resource.h17
-rw-r--r--private/unimodem/lights/sources56
-rw-r--r--private/unimodem/mdmdbg/debug.h126
-rw-r--r--private/unimodem/mdmdbg/makefile6
-rw-r--r--private/unimodem/mdmdbg/mdmdbg.c613
-rw-r--r--private/unimodem/mdmdbg/mdmdbg.def29
-rw-r--r--private/unimodem/mdmdbg/mdmdbg.rc24
-rw-r--r--private/unimodem/mdmdbg/mdmdbg.rcv20
-rw-r--r--private/unimodem/mdmdbg/proj.h15
-rw-r--r--private/unimodem/mdmdbg/rcids.h3
-rw-r--r--private/unimodem/mdmdbg/sources29
-rw-r--r--private/unimodem/mdmdbg/tspobj.c20
-rw-r--r--private/unimodem/modemui/advsett.c558
-rw-r--r--private/unimodem/modemui/cstrings.c52
-rw-r--r--private/unimodem/modemui/cstrings.h47
-rw-r--r--private/unimodem/modemui/dlgids.h114
-rw-r--r--private/unimodem/modemui/dll.c312
-rw-r--r--private/unimodem/modemui/dll.h48
-rw-r--r--private/unimodem/modemui/gen.c836
-rw-r--r--private/unimodem/modemui/makefile6
-rw-r--r--private/unimodem/modemui/modemui.c1824
-rw-r--r--private/unimodem/modemui/modemui.def22
-rw-r--r--private/unimodem/modemui/modemui.dlg238
-rw-r--r--private/unimodem/modemui/modemui.h183
-rw-r--r--private/unimodem/modemui/modemui.rc109
-rw-r--r--private/unimodem/modemui/modemui.rcv21
-rw-r--r--private/unimodem/modemui/patterns.bmpbin0 -> 322 bytes
-rw-r--r--private/unimodem/modemui/proj.h91
-rw-r--r--private/unimodem/modemui/rcids.h153
-rw-r--r--private/unimodem/modemui/ring.c1756
-rw-r--r--private/unimodem/modemui/sett.c1147
-rw-r--r--private/unimodem/modemui/sources82
-rw-r--r--private/unimodem/modemui/util.c319
-rw-r--r--private/unimodem/modemui/util.h43
-rw-r--r--private/unimodem/new/detect/d.c828
-rw-r--r--private/unimodem/new/detect/makefile6
-rw-r--r--private/unimodem/new/detect/sources24
-rw-r--r--private/unimodem/new/match/match.c80
-rw-r--r--private/unimodem/new/match/mt.c424
-rw-r--r--private/unimodem/new/match/mt.h28
-rw-r--r--private/unimodem/new/match/resp.c3535
-rw-r--r--private/unimodem/new/mic/alloc.h86
-rw-r--r--private/unimodem/new/mic/chksum.cpp57
-rw-r--r--private/unimodem/new/mic/chksum.h23
-rw-r--r--private/unimodem/new/mic/common.h32
-rw-r--r--private/unimodem/new/mic/consts.h30
-rw-r--r--private/unimodem/new/mic/dev.cpp1103
-rw-r--r--private/unimodem/new/mic/dev.h136
-rw-r--r--private/unimodem/new/mic/globals.cpp53
-rw-r--r--private/unimodem/new/mic/globals.h28
-rw-r--r--private/unimodem/new/mic/ilist.cpp58
-rw-r--r--private/unimodem/new/mic/ilist.h66
-rw-r--r--private/unimodem/new/mic/inf.cpp903
-rw-r--r--private/unimodem/new/mic/inf.h998
-rw-r--r--private/unimodem/new/mic/ini.cpp153
-rw-r--r--private/unimodem/new/mic/ini.h210
-rw-r--r--private/unimodem/new/mic/main.cpp18
-rw-r--r--private/unimodem/new/mic/makefile6
-rw-r--r--private/unimodem/new/mic/mic.cpp167
-rw-r--r--private/unimodem/new/mic/mic.h1
-rw-r--r--private/unimodem/new/mic/notes.txt231
-rw-r--r--private/unimodem/new/mic/resp.cpp3538
-rw-r--r--private/unimodem/new/mic/sample.inf64
-rw-r--r--private/unimodem/new/mic/sources36
-rw-r--r--private/unimodem/new/mic/sym.cpp316
-rw-r--r--private/unimodem/new/mic/sym.h215
-rw-r--r--private/unimodem/new/mic/sync.cpp35
-rw-r--r--private/unimodem/new/mic/sync.h148
-rw-r--r--private/unimodem/new/mic/tdev.cpp84
-rw-r--r--private/unimodem/new/mic/test.h2
-rw-r--r--private/unimodem/new/mic/tsym.cpp65
-rw-r--r--private/unimodem/new/readme.txt11
-rw-r--r--private/unimodem/new/slot/client.c47
-rw-r--r--private/unimodem/new/slot/main.c514
-rw-r--r--private/unimodem/new/slot/makefile6
-rw-r--r--private/unimodem/new/slot/sec.c169
-rw-r--r--private/unimodem/new/slot/sec.h24
-rw-r--r--private/unimodem/new/slot/slot.c486
-rw-r--r--private/unimodem/new/slot/slot.h32
-rw-r--r--private/unimodem/new/slot/sources27
-rw-r--r--private/unimodem/resource/external.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/resource/internal.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/resource/modem.icobin0 -> 766 bytes
-rw-r--r--private/unimodem/resource/nullmdm.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/resource/pcmcia.icobin0 -> 1078 bytes
-rw-r--r--private/unimodem/serialui/cstrings.c30
-rw-r--r--private/unimodem/serialui/cstrings.h23
-rw-r--r--private/unimodem/serialui/dlgids.h42
-rw-r--r--private/unimodem/serialui/dll.c291
-rw-r--r--private/unimodem/serialui/dll.h44
-rw-r--r--private/unimodem/serialui/makefile6
-rw-r--r--private/unimodem/serialui/port.c1085
-rw-r--r--private/unimodem/serialui/proj.h99
-rw-r--r--private/unimodem/serialui/rcids.h109
-rw-r--r--private/unimodem/serialui/serialui.c989
-rw-r--r--private/unimodem/serialui/serialui.def22
-rw-r--r--private/unimodem/serialui/serialui.dlg116
-rw-r--r--private/unimodem/serialui/serialui.h47
-rw-r--r--private/unimodem/serialui/serialui.rc77
-rw-r--r--private/unimodem/serialui/serialui.rcv19
-rw-r--r--private/unimodem/serialui/sources79
-rw-r--r--private/unimodem/serialui/util.c290
-rw-r--r--private/unimodem/serialui/util.h40
-rw-r--r--private/unimodem/tapisp/cfgdlg.c578
-rw-r--r--private/unimodem/tapisp/client.c47
-rw-r--r--private/unimodem/tapisp/common.c572
-rw-r--r--private/unimodem/tapisp/common.h88
-rw-r--r--private/unimodem/tapisp/debug.c214
-rw-r--r--private/unimodem/tapisp/debug.h182
-rw-r--r--private/unimodem/tapisp/devioctl.c1160
-rw-r--r--private/unimodem/tapisp/log.c425
-rw-r--r--private/unimodem/tapisp/log.rc153
-rw-r--r--private/unimodem/tapisp/logids.h134
-rw-r--r--private/unimodem/tapisp/makefile6
-rw-r--r--private/unimodem/tapisp/manual.c170
-rw-r--r--private/unimodem/tapisp/mcxapi.c591
-rw-r--r--private/unimodem/tapisp/mcxioctl.h107
-rw-r--r--private/unimodem/tapisp/mcxp.h530
-rw-r--r--private/unimodem/tapisp/mcxrw.c649
-rw-r--r--private/unimodem/tapisp/mcxstate.c4675
-rw-r--r--private/unimodem/tapisp/mcxutil.c781
-rw-r--r--private/unimodem/tapisp/mdmasyn.c1325
-rw-r--r--private/unimodem/tapisp/mdmutil.c1581
-rw-r--r--private/unimodem/tapisp/modem.c532
-rw-r--r--private/unimodem/tapisp/ov_pool.c234
-rw-r--r--private/unimodem/tapisp/rcids.h75
-rw-r--r--private/unimodem/tapisp/resource.h17
-rw-r--r--private/unimodem/tapisp/resource.rc324
-rw-r--r--private/unimodem/tapisp/sources82
-rw-r--r--private/unimodem/tapisp/talkdrop.c137
-rw-r--r--private/unimodem/tapisp/terminal.c890
-rw-r--r--private/unimodem/tapisp/timer.c527
-rw-r--r--private/unimodem/tapisp/timer.h51
-rw-r--r--private/unimodem/tapisp/traceids.h130
-rw-r--r--private/unimodem/tapisp/tracing.c696
-rw-r--r--private/unimodem/tapisp/tracing.h192
-rw-r--r--private/unimodem/tapisp/umdminit.c2792
-rw-r--r--private/unimodem/tapisp/umdmspi.h425
-rw-r--r--private/unimodem/tapisp/unimdm.c3399
-rw-r--r--private/unimodem/tapisp/unimdm.def147
-rw-r--r--private/unimodem/tapisp/unimdm.h182
-rw-r--r--private/unimodem/tapisp/unimdm.rc18
-rw-r--r--private/unimodem/tapisp/unimdm.rcv31
-rw-r--r--private/unimodem/tapisp/wndthrd.c1538
-rw-r--r--private/unimodem/tapisp/wndthrd.h83
-rw-r--r--private/unimodem/unimdm.ini114
361 files changed, 146179 insertions, 0 deletions
diff --git a/private/unimodem/common/makefile b/private/unimodem/common/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/common/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/common/proj.h b/private/unimodem/common/proj.h
new file mode 100644
index 000000000..227ecd46d
--- /dev/null
+++ b/private/unimodem/common/proj.h
@@ -0,0 +1,40 @@
+//
+// proj.h: Includes all files that are to be part of the precompiled
+// header.
+//
+
+#ifndef __PROJ_H__
+#define __PROJ_H__
+
+#define STRICT
+#define NOWINDOWSX
+
+#define UNICODE
+#define _UNICODE // so we can use CRT TCHAR routines
+
+
+//#define PROFILE_TRACES // Profile the mass modem install case
+
+
+#if DBG > 0 && !defined(DEBUG)
+#define DEBUG
+#endif
+#if DBG > 0 && !defined(FULL_DEBUG)
+#define FULL_DEBUG
+#endif
+
+#ifdef DEBUG
+#define SZ_MODULEA "ROVCOMM"
+#define SZ_MODULEW TEXT("ROVCOMM")
+#endif
+
+#include <windows.h>
+#include <windowsx.h>
+#include <rovcomm.h>
+#include <regstr.h>
+#include <tchar.h>
+
+#define NORTL
+
+#endif //!__PROJ_H__
+
diff --git a/private/unimodem/common/rovcomm.c b/private/unimodem/common/rovcomm.c
new file mode 100644
index 000000000..2fdee7f3b
--- /dev/null
+++ b/private/unimodem/common/rovcomm.c
@@ -0,0 +1,2255 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovcomm.c
+//
+// This files contains common utility and helper functions.
+//
+// History:
+// 08-06-93 ScottH Transferred from twin code
+// 04-26-95 ScottH Transferred and expanded from Briefcase code
+// 09-21-95 ScottH Ported to NT
+//
+
+
+#include "proj.h"
+#include "rovcomm.h"
+
+extern CHAR const FAR c_szNewline[];
+
+#define DEBUG_PRINT_BUFFER_LEN 1030
+
+#ifdef WINNT
+
+//
+// These are some helper functions for handling Unicode strings
+//
+
+/*----------------------------------------------------------
+Purpose: This function converts a wide-char string to a multi-byte
+ string.
+
+ If pszBuf is non-NULL and the converted string can fit in
+ pszBuf, then *ppszAnsi will point to the given buffer.
+ Otherwise, this function will allocate a buffer that can
+ hold the converted string.
+
+ If pszWide is NULL, then *ppszAnsi will be freed. Note
+ that pszBuf must be the same pointer between the call
+ that converted the string and the call that frees the
+ string.
+
+Returns: TRUE
+ FALSE (if out of memory)
+
+Cond: --
+*/
+BOOL PUBLIC AnsiFromUnicode(
+ LPSTR * ppszAnsi,
+ LPCWSTR pwszWide, // NULL to clean up
+ LPSTR pszBuf,
+ int cchBuf)
+ {
+ BOOL bRet;
+
+ // Convert the string?
+ if (pwszWide)
+ {
+ // Yes; determine the converted string length
+ int cch;
+ LPSTR psz;
+
+ cch = WideCharToMultiByte(CP_ACP, 0, pwszWide, -1, NULL, 0, NULL, NULL);
+
+ // String too big, or is there no buffer?
+ if (cch > cchBuf || NULL == pszBuf)
+ {
+ // Yes; allocate space
+ cchBuf = cch + 1;
+ psz = (LPSTR)LocalAlloc(LPTR, CbFromCchA(cchBuf));
+ }
+ else
+ {
+ // No; use the provided buffer
+ ASSERT(pszBuf);
+ psz = pszBuf;
+ }
+
+ if (psz)
+ {
+ // Convert the string
+ cch = WideCharToMultiByte(CP_ACP, 0, pwszWide, -1, psz, cchBuf, NULL, NULL);
+ bRet = (0 < cch);
+ }
+ else
+ {
+ bRet = FALSE;
+ }
+
+ *ppszAnsi = psz;
+ }
+ else
+ {
+ // No; was this buffer allocated?
+ if (*ppszAnsi && pszBuf != *ppszAnsi)
+ {
+ // Yes; clean up
+ LocalFree((HLOCAL)*ppszAnsi);
+ *ppszAnsi = NULL;
+ }
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function converts a multi-byte string to a
+ wide-char string.
+
+ If pszBuf is non-NULL and the converted string can fit in
+ pszBuf, then *ppszWide will point to the given buffer.
+ Otherwise, this function will allocate a buffer that can
+ hold the converted string.
+
+ If pszAnsi is NULL, then *ppszWide will be freed. Note
+ that pszBuf must be the same pointer between the call
+ that converted the string and the call that frees the
+ string.
+
+Returns: TRUE
+ FALSE (if out of memory)
+
+Cond: --
+*/
+BOOL PUBLIC UnicodeFromAnsi(
+ LPWSTR * ppwszWide,
+ LPCSTR pszAnsi, // NULL to clean up
+ LPWSTR pwszBuf,
+ int cchBuf)
+ {
+ BOOL bRet;
+
+ // Convert the string?
+ if (pszAnsi)
+ {
+ // Yes; determine the converted string length
+ int cch;
+ LPWSTR pwsz;
+ int cchAnsi = lstrlenA(pszAnsi)+1;
+
+ cch = MultiByteToWideChar(CP_ACP, 0, pszAnsi, cchAnsi, NULL, 0);
+
+ // String too big, or is there no buffer?
+ if (cch > cchBuf || NULL == pwszBuf)
+ {
+ // Yes; allocate space
+ cchBuf = cch + 1;
+ pwsz = (LPWSTR)LocalAlloc(LPTR, CbFromCchW(cchBuf));
+ }
+ else
+ {
+ // No; use the provided buffer
+ ASSERT(pwszBuf);
+ pwsz = pwszBuf;
+ }
+
+ if (pwsz)
+ {
+ // Convert the string
+ cch = MultiByteToWideChar(CP_ACP, 0, pszAnsi, cchAnsi, pwsz, cchBuf);
+ bRet = (0 < cch);
+ }
+ else
+ {
+ bRet = FALSE;
+ }
+
+ *ppwszWide = pwsz;
+ }
+ else
+ {
+ // No; was this buffer allocated?
+ if (*ppwszWide && pwszBuf != *ppwszWide)
+ {
+ // Yes; clean up
+ LocalFree((HLOCAL)*ppwszWide);
+ *ppwszWide = NULL;
+ }
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+#endif // WINNT
+
+
+#ifdef NORTL
+
+// Some of these are replacements for the C runtime routines.
+// This is so we don't have to link to the CRT libs.
+//
+
+#ifdef WINNT
+
+/*----------------------------------------------------------
+Purpose: Wide-char version. memset
+
+Returns:
+Cond: --
+*/
+LPWSTR PUBLIC lmemsetW(
+ LPWSTR dst,
+ WCHAR wcVal,
+ DWORD count)
+ {
+ LPWSTR start = dst;
+
+ while (count--)
+ *dst++ = wcVal;
+ return(start);
+ }
+
+/*----------------------------------------------------------
+Purpose: memmove
+
+ Swiped from the C 7.0 runtime sources.
+
+Returns:
+Cond:
+*/
+LPWSTR PUBLIC lmemmoveW(
+ LPWSTR dst,
+ LPCWSTR src,
+ DWORD count)
+ {
+ LPWSTR ret = dst;
+
+ if (dst <= src || dst >= (src + count)) {
+ /*
+ * Non-Overlapping Buffers
+ * copy from lower addresses to higher addresses
+ */
+ while (count--)
+ *dst++ = *src++;
+ }
+ else {
+ /*
+ * Overlapping Buffers
+ * copy from higher addresses to lower addresses
+ */
+ dst += count - 1;
+ src += count - 1;
+
+ while (count--)
+ *dst-- = *src--;
+ }
+
+ return(ret);
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: memset
+
+ Swiped from the C 7.0 runtime sources.
+
+Returns:
+Cond:
+*/
+LPSTR PUBLIC lmemsetA(
+ LPSTR dst,
+ char val,
+ DWORD count)
+ {
+ LPSTR start = dst;
+
+ while (count--)
+ *dst++ = val;
+ return(start);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: memmove
+
+ Swiped from the C 7.0 runtime sources.
+
+Returns:
+Cond:
+*/
+LPSTR PUBLIC lmemmoveA(
+ LPSTR dst,
+ LPCSTR src,
+ DWORD count)
+ {
+ LPSTR ret = dst;
+
+ if (dst <= src || dst >= (src + count)) {
+ /*
+ * Non-Overlapping Buffers
+ * copy from lower addresses to higher addresses
+ */
+ while (count--)
+ *dst++ = *src++;
+ }
+ else {
+ /*
+ * Overlapping Buffers
+ * copy from higher addresses to lower addresses
+ */
+ dst += count - 1;
+ src += count - 1;
+
+ while (count--)
+ *dst-- = *src--;
+ }
+
+ return(ret);
+ }
+
+
+#endif // NORTL
+
+
+#ifndef NOSTRING
+// WARNING: all of these APIs do not setup DS, so you can not access
+// any data in the default data seg of this DLL.
+//
+// do not create any global variables... talk to chrisg if you don't
+// understand this
+
+#if defined(DBCS) || defined(WINNT)
+#define FASTCALL PASCAL
+#else
+#define FASTCALL _fastcall
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Case sensitive character comparison for DBCS
+
+Returns: FALSE if they match, TRUE if no match
+Cond: --
+*/
+BOOL NEAR FASTCALL ChrCmp(
+ WORD w1,
+ WORD wMatch)
+ {
+ /* Most of the time this won't match, so test it first for speed.
+ */
+ if (LOBYTE(w1) == LOBYTE(wMatch))
+ {
+ if (IsDBCSLeadByte(LOBYTE(w1)))
+ {
+ return(w1 != wMatch);
+ }
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Case insensitive character comparison for DBCS
+
+Returns: FALSE if match, TRUE if not
+Cond: --
+*/
+BOOL NEAR FASTCALL ChrCmpI(
+ WORD w1,
+ WORD wMatch)
+ {
+ CHAR sz1[3], sz2[3];
+
+ if (IsDBCSLeadByte(sz1[0] = LOBYTE(w1)))
+ {
+ sz1[1] = HIBYTE(w1);
+ sz1[2] = '\0';
+ }
+ else
+ sz1[1] = '\0';
+
+ *(WORD FAR *)sz2 = wMatch;
+ sz2[2] = '\0';
+ return lstrcmpiA(sz1, sz2);
+ }
+
+
+#ifndef WIN32
+
+/*----------------------------------------------------------
+Purpose: strnicmp
+
+ Swiped from the C 7.0 runtime sources.
+
+Returns:
+Cond:
+*/
+int PUBLIC lstrnicmp(
+ LPCSTR psz1,
+ LPCSTR psz2,
+ UINT count)
+ {
+ int ch1;
+ int ch2;
+ int result = 0;
+
+ if (count)
+ {
+ do
+ {
+ ch1 = (int)LOWORD(AnsiLower((LPSTR)MAKELONG(*psz1, 0)));
+ ch2 = (int)LOWORD(AnsiLower((LPSTR)MAKELONG(*psz2, 0)));
+ psz1 = AnsiNext(psz1);
+ psz2 = AnsiNext(psz2);
+ } while (--count && ch1 && ch2 && !ChrCmp((WORD)ch1, (WORD)ch2));
+ result = ch1 - ch2;
+ }
+ return(result);
+ }
+
+/*----------------------------------------------------------
+Purpose: strncmp
+
+ Swiped from the C 7.0 runtime sources.
+
+Returns:
+Cond:
+*/
+int PUBLIC lstrncmp(
+ LPCSTR psz1,
+ LPCSTR psz2,
+ UINT count)
+ {
+ int ch1;
+ int ch2;
+ int result = 0;
+
+ if (count)
+ {
+ do
+ {
+ ch1 = (int)*psz1;
+ ch2 = (int)*psz2;
+ psz1 = AnsiNext(psz1);
+ psz2 = AnsiNext(psz2);
+ } while (--count && ch1 && ch2 && !ChrCmp((WORD)ch1, (WORD)ch2));
+ result = ch1 - ch2;
+ }
+ return(result);
+ }
+
+#endif // WIN32
+
+
+#ifdef WINNT
+
+/*----------------------------------------------------------
+Purpose: Wide-char wrapper for AnsiToIntA.
+
+Returns: see AnsiToIntA
+Cond: --
+*/
+BOOL PUBLIC AnsiToIntW(
+ LPCWSTR pwszString,
+ int FAR * piRet)
+ {
+ CHAR szBuf[MAX_BUF];
+ LPSTR pszString;
+ BOOL bRet = AnsiFromUnicode(&pszString, pwszString, szBuf, ARRAYSIZE(szBuf));
+
+ if (bRet)
+ {
+ bRet = AnsiToIntA(pszString, piRet);
+ AnsiFromUnicode(&pszString, NULL, szBuf, 0);
+ }
+ return bRet;
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char wrapper for AnsiChrA.
+
+Returns: see AnsiChrA
+Cond: --
+*/
+LPWSTR PUBLIC AnsiChrW(
+ LPCWSTR pwsz,
+ WORD wMatch)
+ {
+ for ( ; *pwsz; pwsz = CharNextW(pwsz))
+ {
+ if (!ChrCmp(*(WORD FAR *)pwsz, wMatch))
+ return (LPWSTR)pwsz;
+ }
+ return NULL;
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Find last occurrence (case sensitive) of wide
+ character in wide-char string.
+
+Returns: Pointer to the last occurrence of character in
+ string or NULL if character is not found.
+Cond: --
+*/
+LPWSTR
+PUBLIC
+AnsiRChrW(
+ LPCWSTR pwsz,
+ WORD wMatch)
+{
+ LPWSTR pwszEnd;
+
+ if (pwsz && *pwsz)
+ {
+ for (pwszEnd = (LPWSTR)pwsz + lstrlen(pwsz) - 1;
+ pwsz <= pwszEnd;
+ pwszEnd = CharPrevW(pwsz, pwszEnd))
+ {
+ if (!ChrCmp(*(WORD FAR *)pwszEnd, wMatch))
+ return(pwszEnd);
+
+ // CharPrevW() won't go to char preceding pwsz...
+ if (pwsz == pwszEnd)
+ break;
+ }
+ }
+
+ return(NULL);
+}
+
+
+/*----------------------------------------------------------
+Purpose: My verion of atoi. Supports hexadecimal too.
+
+ If this function returns FALSE, *piRet is set to 0.
+
+Returns: TRUE if the string is a number, or contains a partial number
+ FALSE if the string is not a number
+
+Cond: --
+*/
+BOOL PUBLIC AnsiToIntA(
+ LPCSTR pszString,
+ int FAR * piRet)
+ {
+ #define IS_DIGIT(ch) InRange(ch, '0', '9')
+
+ BOOL bRet;
+ int n;
+ BOOL bNeg = FALSE;
+ LPCSTR psz;
+ LPCSTR pszAdj;
+
+ // Skip leading whitespace
+ //
+ for (psz = pszString; *psz == ' ' || *psz == '\n' || *psz == '\t'; psz = AnsiNext(psz))
+ ;
+
+ // Determine possible explicit signage
+ //
+ if (*psz == '+' || *psz == '-')
+ {
+ bNeg = (*psz == '+') ? FALSE : TRUE;
+ psz++;
+ }
+
+ // Or is this hexadecimal?
+ //
+ pszAdj = AnsiNext(psz);
+ if (*psz == '0' && (*pszAdj == 'x' || *pszAdj == 'X'))
+ {
+ // Yes
+
+ // (Never allow negative sign with hexadecimal numbers)
+ bNeg = FALSE;
+ psz = AnsiNext(pszAdj);
+
+ pszAdj = psz;
+
+ // Do the conversion
+ //
+ for (n = 0; ; psz = AnsiNext(psz))
+ {
+ if (IS_DIGIT(*psz))
+ n = 0x10 * n + *psz - '0';
+ else
+ {
+ CHAR ch = *psz;
+ int n2;
+
+ if (ch >= 'a')
+ ch -= 'a' - 'A';
+
+ n2 = ch - 'A' + 0xA;
+ if (n2 >= 0xA && n2 <= 0xF)
+ n = 0x10 * n + n2;
+ else
+ break;
+ }
+ }
+
+ // Return TRUE if there was at least one digit
+ bRet = (psz != pszAdj);
+ }
+ else
+ {
+ // No
+ pszAdj = psz;
+
+ // Do the conversion
+ for (n = 0; IS_DIGIT(*psz); psz = AnsiNext(psz))
+ n = 10 * n + *psz - '0';
+
+ // Return TRUE if there was at least one digit
+ bRet = (psz != pszAdj);
+ }
+
+ *piRet = bNeg ? -n : n;
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Find first occurrence of character in string
+
+Returns: Pointer to the first occurrence of ch in
+Cond: --
+*/
+LPSTR PUBLIC AnsiChrA(
+ LPCSTR psz,
+ WORD wMatch)
+ {
+ for ( ; *psz; psz = AnsiNext(psz))
+ {
+ if (!ChrCmp(*(WORD FAR *)psz, wMatch))
+ return (LPSTR)psz;
+ }
+ return NULL;
+ }
+
+#endif // NOSTRING
+
+
+#ifndef NODIALOGHELPER
+
+/*----------------------------------------------------------
+Purpose: Sets the rectangle with the bounding extent of the given string.
+Returns: Rectangle
+Cond: --
+*/
+void PUBLIC SetRectFromExtentW(
+ HDC hdc,
+ LPRECT lprect,
+ LPCWSTR lpcwsz)
+ {
+ SIZE size;
+
+ GetTextExtentPointW(hdc, lpcwsz, lstrlenW(lpcwsz), &size);
+ SetRect(lprect, 0, 0, size.cx, size.cy);
+ }
+
+/*----------------------------------------------------------
+Purpose: Sets the rectangle with the bounding extent of the given string.
+Returns: Rectangle
+Cond: --
+*/
+void PUBLIC SetRectFromExtentA(
+ HDC hdc,
+ LPRECT lprect,
+ LPCSTR lpcsz)
+ {
+ SIZE size;
+
+ GetTextExtentPointA(hdc, lpcsz, lstrlenA(lpcsz), &size);
+ SetRect(lprect, 0, 0, size.cx, size.cy);
+ }
+
+#endif // NODIALOGHELPER
+
+
+#ifndef NODRAWTEXT
+
+#pragma data_seg(DATASEG_READONLY)
+
+CHAR const FAR c_szEllipses[] = "...";
+
+#pragma data_seg()
+
+// Global variables
+int g_cxLabelMargin = 0;
+int g_cxBorder = 0;
+int g_cyBorder = 0;
+
+COLORREF g_clrHighlightText = 0;
+COLORREF g_clrHighlight = 0;
+COLORREF g_clrWindowText = 0;
+COLORREF g_clrWindow = 0;
+
+HBRUSH g_hbrHighlight = 0;
+HBRUSH g_hbrWindow = 0;
+
+
+/*----------------------------------------------------------
+Purpose: Get the system metrics we need
+Returns: --
+Cond: --
+*/
+void PUBLIC GetCommonMetrics(
+ WPARAM wParam) // wParam from WM_WININICHANGE
+ {
+ if ((wParam == 0) || (wParam == SPI_SETNONCLIENTMETRICS))
+ {
+ g_cxBorder = GetSystemMetrics(SM_CXBORDER);
+ g_cyBorder = GetSystemMetrics(SM_CYBORDER);
+
+ g_cxLabelMargin = (g_cxBorder * 2);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sees whether the entire string will fit in *prc.
+ If not, compute the numbder of chars that will fit
+ (including ellipses). Returns length of string in
+ *pcchDraw.
+
+ Taken from COMMCTRL.
+
+Returns: TRUE if the string needed ellipses
+Cond: --
+*/
+BOOL PRIVATE NeedsEllipses(
+ HDC hdc,
+ LPCSTR pszText,
+ RECT * prc,
+ int * pcchDraw,
+ int cxEllipses)
+ {
+ int cchText;
+ int cxRect;
+ int ichMin, ichMax, ichMid;
+ SIZE siz;
+
+ cxRect = prc->right - prc->left;
+
+ cchText = lstrlenA(pszText);
+
+ if (cchText == 0)
+ {
+ *pcchDraw = cchText;
+ return FALSE;
+ }
+
+ GetTextExtentPointA(hdc, pszText, cchText, &siz);
+
+ if (siz.cx <= cxRect)
+ {
+ *pcchDraw = cchText;
+ return FALSE;
+ }
+
+ cxRect -= cxEllipses;
+
+ // If no room for ellipses, always show first character.
+ //
+ ichMax = 1;
+ if (cxRect > 0)
+ {
+ // Binary search to find character that will fit
+ ichMin = 0;
+ ichMax = cchText;
+ while (ichMin < ichMax)
+ {
+ // Be sure to round up, to make sure we make progress in
+ // the loop if ichMax == ichMin + 1.
+ //
+ ichMid = (ichMin + ichMax + 1) / 2;
+
+ GetTextExtentPointA(hdc, &pszText[ichMin], ichMid - ichMin, &siz);
+
+ if (siz.cx < cxRect)
+ {
+ ichMin = ichMid;
+ cxRect -= siz.cx;
+ }
+ else if (siz.cx > cxRect)
+ {
+ ichMax = ichMid - 1;
+ }
+ else
+ {
+ // Exact match up up to ichMid: just exit.
+ //
+ ichMax = ichMid;
+ break;
+ }
+ }
+
+ // Make sure we always show at least the first character...
+ //
+ if (ichMax < 1)
+ ichMax = 1;
+ }
+
+ *pcchDraw = ichMax;
+ return TRUE;
+ }
+
+
+#define CCHELLIPSES 3
+#define DT_LVWRAP (DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_EDITCONTROL)
+
+
+#ifdef WINNT
+
+/*----------------------------------------------------------
+Purpose: Wide-char wrapper for MyDrawTextA.
+
+Returns: see MyDrawTextA
+Cond: --
+*/
+void PUBLIC MyDrawTextW(
+ HDC hdc,
+ LPCWSTR pwszText,
+ RECT FAR* prc,
+ UINT flags,
+ int cyChar,
+ int cxEllipses,
+ COLORREF clrText,
+ COLORREF clrTextBk)
+ {
+ CHAR szBuf[MAX_BUF];
+ LPSTR pszText;
+ BOOL bRet = AnsiFromUnicode(&pszText, pwszText, szBuf, ARRAYSIZE(szBuf));
+
+ if (bRet)
+ {
+ MyDrawTextA(hdc, pszText, prc, flags, cyChar, cxEllipses, clrText, clrTextBk);
+ AnsiFromUnicode(&pszText, NULL, szBuf, 0);
+ }
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Draws text the shell's way.
+
+ Taken from COMMCTRL.
+
+Returns: --
+
+Cond: This function requires TRANSPARENT background mode
+ and a properly selected font.
+*/
+void PUBLIC MyDrawTextA(
+ HDC hdc,
+ LPCSTR pszText,
+ RECT FAR* prc,
+ UINT flags,
+ int cyChar,
+ int cxEllipses,
+ COLORREF clrText,
+ COLORREF clrTextBk)
+ {
+ int cchText;
+ COLORREF clrSave;
+ COLORREF clrSaveBk;
+ UINT uETOFlags = 0;
+ RECT rc;
+ CHAR ach[MAX_PATH + CCHELLIPSES];
+
+ // REVIEW: Performance idea:
+ // We could cache the currently selected text color
+ // so we don't have to set and restore it each time
+ // when the color is the same.
+ //
+ if (!pszText)
+ return;
+
+ rc = *prc;
+
+ // If needed, add in a little extra margin...
+ //
+ if (IsFlagSet(flags, MDT_EXTRAMARGIN))
+ {
+ rc.left += g_cxLabelMargin * 3;
+ rc.right -= g_cxLabelMargin * 3;
+ }
+ else
+ {
+ rc.left += g_cxLabelMargin;
+ rc.right -= g_cxLabelMargin;
+ }
+
+ if (IsFlagSet(flags, MDT_ELLIPSES) &&
+ NeedsEllipses(hdc, pszText, &rc, &cchText, cxEllipses))
+ {
+ hmemcpy(ach, pszText, cchText);
+ lstrcpyA(ach + cchText, c_szEllipses);
+
+ pszText = ach;
+
+ // Left-justify, in case there's no room for all of ellipses
+ //
+ ClearFlag(flags, (MDT_RIGHT | MDT_CENTER));
+ SetFlag(flags, MDT_LEFT);
+
+ cchText += CCHELLIPSES;
+ }
+ else
+ {
+ cchText = lstrlenA(pszText);
+ }
+
+ if (IsFlagSet(flags, MDT_TRANSPARENT))
+ {
+ clrSave = SetTextColor(hdc, 0x000000);
+ }
+ else
+ {
+ uETOFlags |= ETO_OPAQUE;
+
+ if (IsFlagSet(flags, MDT_SELECTED))
+ {
+ clrSave = SetTextColor(hdc, g_clrHighlightText);
+ clrSaveBk = SetBkColor(hdc, g_clrHighlight);
+
+ if (IsFlagSet(flags, MDT_DRAWTEXT))
+ {
+ FillRect(hdc, prc, g_hbrHighlight);
+ }
+ }
+ else
+ {
+ if (clrText == CLR_DEFAULT && clrTextBk == CLR_DEFAULT)
+ {
+ clrSave = SetTextColor(hdc, g_clrWindowText);
+ clrSaveBk = SetBkColor(hdc, g_clrWindow);
+
+ if (IsFlagSet(flags, MDT_DRAWTEXT | MDT_DESELECTED))
+ {
+ FillRect(hdc, prc, g_hbrWindow);
+ }
+ }
+ else
+ {
+ HBRUSH hbr;
+
+ if (clrText == CLR_DEFAULT)
+ clrText = g_clrWindowText;
+
+ if (clrTextBk == CLR_DEFAULT)
+ clrTextBk = g_clrWindow;
+
+ clrSave = SetTextColor(hdc, clrText);
+ clrSaveBk = SetBkColor(hdc, clrTextBk);
+
+ if (IsFlagSet(flags, MDT_DRAWTEXT | MDT_DESELECTED))
+ {
+ hbr = CreateSolidBrush(GetNearestColor(hdc, clrTextBk));
+ if (hbr)
+ {
+ FillRect(hdc, prc, hbr);
+ DeleteObject(hbr);
+ }
+ else
+ FillRect(hdc, prc, GetStockObject(WHITE_BRUSH));
+ }
+ }
+ }
+ }
+
+ // If we want the item to display as if it was depressed, we will
+ // offset the text rectangle down and to the left
+ if (IsFlagSet(flags, MDT_DEPRESSED))
+ OffsetRect(&rc, g_cxBorder, g_cyBorder);
+
+ if (IsFlagSet(flags, MDT_DRAWTEXT))
+ {
+ UINT uDTFlags = DT_LVWRAP;
+
+ if (IsFlagClear(flags, MDT_CLIPPED))
+ uDTFlags |= DT_NOCLIP;
+
+ DrawTextA(hdc, pszText, cchText, &rc, uDTFlags);
+ }
+ else
+ {
+ if (IsFlagClear(flags, MDT_LEFT))
+ {
+ SIZE siz;
+
+ GetTextExtentPointA(hdc, pszText, cchText, &siz);
+
+ if (IsFlagSet(flags, MDT_CENTER))
+ rc.left = (rc.left + rc.right - siz.cx) / 2;
+ else
+ {
+ ASSERT(IsFlagSet(flags, MDT_RIGHT));
+ rc.left = rc.right - siz.cx;
+ }
+ }
+
+ if (IsFlagSet(flags, MDT_VCENTER))
+ {
+ // Center vertically
+ rc.top += (rc.bottom - rc.top - cyChar) / 2;
+ }
+
+ if (IsFlagSet(flags, MDT_CLIPPED))
+ uETOFlags |= ETO_CLIPPED;
+
+ ExtTextOutA(hdc, rc.left, rc.top, uETOFlags, prc, pszText, cchText, NULL);
+ }
+
+ if (flags & (MDT_SELECTED | MDT_DESELECTED | MDT_TRANSPARENT))
+ {
+ SetTextColor(hdc, clrSave);
+ if (IsFlagClear(flags, MDT_TRANSPARENT))
+ SetBkColor(hdc, clrSaveBk);
+ }
+ }
+#endif // NODRAWTEXT
+
+
+#if !defined(NOFILEINFO) && defined(WIN95)
+
+/*----------------------------------------------------------
+Purpose: Takes a DWORD value and converts it to a string, adding
+ commas on the way.
+
+ This was taken from the shell.
+
+Returns: Pointer to buffer
+
+Cond: --
+*/
+LPSTR PRIVATE AddCommas(
+ DWORD dw,
+ LPSTR pszBuffer,
+ UINT cchBuffer)
+ {
+ CHAR szTemp[30];
+ CHAR szSep[5];
+ NUMBERFMT nfmt;
+
+ nfmt.NumDigits=0;
+ nfmt.LeadingZero=0;
+ GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SGROUPING, szSep, ARRAYSIZE(szSep));
+
+ AnsiToInt(szSep, &nfmt.Grouping);
+ GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, szSep, ARRAYSIZE(szSep));
+ nfmt.lpDecimalSep = nfmt.lpThousandSep = szSep;
+ nfmt.NegativeOrder= 0;
+
+ wsprintf(szTemp, "%lu", dw);
+
+ GetNumberFormatA(LOCALE_USER_DEFAULT, 0, szTemp, &nfmt, pszBuffer, cchBuffer);
+ return pszBuffer;
+ }
+
+
+const short s_rgidsOrders[] = {IDS_BYTES, IDS_ORDERKB, IDS_ORDERMB, IDS_ORDERGB, IDS_ORDERTB};
+
+/*----------------------------------------------------------
+Purpose: Converts a number into a short, string format.
+
+ This code was taken from the shell.
+
+ 532 -> 523 bytes
+ 1340 -> 1.3KB
+ 23506 -> 23.5KB
+ -> 2.4MB
+ -> 5.2GB
+
+Returns: pointer to buffer
+Cond: --
+*/
+LPSTR PRIVATE ShortSizeFormat64(
+ __int64 dw64,
+ LPSTR szBuf)
+ {
+ int i;
+ UINT wInt, wLen, wDec;
+ CHAR szTemp[10], szOrder[20], szFormat[5];
+
+ if (dw64 < 1000)
+ {
+ wsprintf(szTemp, "%d", LODWORD(dw64));
+ i = 0;
+ goto AddOrder;
+ }
+
+ for (i = 1; i < ARRAYSIZE(s_rgidsOrders)-1 && dw64 >= 1000L * 1024L; dw64 >>= 10, i++);
+ /* do nothing */
+
+ wInt = LODWORD(dw64 >> 10);
+ AddCommas(wInt, szTemp, ARRAYSIZE(szTemp));
+ wLen = lstrlen(szTemp);
+ if (wLen < 3)
+ {
+ wDec = LODWORD(dw64 - (__int64)wInt * 1024L) * 1000 / 1024;
+ // At this point, wDec should be between 0 and 1000
+ // we want get the top one (or two) digits.
+ wDec /= 10;
+ if (wLen == 2)
+ wDec /= 10;
+
+ // Note that we need to set the format before getting the
+ // intl char.
+ lstrcpy(szFormat, "%02d");
+
+ szFormat[2] = '0' + 3 - wLen;
+ GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL,
+ szTemp+wLen, ARRAYSIZE(szTemp)-wLen);
+ wLen = lstrlen(szTemp);
+ wLen += wsprintf(szTemp+wLen, szFormat, wDec);
+ }
+
+AddOrder:
+ LoadString(g_hinst, s_rgidsOrders[i], szOrder, ARRAYSIZE(szOrder));
+ wsprintf(szBuf, szOrder, (LPSTR)szTemp);
+
+ return szBuf;
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Converts a number into a short, string format.
+
+ This code was taken from the shell.
+
+ 532 -> 523 bytes
+ 1340 -> 1.3KB
+ 23506 -> 23.5KB
+ -> 2.4MB
+ -> 5.2GB
+
+Returns: pointer to buffer
+Cond: --
+*/
+LPSTR PRIVATE ShortSizeFormat(DWORD dw, LPSTR szBuf)
+ {
+ return(ShortSizeFormat64((__int64)dw, szBuf));
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the file info given a path. If the path refers
+ to a directory, then simply the path field is filled.
+
+ If himl != NULL, then the function will add the file's
+ image to the provided image list and set the image index
+ field in the *ppfi.
+
+Returns: standard hresult
+Cond: --
+*/
+HRESULT PUBLIC FICreate(
+ LPCSTR pszPath,
+ FileInfo ** ppfi,
+ UINT uFlags)
+ {
+ HRESULT hres = ResultFromScode(E_OUTOFMEMORY);
+ int cchPath;
+ SHFILEINFO sfi;
+ UINT uInfoFlags = SHGFI_DISPLAYNAME | SHGFI_ATTRIBUTES;
+ DWORD dwAttr;
+
+ ASSERT(pszPath);
+ ASSERT(ppfi);
+
+ // Get shell file info
+ if (IsFlagSet(uFlags, FIF_ICON))
+ uInfoFlags |= SHGFI_ICON;
+ if (IsFlagSet(uFlags, FIF_DONTTOUCH))
+ {
+ uInfoFlags |= SHGFI_USEFILEATTRIBUTES;
+
+ // Today, FICreate is not called for folders, so this is ifdef'd out
+#ifdef SUPPORT_FOLDERS
+ dwAttr = IsFlagSet(uFlags, FIF_FOLDER) ? FILE_ATTRIBUTE_DIRECTORY : 0;
+#else
+ dwAttr = 0;
+#endif
+ }
+ else
+ dwAttr = 0;
+
+ if (SHGetFileInfo(pszPath, dwAttr, &sfi, sizeof(sfi), uInfoFlags))
+ {
+ // Allocate enough for the structure, plus buffer for the fully qualified
+ // path and buffer for the display name (and extra null terminator).
+ cchPath = lstrlen(pszPath);
+
+ *ppfi = GAlloc(sizeof(FileInfo) + CbFromCch(cchPath+1) - ARRAYSIZE((*ppfi)->szPath) + CbFromCch(lstrlen(sfi.szDisplayName)+1));
+ if (*ppfi)
+ {
+ FileInfo * pfi = *ppfi;
+
+ pfi->pszDisplayName = pfi->szPath + CbFromCch(cchPath+1);
+ lstrcpy(pfi->pszDisplayName, sfi.szDisplayName);
+
+ if (IsFlagSet(uFlags, FIF_ICON))
+ pfi->hicon = sfi.hIcon;
+
+ pfi->dwAttributes = sfi.dwAttributes;
+
+ // Does the path refer to a directory?
+ if (FIIsFolder(pfi))
+ {
+ // Yes; just fill in the path field
+ lstrcpy(pfi->szPath, pszPath);
+ hres = NOERROR;
+ }
+ else
+ {
+ // No; assume the file exists?
+ if (IsFlagClear(uFlags, FIF_DONTTOUCH))
+ {
+ // Yes; get the time, date and size of the file
+ HANDLE hfile = CreateFile(pszPath, GENERIC_READ,
+ FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
+ NULL);
+
+ if (hfile == INVALID_HANDLE_VALUE)
+ {
+ GFree(*ppfi);
+ hres = ResultFromScode(E_HANDLE);
+ }
+ else
+ {
+ hres = NOERROR;
+
+ lstrcpy(pfi->szPath, pszPath);
+ pfi->dwSize = GetFileSize(hfile, NULL);
+ GetFileTime(hfile, NULL, NULL, &pfi->ftMod);
+ CloseHandle(hfile);
+ }
+ }
+ else
+ {
+ // No; use what we have
+ hres = NOERROR;
+ lstrcpy(pfi->szPath, pszPath);
+ }
+ }
+ }
+ }
+ else if (!WPPathExists(pszPath))
+ {
+ // Differentiate between out of memory and file not found
+ hres = E_FAIL;
+ }
+
+ return hres;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Get some file info of the given path.
+ The returned string is of the format "# bytes <date>"
+
+ If the path is a folder, the string is empty.
+
+Returns: FALSE if path is not found
+Cond: --
+*/
+BOOL PUBLIC FIGetInfoString(
+ FileInfo * pfi,
+ LPSTR pszBuf,
+ int cchBuf)
+ {
+ BOOL bRet;
+
+ ASSERT(pfi);
+ ASSERT(pszBuf);
+
+ *pszBuf = NULL_CHAR;
+
+ if (pfi)
+ {
+ // Is this a file?
+ if ( !FIIsFolder(pfi) )
+ {
+ // Yes
+ CHAR szSize[MAX_BUF_MED];
+ CHAR szDate[MAX_BUF_MED];
+ CHAR szTime[MAX_BUF_MED];
+ LPSTR pszMsg;
+ SYSTEMTIME st;
+ FILETIME ftLocal;
+
+ // Construct the string
+ FileTimeToLocalFileTime(&pfi->ftMod, &ftLocal);
+ FileTimeToSystemTime(&ftLocal, &st);
+ GetDateFormatA(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szDate, ARRAYSIZE(szDate));
+ GetTimeFormatA(LOCALE_USER_DEFAULT, 0, &st, NULL, szTime, ARRAYSIZE(szTime));
+
+ if (ConstructMessage(&pszMsg, g_hinst, MAKEINTRESOURCE(IDS_DATESIZELINE),
+ ShortSizeFormat(FIGetSize(pfi), szSize), szDate, szTime))
+ {
+ lstrcpy(pszBuf, pszMsg);
+ GSetString(&pszMsg, NULL);
+ }
+ else
+ *pszBuf = 0;
+
+ bRet = TRUE;
+ }
+ else
+ bRet = FALSE;
+ }
+ else
+ bRet = FALSE;
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the path entry. This can move the pfi.
+
+Returns: FALSE on out of memory
+Cond: --
+*/
+BOOL PUBLIC FISetPath(
+ FileInfo ** ppfi,
+ LPCSTR pszPathNew,
+ UINT uFlags)
+ {
+ ASSERT(ppfi);
+ ASSERT(pszPathNew);
+
+ FIFree(*ppfi);
+
+ return SUCCEEDED(FICreate(pszPathNew, ppfi, uFlags));
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Free our file info struct
+Returns: --
+Cond: --
+*/
+void PUBLIC FIFree(
+ FileInfo * pfi)
+ {
+ if (pfi)
+ {
+ if (pfi->hicon)
+ DestroyIcon(pfi->hicon);
+
+ GFree(pfi); // This macro already checks for NULL pfi condition
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Convert FILETIME struct to a readable string
+
+Returns: String
+Cond: --
+*/
+void PUBLIC FileTimeToDateTimeString(
+ LPFILETIME pft,
+ LPSTR pszBuf,
+ int cchBuf)
+ {
+ SYSTEMTIME st;
+ FILETIME ftLocal;
+
+ FileTimeToLocalFileTime(pft, &ftLocal);
+ FileTimeToSystemTime(&ftLocal, &st);
+ GetDateFormatA(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &st, NULL, pszBuf, cchBuf/2);
+ pszBuf += lstrlen(pszBuf);
+ *pszBuf++ = ' ';
+ GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &st, NULL, pszBuf, cchBuf/2);
+ }
+
+#endif // NOFILEINFO
+
+
+#ifndef NOSYNC
+
+#if defined(WIN95)
+
+CRITICAL_SECTION g_csCommon = { 0 };
+DEBUG_CODE( UINT g_cRefCommonCS = 0; )
+
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Waits for on object to signal. This function "does
+ the right thing" to prevent deadlocks which can occur
+ because the calculation thread calls SendMessage.
+
+Returns: value of MsgWaitForMultipleObjects
+Cond: --
+*/
+DWORD PUBLIC MsgWaitObjectsSendMessage(
+ DWORD cObjects,
+ LPHANDLE phObjects,
+ DWORD dwTimeout)
+ {
+ DWORD dwRet;
+
+ while (TRUE)
+ {
+ dwRet = MsgWaitForMultipleObjects(cObjects, phObjects, FALSE,
+ dwTimeout, QS_SENDMESSAGE);
+
+ // If it is not a message, return
+ if ((WAIT_OBJECT_0 + cObjects) != dwRet)
+ {
+ return dwRet;
+ }
+ else
+ {
+ // Process all the sent messages
+ MSG msg;
+ PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
+ }
+ }
+ }
+
+
+#if defined(WIN95)
+
+/*----------------------------------------------------------
+Purpose: Initialize the critical section.
+
+Returns: --
+
+Cond: Note that critical sections differ between Win95
+ and NT. On Win95, critical sections synchronize
+ across processes. On NT, they are per-process.
+*/
+void PUBLIC Common_InitExclusive(void)
+ {
+#ifdef WIN95
+ ReinitializeCriticalSection(&g_csCommon);
+#else
+ InitializeCriticalSection(&g_csCommon);
+#endif
+ ASSERT(0 != *((LPDWORD)&g_csCommon));
+
+#ifdef DEBUG
+ g_cRefCommonCS = 0;
+#endif
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Enter a critical section
+Returns: --
+
+Cond: Note that critical sections differ between Win95
+ and NT. On Win95, critical sections synchronize
+ across processes. On NT, they are per-process.
+*/
+void PUBLIC Common_EnterExclusive(void)
+ {
+ EnterCriticalSection(&g_csCommon);
+#ifdef DEBUG
+ g_cRefCommonCS++;
+#endif
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Leave a critical section
+Returns: --
+
+Cond: Note that critical sections differ between Win95
+ and NT. On Win95, critical sections synchronize
+ across processes. On NT, they are per-process.
+*/
+void PUBLIC Common_LeaveExclusive(void)
+ {
+#ifdef DEBUG
+ g_cRefCommonCS--;
+#endif
+ LeaveCriticalSection(&g_csCommon);
+ }
+
+#endif // WIN95
+
+#endif // NOSYNC
+
+
+#ifndef NOMESSAGESTRING
+
+#ifdef WIN32
+
+typedef va_list * LPVA_LIST;
+
+#else // WIN32
+
+typedef LPDWORD LPVA_LIST;
+
+#endif // WIN32
+
+
+#ifdef WINNT
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of ConstructVMessageStringA
+
+Returns: see ConstructVMessageStringA
+Cond: --
+*/
+LPWSTR PUBLIC ConstructVMessageStringW(
+ HINSTANCE hinst,
+ LPCWSTR pwszMsg,
+ va_list FAR * ArgList)
+ {
+ WCHAR wszTemp[MAX_BUF];
+ LPWSTR pwszRet;
+ LPWSTR pwszRes;
+
+ if (HIWORD(pwszMsg))
+ pwszRes = (LPWSTR)pwszMsg;
+ else if (LOWORD(pwszMsg) && LoadStringW(hinst, LOWORD(pwszMsg), wszTemp, ARRAYSIZE(wszTemp)))
+ pwszRes = wszTemp;
+ else
+ pwszRes = NULL;
+
+ if (pwszRes)
+ {
+ if (!FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
+ pwszRes, 0, 0, (LPWSTR)&pwszRet, 0, (LPVA_LIST)ArgList))
+ {
+ pwszRet = NULL;
+ }
+ }
+ else
+ {
+ // Bad parameter
+ pwszRet = NULL;
+ }
+
+ return pwszRet; // free with LocalFree()
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of ConstructMessageA.
+
+Returns: see ConstructMessageA
+Cond: --
+*/
+BOOL CPUBLIC ConstructMessageW(
+ LPWSTR FAR * ppwsz,
+ HINSTANCE hinst,
+ LPCWSTR pwszMsg, ...)
+ {
+ BOOL bRet;
+ LPWSTR pwszRet;
+ va_list ArgList;
+
+ va_start(ArgList, pwszMsg);
+
+ pwszRet = ConstructVMessageStringW(hinst, pwszMsg, &ArgList);
+
+ va_end(ArgList);
+
+ *ppwsz = NULL;
+
+ if (pwszRet)
+ {
+ bRet = SetStringW(ppwsz, pwszRet);
+ LocalFree((HLOCAL)OFFSETOF(pwszRet));
+ }
+ else
+ bRet = FALSE;
+
+ return bRet;
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of MsgBoxA
+
+Returns: See MsgBoxA
+Cond: --
+*/
+int CPUBLIC MsgBoxW(
+ HINSTANCE hinst,
+ HWND hwndOwner,
+ LPCWSTR pwszText,
+ LPCWSTR pwszCaption,
+ HICON hicon, // May be NULL
+ DWORD dwStyle, ...)
+ {
+ int iRet = -1;
+ int ids;
+ WCHAR wszCaption[MAX_BUF];
+ LPWSTR pwszRet;
+ va_list ArgList;
+
+ va_start(ArgList, dwStyle);
+
+ pwszRet = ConstructVMessageStringW(hinst, pwszText, &ArgList);
+
+ va_end(ArgList);
+
+ if (pwszRet)
+ {
+ // Is pszCaption a resource ID?
+ if (0 == HIWORD(pwszCaption))
+ {
+ // Yes; load it
+ ids = LOWORD(pwszCaption);
+ SzFromIDSW(hinst, ids, wszCaption, ARRAYSIZE(wszCaption));
+ pwszCaption = wszCaption;
+ }
+
+ // Invoke dialog
+ if (pwszCaption)
+ {
+ MSGBOXPARAMSW mbp;
+
+ mbp.cbSize = sizeof(mbp);
+ mbp.hwndOwner = hwndOwner;
+ mbp.hInstance = hinst;
+ mbp.lpszText = pwszRet;
+ mbp.lpszCaption = pwszCaption;
+ mbp.dwStyle = dwStyle | MB_SETFOREGROUND;
+ mbp.lpszIcon = MAKEINTRESOURCEW(hicon);
+ mbp.lpfnMsgBoxCallback = NULL;
+ mbp.dwLanguageId = LANG_NEUTRAL;
+
+ iRet = MessageBoxIndirectW(&mbp);
+ }
+ LocalFree((HLOCAL)OFFSETOF(pwszRet));
+ }
+
+ return iRet;
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Load the string (if necessary) and format the string
+ properly.
+
+Returns: A pointer to the allocated string containing the formatted
+ message or
+ NULL if out of memory
+
+Cond: free pointer with LocalFree()
+*/
+LPSTR PUBLIC ConstructVMessageStringA(
+ HINSTANCE hinst,
+ LPCSTR pszMsg,
+ va_list FAR * ArgList)
+ {
+ CHAR szTemp[MAX_BUF];
+ LPSTR pszRet;
+ LPSTR pszRes;
+
+ if (HIWORD(pszMsg))
+ pszRes = (LPSTR)pszMsg;
+ else if (LOWORD(pszMsg) && LoadStringA(hinst, LOWORD(pszMsg), szTemp, ARRAYSIZE(szTemp)))
+ pszRes = szTemp;
+ else
+ pszRes = NULL;
+
+ if (pszRes)
+ {
+ if (!FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
+ pszRes, 0, 0, (LPSTR)&pszRet, 0, (LPVA_LIST)ArgList))
+ {
+ pszRet = NULL;
+ }
+ }
+ else
+ {
+ // Bad parameter
+ pszRet = NULL;
+ }
+
+ return pszRet; // free with LocalFree()
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Constructs a formatted string. The returned string
+ must be freed using GFree().
+
+Returns: TRUE on success
+
+Cond: Free pointer with GFree()
+*/
+BOOL CPUBLIC ConstructMessageA(
+ LPSTR FAR * ppsz,
+ HINSTANCE hinst,
+ LPCSTR pszMsg, ...)
+ {
+ BOOL bRet;
+ LPSTR pszRet;
+ va_list ArgList;
+
+ va_start(ArgList, pszMsg);
+
+ pszRet = ConstructVMessageStringA(hinst, pszMsg, &ArgList);
+
+ va_end(ArgList);
+
+ *ppsz = NULL;
+
+ if (pszRet)
+ {
+ bRet = SetStringA(ppsz, pszRet);
+ LocalFree((HLOCAL)OFFSETOF(pszRet));
+ }
+ else
+ bRet = FALSE;
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Invoke a message box.
+
+Returns: ID of button that terminated the dialog
+Cond: --
+*/
+int CPUBLIC MsgBoxA(
+ HINSTANCE hinst,
+ HWND hwndOwner,
+ LPCSTR pszText,
+ LPCSTR pszCaption,
+ HICON hicon, // May be NULL
+ DWORD dwStyle, ...)
+ {
+ int iRet = -1;
+ int ids;
+ CHAR szCaption[MAX_BUF];
+ LPSTR pszRet;
+ va_list ArgList;
+
+ va_start(ArgList, dwStyle);
+
+ pszRet = ConstructVMessageStringA(hinst, pszText, &ArgList);
+
+ va_end(ArgList);
+
+ if (pszRet)
+ {
+ // Is pszCaption a resource ID?
+ if (0 == HIWORD(pszCaption))
+ {
+ // Yes; load it
+ ids = LOWORD(pszCaption);
+ SzFromIDSA(hinst, ids, szCaption, SIZECHARS(szCaption));
+ pszCaption = szCaption;
+ }
+
+ // Invoke dialog
+ if (pszCaption)
+ {
+#ifdef WIN32
+
+ MSGBOXPARAMSA mbp;
+
+ mbp.cbSize = sizeof(mbp);
+ mbp.hwndOwner = hwndOwner;
+ mbp.hInstance = hinst;
+ mbp.lpszText = pszRet;
+ mbp.lpszCaption = pszCaption;
+ mbp.dwStyle = dwStyle | MB_SETFOREGROUND;
+ mbp.lpszIcon = MAKEINTRESOURCEA(hicon);
+ mbp.lpfnMsgBoxCallback = NULL;
+ mbp.dwLanguageId = LANG_NEUTRAL;
+
+ iRet = MessageBoxIndirectA(&mbp);
+
+#else // WIN32
+
+ iRet = MessageBox(hwndOwner, pszRet, pszCaption, LOWORD(dwStyle));
+#endif
+ }
+ LocalFree((HLOCAL)OFFSETOF(pszRet));
+ }
+
+ return iRet;
+ }
+
+#endif // NOMESSAGESTRING
+
+
+#if !defined(NODEBUGHELP) && defined(DEBUG)
+
+// Globals
+DWORD g_dwBreakFlags = 0;
+DWORD g_dwDumpFlags = 0;
+DWORD g_dwTraceFlags = 0;
+
+
+#pragma data_seg(DATASEG_READONLY)
+
+#ifdef WINNT
+extern WCHAR const FAR c_wszNewline[];
+extern WCHAR const FAR c_wszTrace[];
+extern WCHAR const FAR c_wszAssertFailed[];
+#endif // WINNT
+
+extern CHAR const FAR c_szNewline[];
+extern CHAR const FAR c_szTrace[];
+extern CHAR const FAR c_szAssertFailed[];
+
+#if defined(WANT_OLE_SUPPORT) && defined(WIN95)
+struct _RIIDMAP
+ {
+ REFIID riid;
+ LPCSTR psz;
+ } const c_rgriidmap[] = {
+ { &IID_IUnknown, "IID_IUnknown" },
+ { &IID_IBriefcaseStg, "IID_IBriefcaseStg" },
+ { &IID_IEnumUnknown, "IID_IEnumUnknown" },
+ { &IID_IShellBrowser, "IID_IShellBrowser" },
+ { &IID_IShellView, "IID_IShellView" },
+ { &IID_IContextMenu, "IID_IContextMenu" },
+ { &IID_IShellFolder, "IID_IShellFolder" },
+ { &IID_IShellExtInit, "IID_IShellExtInit" },
+ { &IID_IShellPropSheetExt, "IID_IShellPropSheetExt" },
+ { &IID_IPersistFolder, "IID_IPersistFolder" },
+ { &IID_IExtractIcon, "IID_IExtractIcon" },
+ { &IID_IShellDetails, "IID_IShellDetails" },
+ { &IID_IDelayedRelease, "IID_IDelayedRelease" },
+ { &IID_IShellLink, "IID_IShellLink" },
+ };
+#endif // defined(WANT_OLE_SUPPORT) && defined(WIN95)
+
+#if defined(__SCODE_H__) && defined(WIN95)
+
+struct _SCODEMAP
+ {
+ SCODE sc;
+ LPCSTR psz;
+ } const c_rgscodemap[] = {
+ { S_OK, "S_OK" },
+ { S_FALSE, "S_FALSE" },
+ { E_UNEXPECTED, "E_UNEXPECTED" },
+ { E_NOTIMPL, "E_NOTIMPL" },
+ { E_OUTOFMEMORY, "E_OUTOFMEMORY" },
+ { E_INVALIDARG, "E_INVALIDARG" },
+ { E_NOINTERFACE, "E_NOINTERFACE" },
+ { E_POINTER, "E_POINTER" },
+ { E_HANDLE, "E_HANDLE" },
+ { E_ABORT, "E_ABORT" },
+ { E_FAIL, "E_FAIL" },
+ { E_ACCESSDENIED, "E_ACCESSDENIED" },
+ };
+
+#endif // defined(__SCODE_H__) && defined(WIN95)
+
+#pragma data_seg()
+
+/*----------------------------------------------------------
+Purpose: Return English reason for the debug break
+Returns: String
+Cond: --
+*/
+LPCSTR PRIVATE GetReasonString(
+ DWORD flag) // One of BF_ flags
+ {
+ LPCSTR psz;
+
+ if (IsFlagSet(flag, BF_ONOPEN))
+ psz = "BREAK ON OPEN\r\n";
+
+ else if (IsFlagSet(flag, BF_ONCLOSE))
+ psz = "BREAK ON CLOSE\r\n";
+
+ else if (IsFlagSet(flag, BF_ONRUNONCE))
+ psz = "BREAK ON RUNONCE\r\n";
+
+ else if (IsFlagSet(flag, BF_ONVALIDATE))
+ psz = "BREAK ON VALIDATION FAILURE\r\n";
+
+ else if (IsFlagSet(flag, BF_ONTHREADATT))
+ psz = "BREAK ON THREAD ATTACH\r\n";
+
+ else if (IsFlagSet(flag, BF_ONTHREADDET))
+ psz = "BREAK ON THREAD DETACH\r\n";
+
+ else if (IsFlagSet(flag, BF_ONPROCESSATT))
+ psz = "BREAK ON PROCESS ATTACH\r\n";
+
+ else if (IsFlagSet(flag, BF_ONPROCESSDET))
+ psz = "BREAK ON PROCESS DETACH\r\n";
+
+ else if (IsFlagSet(flag, BF_ONAPIENTER))
+ psz = "BREAK ON API ENTER\r\n";
+
+ else
+ psz = c_szNewline;
+
+ return psz;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Perform a debug break based on the flag
+Returns: --
+Cond: --
+*/
+void PUBLIC CommonDebugBreak(
+ DWORD flag) // One of BF_ flags
+ {
+ if (IsFlagSet(g_dwBreakFlags, flag))
+ {
+ TRACE_MSG(TF_ALWAYS, GetReasonString(flag));
+ DebugBreak();
+ }
+ }
+
+/*----------------------------------------------------------
+Purpose: Assert failed
+Returns: --
+Cond: --
+*/
+void PUBLIC CommonAssertFailed(
+ LPCSTR pszFile,
+ int line)
+ {
+ LPCSTR psz;
+ CHAR ach[256];
+
+ // Strip off path info from filename string, if present.
+ //
+ for (psz = pszFile + lstrlenA(pszFile); psz != pszFile; psz=AnsiPrev(pszFile, psz))
+ {
+#ifdef DBCS
+ if ((AnsiPrev(pszFile, psz) != (psz-2)) && *(psz - 1) == '\\')
+#else
+ if (*(psz - 1) == '\\')
+#endif
+ break;
+ }
+ wsprintfA(ach, c_szAssertFailed, psz, line);
+ OutputDebugStringA(ach);
+
+ if (IsFlagSet(g_dwBreakFlags, BF_ONVALIDATE))
+ DebugBreak();
+ }
+
+
+#ifdef WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Determine id debug should be displayed
+Returns: --
+Cond: --
+*/
+BOOL WINAPI
+DisplayDebug(
+ DWORD flag
+ )
+
+{
+ return (TF_ALWAYS == flag || IsFlagSet(g_dwTraceFlags, flag));
+
+}
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of CommonAssertMsgA
+Returns: --
+Cond: --
+*/
+void CPUBLIC CommonAssertMsgW(
+ BOOL f,
+ LPCWSTR pwszMsg, ...)
+ {
+ WCHAR ach[DEBUG_PRINT_BUFFER_LEN]; // Largest path plus extra
+ va_list vArgs;
+
+ if (!f)
+ {
+ int cch;
+
+ lstrcpyW(ach, c_wszTrace);
+ cch = lstrlenW(ach);
+ va_start(vArgs, pwszMsg);
+ wvsprintfW(&ach[cch], pwszMsg, vArgs);
+ va_end(vArgs);
+ OutputDebugStringW(ach);
+ OutputDebugStringW(c_wszNewline);
+ }
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of CommonDebugMsgA
+Returns: --
+Cond: --
+*/
+void CPUBLIC CommonDebugMsgW(
+ DWORD flag,
+ LPCSTR pszMsg, ...)
+ {
+ WCHAR ach[DEBUG_PRINT_BUFFER_LEN]; // Largest path plus extra
+ va_list vArgs;
+
+ if (TF_ALWAYS == flag || IsFlagSet(g_dwTraceFlags, flag))
+ {
+ int cch;
+ WCHAR wszBuf[MAX_BUF];
+ LPWSTR pwsz;
+
+#ifdef PROFILE_TRACES
+ static WCHAR szTemplate[7];
+ static DWORD dwTickLast;
+ static DWORD dwTickNow = 0;
+
+ if (!dwTickNow)
+ {
+ lstrcpy(szTemplate, TEXT("[%lu] "));
+ dwTickLast = GetTickCount();
+ }
+ dwTickNow = GetTickCount();
+ wsprintf(ach, szTemplate, dwTickNow - dwTickLast);
+ dwTickLast = dwTickNow;
+
+ lstrcatW(ach, c_wszTrace);
+#else
+ lstrcpyW(ach, c_wszTrace);
+#endif
+ cch = lstrlenW(ach);
+ va_start(vArgs, pszMsg);
+
+ // (We convert the string, rather than simply input an
+ // LPCWSTR parameter, so the caller doesn't have to wrap
+ // all the string constants with the TEXT() macro.)
+
+ if (UnicodeFromAnsi(&pwsz, pszMsg, wszBuf, ARRAYSIZE(wszBuf)))
+ {
+ wvsprintfW(&ach[cch], pwsz, vArgs);
+ UnicodeFromAnsi(&pwsz, NULL, wszBuf, 0);
+ }
+
+ va_end(vArgs);
+ OutputDebugStringW(ach);
+ OutputDebugStringW(c_wszNewline);
+ }
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of Dbg_SafeStrA
+
+Returns: String ptr
+Cond: --
+*/
+LPCWSTR PUBLIC Dbg_SafeStrW(
+ LPCWSTR pwsz)
+ {
+ if (pwsz)
+ return pwsz;
+ else
+ return L"NULL";
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Assert failed message only
+Returns: --
+Cond: --
+*/
+void CPUBLIC CommonAssertMsgA(
+ BOOL f,
+ LPCSTR pszMsg, ...)
+ {
+ CHAR ach[DEBUG_PRINT_BUFFER_LEN]; // Largest path plus extra
+ va_list vArgs;
+
+ if (!f)
+ {
+ int cch;
+
+ lstrcpyA(ach, c_szTrace);
+ cch = lstrlenA(ach);
+ va_start(vArgs, pszMsg);
+ wvsprintfA(&ach[cch], pszMsg, vArgs);
+ va_end(vArgs);
+ OutputDebugStringA(ach);
+ OutputDebugStringA(c_szNewline);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Debug spew
+Returns: --
+Cond: --
+*/
+void CPUBLIC CommonDebugMsgA(
+ DWORD flag,
+ LPCSTR pszMsg, ...)
+ {
+ CHAR ach[DEBUG_PRINT_BUFFER_LEN]; // Largest path plus extra
+ va_list vArgs;
+
+ if (TF_ALWAYS == flag || IsFlagSet(g_dwTraceFlags, flag))
+ {
+ int cch;
+
+ lstrcpyA(ach, c_szTrace);
+ cch = lstrlenA(ach);
+ va_start(vArgs, pszMsg);
+ wvsprintfA(&ach[cch], pszMsg, vArgs);
+ va_end(vArgs);
+ OutputDebugStringA(ach);
+ OutputDebugStringA(c_szNewline);
+ }
+ }
+
+
+#ifdef WANT_OLE_SUPPORT
+/*----------------------------------------------------------
+Purpose: Returns the string form of an known interface ID.
+
+Returns: String ptr
+Cond: --
+*/
+LPCSTR PUBLIC Dbg_GetRiidName(
+ REFIID riid)
+ {
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(c_rgriidmap); i++)
+ {
+ if (IsEqualIID(riid, c_rgriidmap[i].riid))
+ return c_rgriidmap[i].psz;
+ }
+ return "Unknown riid";
+ }
+#endif
+
+#ifdef __SCODE_H__
+
+/*----------------------------------------------------------
+Purpose: Returns the string form of an scode given an hresult.
+
+Returns: String ptr
+Cond: --
+*/
+LPCSTR PUBLIC Dbg_GetScode(
+ HRESULT hres)
+ {
+ int i;
+ SCODE sc;
+
+ sc = GetScode(hres);
+ for (i = 0; i < ARRAYSIZE(c_rgscodemap); i++)
+ {
+ if (sc == c_rgscodemap[i].sc)
+ return c_rgscodemap[i].psz;
+ }
+ return "Unknown scode";
+ }
+
+#endif // __SCODE_H__
+
+
+/*----------------------------------------------------------
+Purpose: Returns a string safe enough to print...and I don't
+ mean swear words.
+
+Returns: String ptr
+Cond: --
+*/
+LPCSTR PUBLIC Dbg_SafeStrA(
+ LPCSTR psz)
+ {
+ if (psz)
+ return psz;
+ else
+ return "NULL";
+ }
+
+#endif // !defined(NODEBUGHELP) && defined(DEBUG)
+
+
+/*----------------------------------------------------------
+Purpose: Entry-point to handle any necessary initialization
+ of the common data structures and functions.
+
+Returns: TRUE on success
+
+Cond: --
+*/
+BOOL PUBLIC RovComm_Init(
+ HINSTANCE hinst)
+ {
+ BOOL bRet = TRUE;
+
+#ifndef NODRAWTEXT
+ GetCommonMetrics(0);
+#endif
+
+#ifdef WIN95
+ INIT_EXCLUSIVE();
+#endif
+
+ bRet = RovComm_ProcessIniFile();
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry-point to handle termination.
+
+Returns: TRUE on success
+
+Cond: --
+*/
+BOOL PUBLIC RovComm_Terminate(
+ HINSTANCE hinst)
+ {
+#if !defined(NOSHAREDHEAP) && defined(WIN95)
+
+ SharedTerminate();
+
+#endif
+
+ return TRUE;
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE iff user has admin priveleges
+
+Returns: --
+Cond: --
+*/
+BOOL PUBLIC IsAdminUser(void)
+{
+ HKEY hkey;
+
+ if(RegOpenKeyEx(HKEY_USERS, TEXT(".DEFAULT"), 0, KEY_WRITE, &hkey) == 0)
+ {
+ RegCloseKey(hkey);
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/private/unimodem/common/rovdi.c b/private/unimodem/common/rovdi.c
new file mode 100644
index 000000000..cd4470aee
--- /dev/null
+++ b/private/unimodem/common/rovdi.c
@@ -0,0 +1,1502 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovdi.c
+//
+// This files contains Device Installer wrappers that we commonly use.
+//
+// History:
+// 11-13-95 ScottH Separated from NT modem class installer
+//
+
+#include "proj.h"
+#include "rovcomm.h"
+#include <cfgmgr32.h>
+
+#define MAX_REG_KEY_LEN 128
+#define CB_MAX_REG_KEY_LEN (MAX_REG_KEY_LEN * sizeof(TCHAR))
+
+
+//-----------------------------------------------------------------------------------
+// Port mapping functions
+//-----------------------------------------------------------------------------------
+
+#define CPORTPAIR 8
+
+typedef struct tagPORTPAIR
+ {
+ CHAR szPortName[MAX_BUF];
+ CHAR szFriendlyName[MAX_BUF];
+ } PORTPAIR, FAR * LPPORTPAIR;
+
+typedef struct tagPORTMAP
+ {
+ LPPORTPAIR rgports; // Alloc
+ int cports;
+ } PORTMAP, FAR * LPPORTMAP;
+
+
+/*----------------------------------------------------------
+Purpose: Performs a local realloc my way
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL PRIVATE MyLocalReAlloc(
+ LPVOID FAR * ppv,
+ int cbOld,
+ int cbNew)
+ {
+ LPVOID pv = (LPVOID)LocalAlloc(LPTR, cbNew);
+
+ if (LOCALOF(pv))
+ {
+ BltByte(pv, *ppv, min(cbOld, cbNew));
+ LocalFreePtr(*ppv);
+ *ppv = pv;
+ }
+
+ return (NULL != pv);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Device enumerator callback. Adds another device to the
+ map table.
+
+Returns: TRUE to continue enumeration
+Cond: --
+*/
+BOOL
+CALLBACK
+PortMap_Add(
+ HPORTDATA hportdata,
+ LPARAM lParam)
+ {
+ BOOL bRet;
+ PORTDATA pd;
+
+ pd.cbSize = sizeof(pd);
+ bRet = PortData_GetProperties(hportdata, &pd);
+ if (bRet)
+ {
+ LPPORTMAP pmap = (LPPORTMAP)lParam;
+ LPPORTPAIR ppair;
+ int cb;
+ int cbUsed;
+
+ // Time to reallocate the table?
+ cb = LocalSize(LOCALOF(pmap->rgports));
+ cbUsed = pmap->cports * sizeof(*ppair);
+ if (cbUsed >= cb)
+ {
+ // Yes
+ cb += (CPORTPAIR * sizeof(*ppair));
+
+ bRet = MyLocalReAlloc((LPVOID FAR *)&pmap->rgports, cbUsed, cb);
+ }
+
+
+ if (bRet)
+ {
+ ppair = &pmap->rgports[pmap->cports++];
+
+#ifdef UNICODE
+ // Fields of LPPORTPAIR are always ANSI
+ WideCharToMultiByte(CP_ACP, 0, pd.szPort, -1, ppair->szPortName, SIZECHARS(ppair->szPortName), 0, 0);
+ WideCharToMultiByte(CP_ACP, 0, pd.szFriendly, -1, ppair->szFriendlyName, SIZECHARS(ppair->szFriendlyName), 0, 0);
+#else
+ lstrcpy(ppair->szPortName, pd.szPort);
+ lstrcpy(ppair->szFriendlyName, pd.szFriendly);
+#endif
+
+ DEBUG_CODE( TRACE_MSGA(TF_GENERAL, "Added %s <-> %s to portmap",
+ (LPSTR)ppair->szPortName, (LPSTR)ppair->szFriendlyName); )
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Wide-char version. This function creates a port map
+ table that maps port names to friendly names, and
+ vice-versa.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_Create(
+ OUT HPORTMAP FAR * phportmap)
+ {
+ LPPORTMAP pmap;
+
+ pmap = (LPPORTMAP)LocalAlloc(LPTR, sizeof(*pmap));
+ if (pmap)
+ {
+ // Initially alloc 8 entries
+ pmap->rgports = (LPPORTPAIR)LocalAlloc(LPTR, CPORTPAIR*sizeof(*pmap->rgports));
+ if (pmap->rgports)
+ {
+ // Fill the map table
+ EnumeratePorts(PortMap_Add, (LPARAM)pmap);
+ }
+ else
+ {
+ // Error
+ LocalFreePtr(pmap);
+ pmap = NULL;
+ }
+ }
+
+ *phportmap = (HPORTMAP)pmap;
+
+ return (NULL != pmap);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the count of ports on the system.
+
+Returns: see above
+Cond: --
+*/
+DWORD
+APIENTRY
+PortMap_GetCount(
+ IN HPORTMAP hportmap)
+ {
+ DWORD dwRet;
+ LPPORTMAP pmap = (LPPORTMAP)hportmap;
+
+ try
+ {
+ dwRet = pmap->cports;
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ dwRet = 0;
+ }
+
+ return dwRet;
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Gets the friendly name given the port name and places
+ a copy in the supplied buffer.
+
+ If no port name is found, the contents of the supplied
+ buffer is not changed.
+
+ Wide-char version.
+
+Returns: TRUE on success
+ FALSE if the port name is not found
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_GetFriendlyW(
+ IN HPORTMAP hportmap,
+ IN LPCWSTR pwszPortName,
+ OUT LPWSTR pwszBuf,
+ IN DWORD cchBuf)
+ {
+ BOOL bRet;
+
+ ASSERT(pwszPortName);
+ ASSERT(pwszBuf);
+
+ try
+ {
+ CHAR szPort[MAX_BUF_MED];
+ CHAR szBuf[MAX_BUF];
+
+ WideCharToMultiByte(CP_ACP, 0, pwszPortName, -1, szPort, SIZECHARS(szPort), 0, 0);
+
+ bRet = PortMap_GetFriendlyA(hportmap, szPort, szBuf, SIZECHARS(szBuf));
+
+ if (bRet)
+ {
+ MultiByteToWideChar(CP_ACP, 0, szBuf, -1, pwszBuf, cchBuf);
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ bRet = FALSE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the friendly name given the port name and places
+ a copy in the supplied buffer.
+
+ If no port name is found, the contents of the supplied
+ buffer is not changed.
+
+Returns: TRUE on success
+ FALSE if the port name is not found
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_GetFriendlyA(
+ IN HPORTMAP hportmap,
+ IN LPCSTR pszPortName,
+ OUT LPSTR pszBuf,
+ IN DWORD cchBuf)
+ {
+ LPPORTMAP pmap = (LPPORTMAP)hportmap;
+
+ ASSERT(pmap);
+ ASSERT(pszPortName);
+ ASSERT(pszBuf);
+
+ try
+ {
+ LPPORTPAIR pport = pmap->rgports;
+ int cports = pmap->cports;
+ int i;
+
+ for (i = 0; i < cports; i++, pport++)
+ {
+ if (0 == lstrcmpiA(pszPortName, pport->szPortName))
+ {
+ lstrcpynA(pszBuf, pport->szFriendlyName, cchBuf);
+ return TRUE;
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+
+ return FALSE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the port name given the friendly name and places
+ a copy in the supplied buffer.
+
+ If no friendly name is found, the contents of the supplied
+ buffer is not changed.
+
+ Wide-char version.
+
+Returns: TRUE on success
+ FALSE if the friendly name is not found
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_GetPortNameW(
+ IN HPORTMAP hportmap,
+ IN LPCWSTR pwszFriendly,
+ OUT LPWSTR pwszBuf,
+ IN DWORD cchBuf)
+ {
+ BOOL bRet;
+
+ ASSERT(pwszFriendly);
+ ASSERT(pwszBuf);
+
+ try
+ {
+ CHAR szFriendly[MAX_BUF];
+ CHAR szBuf[MAX_BUF_MED];
+
+ WideCharToMultiByte(CP_ACP, 0, pwszFriendly, -1, szFriendly, SIZECHARS(szFriendly), 0, 0);
+
+ bRet = PortMap_GetPortNameA(hportmap, szFriendly, szBuf, SIZECHARS(szBuf));
+
+ if (bRet)
+ {
+ MultiByteToWideChar(CP_ACP, 0, szBuf, -1, pwszBuf, cchBuf);
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the port name given the friendly name and places
+ a copy in the supplied buffer.
+
+ If no friendly name is found, the contents of the supplied
+ buffer is not changed.
+
+Returns: TRUE
+ FALSE if the friendly name is not found
+
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_GetPortNameA(
+ IN HPORTMAP hportmap,
+ IN LPCSTR pszFriendly,
+ OUT LPSTR pszBuf,
+ IN DWORD cchBuf)
+ {
+ LPPORTMAP pmap = (LPPORTMAP)hportmap;
+
+ ASSERT(pmap);
+ ASSERT(pszFriendly);
+ ASSERT(pszBuf);
+
+ try
+ {
+ LPPORTPAIR pport = pmap->rgports;
+ int cports = pmap->cports;
+ int i;
+
+ for (i = 0; i < cports; i++, pport++)
+ {
+ if (0 == lstrcmpiA(pszFriendly, pport->szFriendlyName))
+ {
+ lstrcpynA(pszBuf, pport->szPortName, cchBuf);
+ return TRUE;
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+
+ return FALSE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Frees a port map
+
+Returns: --
+Cond: --
+*/
+BOOL
+APIENTRY
+PortMap_Free(
+ IN HPORTMAP hportmap)
+ {
+ LPPORTMAP pmap = (LPPORTMAP)hportmap;
+
+ if (pmap)
+ {
+ if (pmap->rgports)
+ LocalFreePtr(pmap->rgports);
+
+ LocalFreePtr(pmap);
+ }
+ return TRUE;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Port enumeration functions
+//-----------------------------------------------------------------------------------
+
+
+#pragma data_seg(DATASEG_READONLY)
+
+TCHAR const FAR c_szSerialComm[] = TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM");
+
+#pragma data_seg()
+
+
+/*----------------------------------------------------------
+Purpose: Enumerates all the ports on the system and calls pfnDevice.
+
+ pfnDevice can terminate the enumeration by returning FALSE.
+
+Returns: NO_ERROR if at least one port was found
+Cond: --
+*/
+DWORD
+APIENTRY
+EnumeratePorts(
+ IN ENUMPORTPROC pfnDevice,
+ IN LPARAM lParam) OPTIONAL
+ {
+ DWORD dwRet;
+ HKEY hkeyEnum;
+
+ dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, c_szSerialComm, &hkeyEnum);
+ if (NO_ERROR == dwRet)
+ {
+ BOOL bContinue;
+ PORTDATA pd;
+ DWORD iSubKey;
+ TCHAR szValue[MAX_BUF];
+ DWORD cbValue;
+ DWORD cbData;
+ DWORD dwType;
+
+ dwRet = ERROR_PATH_NOT_FOUND; // assume no ports
+
+ iSubKey = 0;
+
+ cbValue = sizeof(szValue);
+ cbData = sizeof(pd.szPort);
+
+ while (NO_ERROR == RegEnumValue(hkeyEnum, iSubKey++, szValue, &cbValue,
+ NULL, &dwType, (LPBYTE)pd.szPort, &cbData))
+ {
+ if (REG_SZ == dwType)
+ {
+ // Friendly name is the same as the port name right now
+ dwRet = NO_ERROR;
+
+ pd.nSubclass = PORT_SUBCLASS_SERIAL;
+ lstrcpy(pd.szFriendly, pd.szPort);
+
+ bContinue = pfnDevice((HPORTDATA)&pd, lParam);
+
+ // Continue?
+ if ( !bContinue )
+ {
+ // No
+ break;
+ }
+ }
+
+ cbValue = sizeof(szValue);
+ cbData = sizeof(pd.szPort);
+ }
+
+ RegCloseKey(hkeyEnum);
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function fills the given buffer with the properties
+ of the particular port.
+
+ Wide-char version.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+APIENTRY
+PortData_GetPropertiesW(
+ IN HPORTDATA hportdata,
+ OUT LPPORTDATA_W pdataBuf)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(hportdata);
+ ASSERT(pdataBuf);
+
+ if (hportdata && pdataBuf)
+ {
+ // Is the handle to a Widechar version?
+ if (sizeof(PORTDATA_W) == pdataBuf->cbSize)
+ {
+ // Yes
+ LPPORTDATA_W ppd = (LPPORTDATA_W)hportdata;
+
+ pdataBuf->nSubclass = ppd->nSubclass;
+
+ lstrcpynW(pdataBuf->szPort, ppd->szPort, SIZECHARS(pdataBuf->szPort));
+ lstrcpynW(pdataBuf->szFriendly, ppd->szFriendly, SIZECHARS(pdataBuf->szFriendly));
+
+ bRet = TRUE;
+ }
+ else if (sizeof(PORTDATA_A) == pdataBuf->cbSize)
+ {
+ // No; this is the Ansi version
+ LPPORTDATA_A ppd = (LPPORTDATA_A)hportdata;
+
+ pdataBuf->nSubclass = ppd->nSubclass;
+
+ MultiByteToWideChar(CP_ACP, 0, ppd->szPort, -1, pdataBuf->szPort, SIZECHARS(pdataBuf->szPort));
+ MultiByteToWideChar(CP_ACP, 0, ppd->szFriendly, -1, pdataBuf->szFriendly, SIZECHARS(pdataBuf->szFriendly));
+
+ bRet = TRUE;
+ }
+ else
+ {
+ // Some invalid size
+ ASSERT(0);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function fills the given buffer with the properties
+ of the particular port.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+APIENTRY
+PortData_GetPropertiesA(
+ IN HPORTDATA hportdata,
+ OUT LPPORTDATA_A pdataBuf)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(hportdata);
+ ASSERT(pdataBuf);
+
+ if (hportdata && pdataBuf)
+ {
+ // Is the handle to a Widechar version?
+ if (sizeof(PORTDATA_W) == pdataBuf->cbSize)
+ {
+ // Yes
+ LPPORTDATA_W ppd = (LPPORTDATA_W)hportdata;
+
+ pdataBuf->nSubclass = ppd->nSubclass;
+
+ WideCharToMultiByte(CP_ACP, 0, ppd->szPort, -1, pdataBuf->szPort, SIZECHARS(pdataBuf->szPort), NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, ppd->szFriendly, -1, pdataBuf->szFriendly, SIZECHARS(pdataBuf->szFriendly), NULL, NULL);
+
+ bRet = TRUE;
+ }
+ else if (sizeof(PORTDATA_A) == pdataBuf->cbSize)
+ {
+ // No; this is the Ansi version
+ LPPORTDATA_A ppd = (LPPORTDATA_A)hportdata;
+
+ pdataBuf->nSubclass = ppd->nSubclass;
+
+ lstrcpynA(pdataBuf->szPort, ppd->szPort, SIZECHARS(pdataBuf->szPort));
+ lstrcpynA(pdataBuf->szFriendly, ppd->szFriendly, SIZECHARS(pdataBuf->szFriendly));
+
+ bRet = TRUE;
+ }
+ else
+ {
+ // Some invalid size
+ ASSERT(0);
+ }
+ }
+
+ return bRet;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// DeviceInstaller wrappers and support functions
+//-----------------------------------------------------------------------------------
+
+#pragma data_seg(DATASEG_READONLY)
+
+static TCHAR const FAR c_szBackslash[] = TEXT("\\");
+static TCHAR const FAR c_szSeparator[] = TEXT("::");
+static TCHAR const FAR c_szFriendlyName[] = TEXT("FriendlyName"); // REGSTR_VAL_FRIENDLYNAME
+static TCHAR const FAR c_szDeviceType[] = TEXT("DeviceType"); // REGSTR_VAL_DEVTYPE
+static TCHAR const FAR c_szAttachedTo[] = TEXT("AttachedTo");
+static TCHAR const FAR c_szDriverDesc[] = TEXT("DriverDesc"); // REGSTR_VAL_DRVDESC
+static TCHAR const FAR c_szManufacturer[] = TEXT("Manufacturer");
+static TCHAR const FAR c_szRespKeyName[] = TEXT("ResponsesKeyName");
+
+TCHAR const FAR c_szRefCount[] = TEXT("RefCount");
+TCHAR const FAR c_szResponses[] = TEXT("Responses");
+
+#define DRIVER_KEY REGSTR_PATH_SETUP TEXT("\\Unimodem\\DeviceSpecific")
+#define RESPONSES_KEY TEXT("\\Responses")
+
+#pragma data_seg()
+
+
+/*----------------------------------------------------------
+Purpose: Retrieves the friendly name of the device. If there
+ is no such device or friendly name, this function
+ returns FALSE.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiGetPrivateProperties(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT PMODEM_PRIV_PROP pmpp)
+ {
+ BOOL bRet;
+ HKEY hkey;
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pmpp);
+
+ if (sizeof(*pmpp) != pmpp->cbSize)
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+ else
+ {
+ hkey = CplDiOpenDevRegKey(hdi, pdevData, DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_READ);
+ if (INVALID_HANDLE_VALUE == hkey)
+ {
+#ifdef DEBUG
+ DWORD dwErr = NO_ERROR;
+ dwErr = GetLastError();
+#endif
+ bRet = FALSE;
+ }
+ else
+ {
+ DWORD cbData;
+ DWORD dwMask = pmpp->dwMask;
+ BYTE nValue;
+
+ pmpp->dwMask = 0;
+
+ if (IsFlagSet(dwMask, MPPM_FRIENDLY_NAME))
+ {
+ // Attempt to get the friendly name
+ cbData = sizeof(pmpp->szFriendlyName);
+ if (NO_ERROR == RegQueryValueEx(hkey, c_szFriendlyName, NULL, NULL,
+ (LPBYTE)pmpp->szFriendlyName, &cbData))
+ {
+ SetFlag(pmpp->dwMask, MPPM_FRIENDLY_NAME);
+ }
+ }
+
+ if (IsFlagSet(dwMask, MPPM_DEVICE_TYPE))
+ {
+ // Attempt to get the device type
+ cbData = sizeof(nValue);
+ if (NO_ERROR == RegQueryValueEx(hkey, c_szDeviceType, NULL, NULL,
+ &nValue, &cbData))
+ {
+ pmpp->nDeviceType = nValue; // dword <-- byte
+ SetFlag(pmpp->dwMask, MPPM_DEVICE_TYPE);
+ }
+ }
+
+ if (IsFlagSet(dwMask, MPPM_PORT))
+ {
+ // Attempt to get the attached port
+ cbData = sizeof(pmpp->szPort);
+ if (NO_ERROR == RegQueryValueEx(hkey, c_szAttachedTo, NULL, NULL,
+ (LPBYTE)pmpp->szPort, &cbData))
+ {
+ SetFlag(pmpp->dwMask, MPPM_PORT);
+ }
+ }
+
+ bRet = TRUE;
+
+ RegCloseKey(hkey);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function returns the bus type on which the device
+ can be enumerated.
+
+Returns: TRUE on success
+
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiGetBusType(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ OUT LPDWORD pdwBusType)
+ {
+ BOOL bRet;
+ TCHAR DeviceInstanceId[MAX_DEVICE_ID_LEN];
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdwBusType);
+
+#ifdef WIN95
+
+ // For Win95, the bus type was determined thru a couple of means.
+ // Before the device is registered with the configuration manager
+ // (CM), we parse the registry pathname to determine the bus type.
+ // Once the device is registered, we use the CM APIs.
+ //
+ // The functions used in the modem legacy code were:
+ //
+ // IsRootEnumerated
+ // IsPCMCIA
+ // IsStrInStr
+ // StrIsExternalPnP
+
+#else
+
+#define REGSTR_KEY_ISAENUM_ROOT (REGSTR_KEY_ISAENUM TEXT("\\"))
+
+ // For NT SUR, the bus type is either ROOT or ISAPNP (treated as 'other')
+ // Hot plug and play and additional enumerators will be implemented
+ // after SUR.
+
+ //
+ // Get the device instance name, to determine if it's under the PNPISA
+ // enumerator branch.
+ //
+ SetupDiGetDeviceInstanceId(hdi,
+ pdevData,
+ DeviceInstanceId,
+ sizeof(DeviceInstanceId) / sizeof(TCHAR),
+ NULL
+ );
+ *pdwBusType = _tcsnicmp(DeviceInstanceId,
+ REGSTR_KEY_ISAENUM_ROOT,
+ sizeof(REGSTR_KEY_ISAENUM_ROOT) / sizeof(TCHAR) - 1)
+ ? BUS_TYPE_ROOT
+ : BUS_TYPE_OTHER;
+ bRet = TRUE;
+
+#endif // WIN95
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function returns the name of the common driver
+ type key for the given driver. We'll use the
+ driver description string, since it's unique per
+ driver but not per installation (the friendly name
+ is the latter).
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PRIVATE
+OLD_GetCommonDriverKeyName(
+ IN HKEY hkeyDrv,
+ IN DWORD cbKeyName,
+ OUT LPTSTR pszKeyName)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+
+ lErr = RegQueryValueEx(hkeyDrv, c_szDriverDesc, NULL, NULL,
+ (LPBYTE)pszKeyName, &cbKeyName);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_WARNING, "RegQueryValueEx(DriverDesc) failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function tries to open the *old style* common
+ Responses key for the given driver, which used only
+ the driver description string for a key name.
+ The key is opened with READ access.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PRIVATE
+OLD_OpenCommonResponsesKey(
+ IN HKEY hkeyDrv,
+ OUT PHKEY phkeyResp)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ TCHAR szComDrv[MAX_REG_KEY_LEN];
+ TCHAR szPath[2*MAX_REG_KEY_LEN];
+
+ *phkeyResp = NULL;
+
+ // Get the name (*old style*) of the common driver key.
+ if (!OLD_GetCommonDriverKeyName(hkeyDrv, sizeof(szComDrv), szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "OLD_GetCommonDriverKeyName() failed.");
+ goto exit;
+ }
+
+ TRACE_MSG(TF_WARNING, "OLD_GetCommonDriverKeyName(): %s", szComDrv);
+
+ // Construct the path to the (*old style*) Responses key.
+ lstrcpy(szPath, DRIVER_KEY TEXT("\\"));
+ lstrcat(szPath, szComDrv);
+ lstrcat(szPath, RESPONSES_KEY);
+
+ // Open the (*old style*) Responses key.
+ lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, phkeyResp);
+
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx(Responses) failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function finds the name of the common driver
+ type key for the given driver. First it'll look for
+ the new style key name ("ResponsesKeyName" value),
+ and if that doesn't exist then it'll look for the
+ old style key name ("Description" value), both of
+ which are stored in the driver node.
+
+NOTE: The given driver key handle is assumed to contain
+ at least the Description value.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+FindCommonDriverKeyName(
+ IN HKEY hkeyDrv,
+ IN DWORD cbKeyName,
+ OUT LPTSTR pszKeyName)
+{
+ BOOL bRet = TRUE; // assume *success*
+ LONG lErr;
+
+ // Is the (new style) key name is registered in the driver node?
+ lErr = RegQueryValueEx(hkeyDrv, c_szRespKeyName, NULL, NULL,
+ (LPBYTE)pszKeyName, &cbKeyName);
+ if (lErr == ERROR_SUCCESS)
+ {
+ goto exit;
+ }
+
+ // No. The key name will be in the old style: just the Description.
+ lErr = RegQueryValueEx(hkeyDrv, c_szDriverDesc, NULL, NULL,
+ (LPBYTE)pszKeyName, &cbKeyName);
+ if (lErr == ERROR_SUCCESS)
+ {
+ goto exit;
+ }
+
+ // Couldn't get a key name!! Something's wrong....
+ ASSERT(0);
+ bRet = FALSE;
+
+exit:
+ return(bRet);
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function returns the name of the common driver
+ type key for the given driver. The key name is the
+ concatenation of 3 strings found in the driver node
+ of the registry: the driver description, the manu-
+ facturer, and the provider. (The driver description
+ is used since it's unique per driver but not per
+ installation (the "friendly" name is the latter).
+
+NOTE: The component substrings are either read from the
+ driver's registry key, or from the given driver info
+ data. If pdrvData is given, the strings it contains
+ are assumed to be valid (non-NULL).
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+GetCommonDriverKeyName(
+ IN HKEY hkeyDrv, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ IN DWORD cbKeyName,
+ OUT LPTSTR pszKeyName)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ DWORD dwByteCount, cbData;
+ TCHAR szDescription[MAX_REG_KEY_LEN];
+ TCHAR szManufacturer[MAX_REG_KEY_LEN];
+ TCHAR szProvider[MAX_REG_KEY_LEN];
+ LPTSTR lpszDesc, lpszMfct, lpszProv;
+
+ dwByteCount = 0;
+ lpszDesc = NULL;
+ lpszMfct = NULL;
+ lpszProv = NULL;
+
+ if (hkeyDrv)
+ {
+ // First see if it's already been registered in the driver node.
+ lErr = RegQueryValueEx(hkeyDrv, c_szRespKeyName, NULL, NULL,
+ (LPBYTE)pszKeyName, &cbKeyName);
+ if (lErr == ERROR_SUCCESS)
+ {
+ bRet = TRUE;
+ goto exit;
+ }
+
+ // Responses key doesn't exist - read its components from the registry.
+ cbData = sizeof(szDescription);
+ lErr = RegQueryValueEx(hkeyDrv, c_szDriverDesc, NULL, NULL,
+ (LPBYTE)szDescription, &cbData);
+ if (lErr == ERROR_SUCCESS)
+ {
+ // Is the Description string *alone* too long to be a key name?
+ // If so then we're hosed - fail the call.
+ if (cbData > CB_MAX_REG_KEY_LEN)
+ {
+ goto exit;
+ }
+
+ dwByteCount = cbData;
+ lpszDesc = szDescription;
+
+ cbData = sizeof(szManufacturer);
+ lErr = RegQueryValueEx(hkeyDrv, c_szManufacturer, NULL, NULL,
+ (LPBYTE)szManufacturer, &cbData);
+ if (lErr == ERROR_SUCCESS)
+ {
+ // only use the manufacturer name if total string size is ok
+ cbData += sizeof(c_szSeparator);
+ if ((dwByteCount + cbData) <= CB_MAX_REG_KEY_LEN)
+ {
+ dwByteCount += cbData;
+ lpszMfct = szManufacturer;
+ }
+ }
+
+ cbData = sizeof(szProvider);
+ lErr = RegQueryValueEx(hkeyDrv, REGSTR_VAL_PROVIDER_NAME, NULL, NULL,
+ (LPBYTE)szProvider, &cbData);
+ if (lErr == ERROR_SUCCESS)
+ {
+ // only use the provider name if total string size is ok
+ cbData += sizeof(c_szSeparator);
+ if ((dwByteCount + cbData) <= CB_MAX_REG_KEY_LEN)
+ {
+ dwByteCount += cbData;
+ lpszProv = szProvider;
+ }
+ }
+ }
+ }
+
+ // Weren't able to read key name components out of the driver node.
+ // Get them from the driver info data if one was given.
+ if (pdrvData && !dwByteCount)
+ {
+ lpszDesc = pdrvData->Description;
+
+ if (!lpszDesc[0])
+ {
+ // Didn't get a Description string. Fail the call.
+ goto exit;
+ }
+
+ dwByteCount = CbFromCch(lstrlen(lpszDesc)+1);
+
+ // Is the Description string *alone* too long to be a key name?
+ // If so then we're hosed - fail the call.
+ if (dwByteCount > CB_MAX_REG_KEY_LEN)
+ {
+ goto exit;
+ }
+
+ cbData = sizeof(c_szSeparator)
+ + CbFromCch(lstrlen(pdrvData->MfgName)+1);
+ if ((dwByteCount + cbData) <= CB_MAX_REG_KEY_LEN)
+ {
+ dwByteCount += cbData;
+ lpszMfct = pdrvData->MfgName;
+ }
+
+ cbData = sizeof(c_szSeparator)
+ + CbFromCch(lstrlen(pdrvData->ProviderName)+1);
+ if ((dwByteCount + cbData) <= CB_MAX_REG_KEY_LEN)
+ {
+ dwByteCount += cbData;
+ lpszProv = pdrvData->ProviderName;
+ }
+ }
+
+ // By now we should have a Description string. If not, fail the call.
+ if (!lpszDesc[0])
+ {
+ goto exit;
+ }
+
+ // Construct the key name string out of its components.
+ lstrcpy(pszKeyName, lpszDesc);
+
+ if (lpszMfct && *lpszMfct)
+ {
+ lstrcat(pszKeyName, c_szSeparator);
+ lstrcat(pszKeyName, lpszMfct);
+ }
+
+ if (lpszProv && *lpszProv)
+ {
+ lstrcat(pszKeyName, c_szSeparator);
+ lstrcat(pszKeyName, lpszProv);
+ }
+
+ // Write the key name to the driver node (we know it's not there already).
+ if (hkeyDrv)
+ {
+ lErr = RegSetValueEx(hkeyDrv, c_szRespKeyName, 0, REG_SZ,
+ (LPBYTE)pszKeyName, CbFromCch(lstrlen(pszKeyName)+1));
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegSetValueEx(RespKeyName) failed: %#08lx.", lErr);
+ ASSERT(0);
+ }
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function creates the common driver type key
+ for the given driver, or opens it if it already
+ exists, with the requested access.
+
+NOTE: Either hkeyDrv or pdrvData must be provided.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+OpenCommonDriverKey(
+ IN HKEY hkeyDrv, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ IN REGSAM samAccess,
+ OUT PHKEY phkeyComDrv)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ HKEY hkeyDrvInfo = NULL;
+ TCHAR szComDrv[MAX_REG_KEY_LEN];
+ TCHAR szPath[2*MAX_REG_KEY_LEN];
+ DWORD dwDisp;
+
+ if (!GetCommonDriverKeyName(hkeyDrv, pdrvData, sizeof(szComDrv), szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "GetCommonDriverKeyName() failed.");
+ goto exit;
+ }
+
+ TRACE_MSG(TF_WARNING, "GetCommonDriverKeyName(): %s", szComDrv);
+
+ // Construct the path to the common driver key.
+ lstrcpy(szPath, DRIVER_KEY TEXT("\\"));
+ lstrcat(szPath, szComDrv);
+
+ // Create the common driver key - it'll be opened if it already exists.
+ lErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, NULL,
+ REG_OPTION_NON_VOLATILE, samAccess, NULL, phkeyComDrv, &dwDisp);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegCreateKeyEx(common drv) failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function opens or creates the common Responses
+ key for the given driver, based on the given flags.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+OpenCommonResponsesKey(
+ IN HKEY hkeyDrv,
+ IN CKFLAGS ckFlags,
+ IN REGSAM samAccess,
+ OUT PHKEY phkeyResp,
+ OUT LPDWORD lpdwExisted)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ HKEY hkeyComDrv = NULL;
+ REGSAM sam;
+ DWORD dwRefCount, cbData;
+
+ *phkeyResp = NULL;
+
+ sam = (ckFlags & CKFLAG_CREATE) ? KEY_ALL_ACCESS : KEY_READ;
+ if (!OpenCommonDriverKey(hkeyDrv, NULL, sam, &hkeyComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "OpenCommonDriverKey() failed.");
+ goto exit;
+ }
+
+ // Create or open the common Responses key.
+ if (ckFlags & CKFLAG_CREATE)
+ {
+ lErr = RegCreateKeyEx(hkeyComDrv, c_szResponses, 0, NULL,
+ REG_OPTION_NON_VOLATILE, samAccess, NULL, phkeyResp, lpdwExisted);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegCreateKeyEx(common drv) failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Create or increment a common Responses key reference count value.
+ cbData = sizeof(dwRefCount);
+ if (*lpdwExisted == REG_OPENED_EXISTING_KEY)
+ {
+ lErr = RegQueryValueEx(hkeyComDrv, c_szRefCount, NULL, NULL,
+ (LPBYTE)&dwRefCount, &cbData);
+
+ // To accomodate modems installed before this reference count
+ // mechanism was added (post-Beta2), if the reference count doesn't
+ // exist then just ignore it & install anyways. In this case the
+ // shared Responses key will never be removed.
+ if (lErr == ERROR_SUCCESS)
+ {
+ ASSERT(dwRefCount); // expecting non-0 ref count
+ ASSERT(cbData == sizeof(DWORD)); // expecting DWORD ref count
+ dwRefCount++; // increment ref count
+ }
+ else
+ {
+ if (lErr == ERROR_FILE_NOT_FOUND)
+ dwRefCount = 0;
+ else
+ {
+ // some error other than key doesn't exist
+ TRACE_MSG(TF_ERROR, "RegQueryValueEx(RefCount) failed: %#08lx.", lErr);
+ goto exit;
+ }
+ }
+ }
+ else dwRefCount = 1;
+
+ if (dwRefCount)
+ {
+ lErr = RegSetValueEx(hkeyComDrv, c_szRefCount, 0, REG_DWORD,
+ (LPBYTE)&dwRefCount, cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegSetValueEx(RefCount) failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+ }
+
+ }
+ else if (ckFlags & CKFLAG_OPEN)
+ {
+ lErr = RegOpenKeyEx(hkeyComDrv, c_szResponses, 0, samAccess, phkeyResp);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx(common drv) failed: %#08lx.", lErr);
+ goto exit;
+ }
+ }
+
+ bRet = TRUE;
+
+exit:
+ if (!bRet)
+ {
+ // something failed - close any open Responses key
+ if (*phkeyResp)
+ RegCloseKey(*phkeyResp);
+ }
+
+ if (hkeyComDrv)
+ RegCloseKey(hkeyComDrv);
+
+ return(bRet);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function finds the Responses key for the given
+ modem driver and returns an open hkey to it. The
+ Responses key may exist in the common driver type
+ key, or it may be in the individual driver key.
+ The key is opened with READ access.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+OpenResponsesKey(
+ IN HKEY hkeyDrv,
+ OUT PHKEY phkeyResp)
+ {
+ LONG lErr;
+
+ // Try to open the common Responses subkey.
+ if (!OpenCommonResponsesKey(hkeyDrv, CKFLAG_OPEN, KEY_READ, phkeyResp, NULL))
+ {
+ TRACE_MSG(TF_ERROR, "OpenCommonResponsesKey() failed, assume non-existent.");
+
+ // Failing that, open the *old style* common Responses subkey.
+ if (!OLD_OpenCommonResponsesKey(hkeyDrv, phkeyResp))
+ {
+ // Failing that, try to open a Responses subkey in the driver node.
+ lErr = RegOpenKeyEx(hkeyDrv, c_szResponses, 0, KEY_READ, phkeyResp);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx() failed: %#08lx.", lErr);
+ return (FALSE);
+ }
+ }
+ }
+
+ return(TRUE);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function deletes a registry key and all of
+ its subkeys. A registry key that is opened by an
+ application can be deleted without error by another
+ application in both Windows 95 and Windows NT.
+ This is by design. This code makes no attempt to
+ check or recover from partial deletions.
+
+NOTE: Adapted from sample code in the MSDN Knowledge Base
+ article #Q142491.
+
+Returns: ERROR_SUCCESS on success
+ WIN32 error code on error
+Cond: --
+*/
+DWORD
+PRIVATE
+RegDeleteKeyNT(
+ IN HKEY hStartKey,
+ IN LPTSTR pKeyName)
+{
+ DWORD dwRtn, dwSubKeyLength;
+ LPTSTR pSubKey = NULL;
+ TCHAR szSubKey[MAX_REG_KEY_LEN]; // this should be dynamic.
+ HKEY hKey;
+
+ // do not allow NULL or empty key name
+ if (pKeyName && lstrlen(pKeyName))
+ {
+ if ((dwRtn = RegOpenKeyEx(hStartKey, pKeyName,
+ 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &hKey)) == ERROR_SUCCESS)
+ {
+ while (dwRtn == ERROR_SUCCESS)
+ {
+ dwSubKeyLength = sizeof(szSubKey);
+ dwRtn = RegEnumKeyEx( hKey,
+ 0, // always index zero
+ szSubKey,
+ &dwSubKeyLength,
+ NULL,
+ NULL,
+ NULL,
+ NULL );
+
+ if (dwRtn == ERROR_NO_MORE_ITEMS)
+ {
+ dwRtn = RegDeleteKey(hStartKey, pKeyName);
+ break;
+ }
+ else if (dwRtn == ERROR_SUCCESS)
+ dwRtn = RegDeleteKeyNT(hKey, szSubKey);
+ }
+
+ RegCloseKey(hKey);
+ // Do not save return code because error
+ // has already occurred
+ }
+ }
+ else
+ dwRtn = ERROR_BADKEY;
+
+ return dwRtn;
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function deletes the common driver key (or
+ decrements its reference count) associated with the
+ driver given by name.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+DeleteCommonDriverKeyByName(
+ IN LPTSTR pszKeyName)
+{
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ TCHAR szPath[2*MAX_REG_KEY_LEN];
+ HKEY hkeyComDrv, hkeyPrnt;
+ DWORD dwRefCount, cbData;
+
+ // Construct the path to the driver's common key and open it.
+ lstrcpy(szPath, DRIVER_KEY TEXT("\\"));
+ lstrcat(szPath, pszKeyName);
+
+ lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, KEY_ALL_ACCESS,
+ &hkeyComDrv);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx() failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ // Check the common driver key reference count and decrement
+ // it or delete the key (& the Responses subkey).
+ cbData = sizeof(dwRefCount);
+ lErr = RegQueryValueEx(hkeyComDrv, c_szRefCount, NULL, NULL,
+ (LPBYTE)&dwRefCount, &cbData);
+
+ // To accomodate modems installed before this reference count
+ // mechanism was added (post-Beta2), if the reference count doesn't
+ // exist then just ignore it. In this case the shared Responses key
+ // will never be removed.
+ if (lErr == ERROR_SUCCESS)
+ {
+ ASSERT(dwRefCount); // expecting non-0 ref count
+ if (--dwRefCount)
+ {
+ lErr = RegSetValueEx(hkeyComDrv, c_szRefCount, 0, REG_DWORD,
+ (LPBYTE)&dwRefCount, cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegSetValueEx(RefCount) failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+ }
+ else
+ {
+ lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE, DRIVER_KEY, 0,
+ KEY_ENUMERATE_SUB_KEYS, &hkeyPrnt);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx(Prnt) failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ lErr = RegDeleteKeyNT(hkeyPrnt, pszKeyName);
+
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegDeleteKeyNT(ComDrv) failed: %#08lx.", lErr);
+ goto exit;
+ }
+ }
+ }
+ else if (lErr != ERROR_FILE_NOT_FOUND)
+ {
+ // some error other than key doesn't exist
+ TRACE_MSG(TF_ERROR, "RegQueryValueEx(RefCount) failed: %#08lx.", lErr);
+ goto exit;
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function deletes the common driver key (or
+ decrements its reference count) associated with the
+ driver given by driver key.
+
+Returns: TRUE on success
+ FALSE on error
+Cond: --
+*/
+BOOL
+PUBLIC
+DeleteCommonDriverKey(
+ IN HKEY hkeyDrv)
+{
+ BOOL bRet = FALSE;
+ TCHAR szComDrv[MAX_REG_KEY_LEN];
+
+ // Get the name of the common driver key for this driver.
+ if (!GetCommonDriverKeyName(hkeyDrv, NULL, sizeof(szComDrv), szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "GetCommonDriverKeyName() failed.");
+ goto exit;
+ }
+
+ if (!DeleteCommonDriverKeyByName(szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "DeleteCommonDriverKey() failed.");
+ }
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+
+}
diff --git a/private/unimodem/common/rovini.c b/private/unimodem/common/rovini.c
new file mode 100644
index 000000000..b37f6d254
--- /dev/null
+++ b/private/unimodem/common/rovini.c
@@ -0,0 +1,298 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovini.c
+//
+// This file contains profile (.ini) routines.
+// Meant to be used in conjunction with rovcomm.c.
+//
+// History:
+// 08-06-93 ScottH Transferred from twin code
+// 05-05-95 ScottH Made generic from Briefcase code
+//
+
+
+#include "proj.h"
+#include <rovcomm.h>
+
+#ifndef NOPROFILE
+
+#pragma data_seg(DATASEG_READONLY)
+
+// (c_szRovIniFile and c_szRovIniSecDebugUI are defined in rovdbg.h)
+extern WCHAR const FAR c_szRovIniFile[];
+extern WCHAR const FAR c_szRovIniSecDebugUI[];
+
+TCHAR const FAR c_szZero[] = TEXT("0");
+TCHAR const FAR c_szIniKeyBreakFlags[] = TEXT("BreakFlags");
+TCHAR const FAR c_szIniKeyTraceFlags[] = TEXT("TraceFlags");
+TCHAR const FAR c_szIniKeyDumpFlags[] = TEXT("DumpFlags");
+
+#pragma data_seg()
+
+
+// Some of the .ini processing code was pimped from the sync engine.
+//
+
+typedef struct _INIKEYHEADER
+ {
+ LPCTSTR pszSectionName;
+ LPCTSTR pszKeyName;
+ LPCTSTR pszDefaultRHS;
+ } INIKEYHEADER;
+
+typedef struct _BOOLINIKEY
+ {
+ INIKEYHEADER ikh;
+ LPDWORD puStorage;
+ DWORD dwFlag;
+ } BOOLINIKEY;
+
+typedef struct _INTINIKEY
+ {
+ INIKEYHEADER ikh;
+ LPDWORD puStorage;
+ } INTINIKEY;
+
+
+// Some of these macros taken from prefs.h in Pen project...
+//
+#define PutIniIntCmp(idsSection, idsKey, nNewValue, nSave) \
+ if ((nNewValue) != (nSave)) PutIniInt(idsSection, idsKey, nNewValue)
+
+#define WritePrivateProfileInt(szApp, szKey, i, lpFileName) \
+ {CHAR sz[7]; \
+ WritePrivateProfileString(szApp, szKey, SzFromInt(sz, i), lpFileName);}
+
+
+#ifdef SHARED_DLL
+#pragma data_seg(DATASEG_PERINSTANCE)
+#endif
+
+// Array of keys with Integer RHSs to be processed by ProcessIniFile()
+
+static INTINIKEY s_rgiik[] =
+ {
+ {
+ { c_szRovIniSecDebugUI, c_szIniKeyTraceFlags, c_szZero },
+ &g_dwTraceFlags
+ },
+
+ {
+ { c_szRovIniSecDebugUI, c_szIniKeyDumpFlags, c_szZero },
+ &g_dwDumpFlags
+ },
+
+ {
+ { c_szRovIniSecDebugUI, c_szIniKeyBreakFlags, c_szZero },
+ &g_dwBreakFlags
+ },
+
+ };
+
+// Array of keys with Boolean RHSs to be processed by ProcessIniFile()
+
+#if 0 // (use this as an example)
+static BOOLINIKEY s_rgbik[] =
+ {
+ {
+ { c_szRovIniSecDebugUI, c_szIniKeyBreakOnOpen, c_szZero },
+ &g_uBreakFlags,
+ BF_ONOPEN
+ },
+
+ };
+#endif
+
+#ifdef SHARED_DLL
+#pragma data_seg()
+#endif
+
+
+/* Boolean TRUE strings used by IsIniYes() (comparison is case-insensitive) */
+
+static LPCTSTR s_rgpszTrue[] =
+ {
+ TEXT("1"),
+ TEXT("On"),
+ TEXT("True"),
+ TEXT("Y"),
+ TEXT("Yes")
+ };
+
+/* Boolean FALSE strings used by IsIniYes() (comparison is case-insensitive) */
+
+static LPCTSTR s_rgpszFalse[] =
+ {
+ TEXT("0"),
+ TEXT("Off"),
+ TEXT("False"),
+ TEXT("N"),
+ TEXT("No")
+ };
+
+
+
+
+/*----------------------------------------------------------
+Purpose: Determines whether a string corresponds to a boolean
+ TRUE value.
+Returns: The boolean value (TRUE or FALSE)
+Cond: --
+*/
+BOOL PRIVATE IsIniYes(
+ LPCTSTR psz)
+ {
+ int i;
+ BOOL bNotFound = TRUE;
+ BOOL bResult;
+
+ ASSERT(psz);
+
+ /* Is the value TRUE? */
+
+ for (i = 0; i < ARRAYSIZE(s_rgpszTrue); i++)
+ {
+ if (IsSzEqual(psz, s_rgpszTrue[i]))
+ {
+ bResult = TRUE;
+ bNotFound = FALSE;
+ break;
+ }
+ }
+
+ /* Is the value FALSE? */
+
+ if (bNotFound)
+ {
+ for (i = 0; i < ARRAYSIZE(s_rgpszFalse); i++)
+ {
+ if (IsSzEqual(psz, s_rgpszFalse[i]))
+ {
+ bResult = FALSE;
+ bNotFound = FALSE;
+ break;
+ }
+ }
+
+ /* Is the value a known string? */
+
+ if (bNotFound)
+ {
+ /* No. Whine about it. */
+
+ TRACE_MSG(TF_WARNING, "IsIniYes() called on unknown Boolean RHS '%s'.", psz);
+ bResult = FALSE;
+ }
+ }
+
+ return bResult;
+ }
+
+
+#if 0 // (use this as an example)
+/*----------------------------------------------------------
+Purpose: Process keys with boolean RHSs.
+Returns: --
+Cond: --
+*/
+void PRIVATE ProcessBooleans(void)
+ {
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(s_rgbik); i++)
+ {
+ DWORD dwcbKeyLen;
+ TCHAR szRHS[MAX_BUF];
+ BOOLINIKEY * pbik = &(s_rgbik[i]);
+ LPCTSTR lpcszRHS;
+
+ /* Look for key. */
+
+ dwcbKeyLen = GetPrivateProfileString(pbik->ikh.pszSectionName,
+ pbik->ikh.pszKeyName, TEXT(""), szRHS,
+ SIZECHARS(szRHS), c_szRovIniFile);
+
+ if (dwcbKeyLen)
+ lpcszRHS = szRHS;
+ else
+ lpcszRHS = pbik->ikh.pszDefaultRHS;
+
+ if (IsIniYes(lpcszRHS))
+ {
+ if (IsFlagClear(*(pbik->puStorage), pbik->dwFlag))
+ TRACE_MSG(TF_GENERAL, "ProcessIniFile(): %s set in %s![%s].",
+ pbik->ikh.pszKeyName,
+ c_szRovIniFile,
+ pbik->ikh.pszSectionName);
+
+ SetFlag(*(pbik->puStorage), pbik->dwFlag);
+ }
+ else
+ {
+ if (IsFlagSet(*(pbik->puStorage), pbik->dwFlag))
+ TRACE_MSG(TF_GENERAL, "ProcessIniFile(): %s cleared in %s![%s].",
+ pbik->ikh.pszKeyName,
+ c_szRovIniFile,
+ pbik->ikh.pszSectionName);
+
+ ClearFlag(*(pbik->puStorage), pbik->dwFlag);
+ }
+ }
+ }
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Process keys with integer RHSs.
+Returns: --
+Cond: --
+*/
+void PRIVATE ProcessIntegers(void)
+ {
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(s_rgiik); i++)
+ {
+ DWORD dwcbKeyLen;
+ TCHAR szRHS[MAX_BUF];
+ INTINIKEY * piik = &(s_rgiik[i]);
+ LPCTSTR lpcszRHS;
+
+ /* Look for key. */
+
+ dwcbKeyLen = GetPrivateProfileString(piik->ikh.pszSectionName,
+ piik->ikh.pszKeyName, TEXT(""), szRHS,
+ SIZECHARS(szRHS), c_szRovIniFile);
+
+ if (dwcbKeyLen)
+ lpcszRHS = szRHS;
+ else
+ lpcszRHS = piik->ikh.pszDefaultRHS;
+
+ AnsiToInt(lpcszRHS, (int FAR *)piik->puStorage);
+
+ TRACE_MSG(TF_GENERAL, "ProcessIniFile(): %s set to %#08x.",
+ piik->ikh.pszKeyName, *(piik->puStorage));
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Process initialization file
+Returns: TRUE if initialization is successful
+Cond: --
+*/
+BOOL PUBLIC RovComm_ProcessIniFile(void)
+ {
+ BOOL bResult = TRUE;
+
+ // Currently, all integer keys are for DEBUG use only.
+ //
+ ProcessIntegers();
+
+ return bResult;
+ }
+
+
+#endif // NOPROFILE
diff --git a/private/unimodem/common/rovmem.c b/private/unimodem/common/rovmem.c
new file mode 100644
index 000000000..653cb1859
--- /dev/null
+++ b/private/unimodem/common/rovmem.c
@@ -0,0 +1,2269 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// mem.c
+//
+// This file contains memory management and dynamic
+// array functions.
+//
+// History:
+// 09-27-94 ScottH Taken from commctrl
+// 04-29-95 ScottH Taken from briefcase and cleaned up
+//
+
+
+#include "proj.h"
+#include <rovcomm.h>
+
+#ifndef NOMEM
+
+//////////////////////////////////////////////////////////////////
+
+#ifdef WINNT
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of SetStringA
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL PUBLIC SetStringW(
+ LPWSTR FAR * ppszBuf,
+ LPCWSTR psz) // NULL to free *ppszBuf
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(ppszBuf);
+
+ // Free the buffer?
+ if (!psz)
+ {
+ // Yes
+ if (*ppszBuf)
+ {
+ LocalFree(LOCALOF(*ppszBuf));
+ *ppszBuf = NULL;
+ }
+ bRet = TRUE;
+ }
+ else
+ {
+ // No; (re)allocate and set buffer
+ UINT cb = CbFromCchW(lstrlenW(psz)+1);
+
+ if (*ppszBuf)
+ {
+ // Need to reallocate?
+ if (cb > LocalSize(LOCALOF(*ppszBuf)))
+ {
+ // Yes
+ LPWSTR pszT = (LPWSTR)LocalReAlloc(LOCALOF(*ppszBuf), cb, LMEM_MOVEABLE | LMEM_ZEROINIT);
+ if (pszT)
+ {
+ *ppszBuf = pszT;
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ // No
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ *ppszBuf = (LPWSTR)LocalAlloc(LPTR, cb);
+ if (*ppszBuf)
+ {
+ bRet = TRUE;
+ }
+ }
+
+ if (bRet)
+ {
+ ASSERT(*ppszBuf);
+ lstrcpyW(*ppszBuf, psz);
+ }
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of CatStringA
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+MyCatStringW(
+ IN OUT LPWSTR FAR * ppszBuf,
+ IN LPCWSTR psz, OPTIONAL
+ IN BOOL bMultiString)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(ppszBuf);
+
+ // Free the buffer?
+ if ( !psz )
+ {
+ // Yes
+ if (*ppszBuf)
+ {
+ LocalFree(LOCALOF(*ppszBuf));
+ *ppszBuf = NULL;
+ }
+ bRet = TRUE;
+ }
+ else
+ {
+ // No; (re)allocate and set buffer
+ LPWSTR pszBuf = *ppszBuf;
+ UINT cch;
+
+ cch = lstrlenW(psz) + 1; // account for null
+
+ if (bMultiString)
+ {
+ cch++; // account for second null
+ }
+
+ if (pszBuf)
+ {
+ UINT cchExisting;
+ LPWSTR pszT;
+
+ // Figure out how much of the buffer has been used
+
+ // Is this a multi-string (one with strings with a double-null
+ // terminator)?
+ if (bMultiString)
+ {
+ // Yes
+ UINT cchT;
+
+ cchExisting = 0;
+ pszT = (LPWSTR)pszBuf;
+ while (0 != *pszT)
+ {
+ cchT = lstrlenW(pszT) + 1;
+ cchExisting += cchT;
+ pszT += cchT;
+ }
+ }
+ else
+ {
+ // No; (don't need to count null because it is already
+ // counted in cch)
+ cchExisting = lstrlenW(pszBuf);
+ }
+
+ // Need to reallocate?
+ if (CbFromCchW(cch + cchExisting) > LocalSize(LOCALOF(pszBuf)))
+ {
+ // Yes; realloc at least MAX_BUF to cut down on the amount
+ // of calls in the future
+ cch = cchExisting + max(cch, MAX_BUF);
+
+ pszT = (LPWSTR)LocalReAlloc(LOCALOF(pszBuf),
+ CbFromCchW(cch),
+ LMEM_MOVEABLE | LMEM_ZEROINIT);
+ if (pszT)
+ {
+ pszBuf = pszT;
+ *ppszBuf = pszBuf;
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ // No
+ bRet = TRUE;
+ }
+
+ pszBuf += cchExisting;
+ }
+ else
+ {
+ cch = max(cch, MAX_BUF);
+
+ pszBuf = (LPWSTR)LocalAlloc(LPTR, CbFromCchW(cch));
+ if (pszBuf)
+ {
+ bRet = TRUE;
+ }
+
+ *ppszBuf = pszBuf;
+ }
+
+ if (bRet)
+ {
+ ASSERT(pszBuf);
+
+ lstrcpyW(pszBuf, psz);
+
+ if (bMultiString)
+ {
+ pszBuf[lstrlenW(psz) + 1] = 0; // Add second null terminator
+ }
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of CatStringA
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CatStringW(
+ IN OUT LPWSTR FAR * ppszBuf,
+ IN LPCWSTR psz)
+ {
+ return MyCatStringW(ppszBuf, psz, FALSE);
+ }
+
+/*----------------------------------------------------------
+Purpose: Wide-char version of CatMultiStringA
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CatMultiStringW(
+ IN OUT LPWSTR FAR * ppszBuf,
+ IN LPCWSTR psz)
+ {
+ return MyCatStringW(ppszBuf, psz, TRUE);
+ }
+
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Copies psz into *ppszBuf. Will alloc or realloc *ppszBuf
+ accordingly.
+
+ If psz is NULL, this function frees *ppszBuf. This is
+ the preferred method of freeing the allocated buffer.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL PUBLIC SetStringA(
+ LPSTR FAR * ppszBuf,
+ LPCSTR psz) // NULL to free *ppszBuf
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(ppszBuf);
+
+ // Free the buffer?
+ if (!psz)
+ {
+ // Yes
+ if (ppszBuf)
+ {
+ LocalFree(LOCALOF(*ppszBuf));
+ *ppszBuf = NULL;
+ }
+ bRet = TRUE;
+ }
+ else
+ {
+ // No; (re)allocate and set buffer
+ UINT cb = CbFromCchA(lstrlenA(psz)+1);
+
+ if (*ppszBuf)
+ {
+ // Need to reallocate?
+ if (cb > LocalSize(LOCALOF(*ppszBuf)))
+ {
+ // Yes
+ LPSTR pszT = (LPSTR)LocalReAlloc(LOCALOF(*ppszBuf), cb, LMEM_MOVEABLE | LMEM_ZEROINIT);
+ if (pszT)
+ {
+ *ppszBuf = pszT;
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ // No
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ *ppszBuf = (LPSTR)LocalAlloc(LPTR, cb);
+ if (*ppszBuf)
+ {
+ bRet = TRUE;
+ }
+ }
+
+ if (bRet)
+ {
+ ASSERT(*ppszBuf);
+ lstrcpyA(*ppszBuf, psz);
+ }
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Concatenates psz onto *ppszBuf. Will alloc or
+ realloc *ppszBuf accordingly.
+
+ If bMultiString is TRUE, psz will be appended with
+ a null terminator separating the existing string
+ and new string. A double-null terminator will
+ be tacked on the end, too.
+
+ To free, call MyCatString(ppszBuf, NULL).
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+MyCatStringA(
+ IN OUT LPSTR FAR * ppszBuf,
+ IN LPCSTR psz, OPTIONAL
+ IN BOOL bMultiString)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(ppszBuf);
+
+ // Free the buffer?
+ if ( !psz )
+ {
+ // Yes
+ if (*ppszBuf)
+ {
+ LocalFree(LOCALOF(*ppszBuf));
+ *ppszBuf = NULL;
+ }
+ bRet = TRUE;
+ }
+ else
+ {
+ // No; (re)allocate and set buffer
+ LPSTR pszBuf = *ppszBuf;
+ UINT cch;
+
+ cch = lstrlenA(psz) + 1; // account for null
+
+ if (bMultiString)
+ {
+ cch++; // account for second null
+ }
+
+ if (pszBuf)
+ {
+ UINT cchExisting;
+ LPSTR pszT;
+
+ // Figure out how much of the buffer has been used
+
+ // Is this a multi-string (one with strings with a double-null
+ // terminator)?
+ if (bMultiString)
+ {
+ // Yes
+ UINT cchT;
+
+ cchExisting = 0;
+ pszT = (LPSTR)pszBuf;
+ while (0 != *pszT)
+ {
+ cchT = lstrlenA(pszT) + 1;
+ cchExisting += cchT;
+ pszT += cchT;
+ }
+ }
+ else
+ {
+ // No; (don't need to count null because it is already
+ // counted in cch)
+ cchExisting = lstrlenA(pszBuf);
+ }
+
+ // Need to reallocate?
+ if (CbFromCchA(cch + cchExisting) > LocalSize(LOCALOF(pszBuf)))
+ {
+ // Yes; realloc at least MAX_BUF to cut down on the amount
+ // of calls in the future
+ cch = cchExisting + max(cch, MAX_BUF);
+
+ pszT = (LPSTR)LocalReAlloc(LOCALOF(pszBuf),
+ CbFromCchA(cch),
+ LMEM_MOVEABLE | LMEM_ZEROINIT);
+ if (pszT)
+ {
+ pszBuf = pszT;
+ *ppszBuf = pszBuf;
+ bRet = TRUE;
+ }
+ }
+ else
+ {
+ // No
+ bRet = TRUE;
+ }
+
+ pszBuf += cchExisting;
+ }
+ else
+ {
+ cch = max(cch, MAX_BUF);
+
+ pszBuf = (LPSTR)LocalAlloc(LPTR, CbFromCchA(cch));
+ if (pszBuf)
+ {
+ bRet = TRUE;
+ }
+
+ *ppszBuf = pszBuf;
+ }
+
+ if (bRet)
+ {
+ ASSERT(pszBuf);
+
+ lstrcpyA(pszBuf, psz);
+
+ if (bMultiString)
+ {
+ pszBuf[lstrlenA(psz) + 1] = 0; // Add second null terminator
+ }
+ }
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Concatenates psz onto *ppszBuf. Will alloc or
+ realloc *ppszBuf accordingly.
+
+ To free, call CatString(ppszBuf, NULL).
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CatStringA(
+ IN OUT LPSTR FAR * ppszBuf,
+ IN LPCSTR psz) OPTIONAL
+ {
+ return MyCatStringA(ppszBuf, psz, FALSE);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Concatenates psz onto *ppszBuf. Will alloc or
+ realloc *ppszBuf accordingly.
+
+ psz will be appended with a null terminator separating
+ the existing string and new string. A double-null
+ terminator will be tacked on the end, too.
+
+ To free, call CatMultiString(ppszBuf, NULL).
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CatMultiStringA(
+ IN OUT LPSTR FAR * ppszBuf,
+ IN LPCSTR psz)
+ {
+ return MyCatStringA(ppszBuf, psz, TRUE);
+ }
+
+
+
+//////////////////////////////////////////////////////////////////
+
+
+#ifndef WIN32
+//
+// Subsegment Allocation for 16-bit
+//
+
+#define MAX_WORD 0xffff
+
+DECLARE_HANDLE(HHEAP);
+
+typedef struct
+ { // maps to the bottom of a 16bit DS
+ WORD reserved[8];
+ WORD cAlloc;
+ WORD cbAllocFailed;
+ HHEAP hhpFirst;
+ HHEAP hhpNext;
+ } HEAP;
+
+#define PHEAP(hhp) ((HEAP FAR*)MAKELP(hhp, 0))
+#define MAKEHP(sel, off) ((void _huge*)MAKELP((sel), (off)))
+
+#define CBSUBALLOCMAX 0x0000f000L
+
+HHEAP g_hhpFirst = NULL;
+
+BOOL NEAR DestroyHeap(HHEAP hhp);
+
+void Mem_Terminate()
+{
+ while (g_hhpFirst)
+ DestroyHeap(g_hhpFirst);
+}
+
+BOOL NEAR CreateHeap(WORD cbInitial)
+{
+ HHEAP hhp;
+
+ if (cbInitial < 1024)
+ cbInitial = 1024;
+
+ hhp = (HHEAP)GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT | GMEM_SHARE, cbInitial);
+
+ if (!hhp)
+ return FALSE;
+
+ if (!LocalInit((WORD)hhp, sizeof(HEAP), cbInitial - 1))
+ {
+ GlobalFree(hhp);
+ return FALSE;
+ }
+
+ PHEAP(hhp)->cAlloc = 0;
+ PHEAP(hhp)->cbAllocFailed = MAX_WORD;
+ PHEAP(hhp)->hhpNext = g_hhpFirst;
+ g_hhpFirst = hhp;
+
+ TRACE_MSG(TF_GENERAL, "CreateHeap: added new local heap %x", hhp);
+
+ return TRUE;
+}
+
+#pragma optimize("o", off) // linked list removals don't optimize correctly
+BOOL NEAR DestroyHeap(HHEAP hhp)
+{
+ ASSERT(hhp);
+ ASSERT(g_hhpFirst);
+
+ if (g_hhpFirst == hhp)
+ {
+ g_hhpFirst = PHEAP(hhp)->hhpNext;
+ }
+ else
+ {
+ HHEAP hhpT = g_hhpFirst;
+
+ while (PHEAP(hhpT)->hhpNext != hhp)
+ {
+ hhpT = PHEAP(hhpT)->hhpNext;
+ if (!hhpT)
+ return FALSE;
+ }
+
+ PHEAP(hhpT)->hhpNext = PHEAP(hhp)->hhpNext;
+ }
+ if (GlobalFree((HGLOBAL)hhp) != NULL)
+ return FALSE;
+
+ return TRUE;
+}
+#pragma optimize("", on) // back to default optimizations
+
+#pragma optimize("lge", off) // Suppress warnings associated with use of _asm...
+void NEAR* NEAR HeapAlloc(HHEAP hhp, WORD cb)
+{
+ void NEAR* pb;
+
+ _asm {
+ push ds
+ mov ds,hhp
+ }
+
+ pb = (void NEAR*)LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, cb);
+
+ if (pb)
+ ((HEAP NEAR*)0)->cAlloc++;
+
+ _asm {
+ pop ds
+ }
+
+ return pb;
+}
+#pragma optimize("", on) // back to default optimizations
+
+#ifndef NOSHAREDHEAP
+
+#pragma optimize("o", off) // linked list removals don't optimize correctly
+
+
+void _huge* WINAPI SharedAlloc(long cb)
+{
+ void NEAR* pb;
+ HHEAP hhp;
+ HHEAP hhpPrev;
+
+ // If this is a big allocation, just do a global alloc.
+ //
+ if (cb > CBSUBALLOCMAX)
+ {
+ void FAR* lpb = MAKEHP(GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT | GMEM_SHARE, cb), 0);
+ if (!lpb)
+ DebugMsg(DM_ERROR, "Alloc: out of memory");
+ return lpb;
+ }
+
+ hhp = g_hhpFirst;
+
+ while (TRUE)
+ {
+ if (hhp == NULL)
+ {
+ if (!CreateHeap(0))
+ {
+ DebugMsg(DM_ERROR, "Alloc: out of memory");
+ return NULL;
+ }
+
+ hhp = g_hhpFirst;
+ }
+
+ pb = HeapAlloc(hhp, (WORD)cb);
+ if (pb)
+ return MAKEHP(hhp, pb);
+
+ // Record the size of the allocation that failed.
+ // Later attempts to allocate more than this amount
+ // will not succeed. This gets reset anytime anything
+ // is freed in the heap.
+ //
+ PHEAP(hhp)->cbAllocFailed = (WORD)cb;
+
+ // First heap is full... see if there's room in any other heap...
+ //
+ for (hhpPrev = hhp; hhp = PHEAP(hhp)->hhpNext; hhpPrev = hhp)
+ {
+ // If the last allocation to fail in this heap
+ // is not larger than cb, don't even try an allocation.
+ //
+ if ((WORD)cb >= PHEAP(hhp)->cbAllocFailed)
+ continue;
+
+ pb = HeapAlloc(hhp, (WORD)cb);
+ if (pb)
+ {
+ // This heap had room: move it to the front...
+ //
+ PHEAP(hhpPrev)->hhpNext = PHEAP(hhp)->hhpNext;
+ PHEAP(hhp)->hhpNext = g_hhpFirst;
+ g_hhpFirst = hhp;
+
+ return MAKEHP(hhp, pb);
+ }
+ else
+ {
+ // The alloc failed. Set cbAllocFailed...
+ //
+ PHEAP(hhp)->cbAllocFailed = (WORD)cb;
+ }
+ }
+ }
+}
+#pragma optimize("", on) // back to default optimizations
+
+#pragma optimize("lge", off) // Suppress warnings associated with use of _asm...
+
+void _huge* WINAPI SharedReAlloc(void _huge* pb, long cb)
+{
+ void NEAR* pbNew;
+ void _huge* lpbNew;
+ UINT cbOld;
+
+ // BUGBUG, does not work with cb > 64k
+ if (!pb)
+ return SharedAlloc(cb);
+
+ if (OFFSETOF(pb) == 0)
+ return MAKEHP(GlobalReAlloc((HGLOBAL)SELECTOROF(pb), cb, GMEM_MOVEABLE | GMEM_ZEROINIT), 0);
+
+ _asm {
+ push ds
+ mov ds,word ptr [pb+2]
+ }
+
+ pbNew = (void NEAR*)LocalReAlloc(LOCALOF(pb), (int)cb, LMEM_MOVEABLE | LMEM_ZEROINIT);
+ if (!pbNew)
+ cbOld = LocalSize(LOCALOF(pb));
+
+ _asm {
+ pop ds
+ }
+
+ if (pbNew)
+ return MAKEHP(SELECTOROF(pb), pbNew);
+
+ lpbNew = SharedAlloc(cb);
+ if (lpbNew)
+ {
+ hmemcpy((void FAR*)lpbNew, (void FAR*)pb, cbOld);
+ Free(pb);
+ }
+ else
+ {
+ DebugMsg(DM_ERROR, "ReAlloc: out of memory");
+ }
+ return lpbNew;
+}
+
+BOOL WINAPI SharedFree(void _huge* FAR * ppb)
+{
+ BOOL fSuccess;
+ UINT cAlloc;
+ void _huge * pb = *ppb;
+
+ if (!pb)
+ return FALSE;
+
+ *ppb = 0;
+
+ if (OFFSETOF(pb) == 0)
+ return (GlobalFree((HGLOBAL)SELECTOROF(pb)) == NULL);
+
+ _asm {
+ push ds
+ mov ds,word ptr [pb+2]
+ }
+
+ fSuccess = (LocalFree(LOCALOF(pb)) ? FALSE : TRUE);
+
+ cAlloc = 1;
+ if (fSuccess)
+ {
+ cAlloc = --((HEAP NEAR*)0)->cAlloc;
+ ((HEAP NEAR*)0)->cbAllocFailed = MAX_WORD;
+ }
+
+ _asm {
+ pop ds
+ }
+
+ if (cAlloc == 0)
+ DestroyHeap((HHEAP)SELECTOROF(pb));
+
+ return fSuccess;
+}
+
+
+DWORD WINAPI SharedGetSize(void _huge* pb)
+{
+ WORD wSize;
+
+ if (OFFSETOF(pb) == 0)
+ return GlobalSize((HGLOBAL)SELECTOROF(pb));
+
+ _asm {
+ push ds
+ mov ds,word ptr [pb+2]
+ }
+
+ wSize = LocalSize(LOCALOF(pb));
+
+ _asm {
+ pop ds
+ }
+
+ return (DWORD)wSize;
+}
+
+#pragma optimize("", on)
+
+#endif // NOSHAREDHEAP
+
+//////////////////////////////////////////////////////////////////
+
+#else // WIN32
+//
+// Win32 memory management wrappers
+//
+
+//
+// Shared heap memory management
+//
+#if !defined(NOSHAREDHEAP) && defined(WIN95)
+
+// Define a Global Shared Heap that we use to allocate memory
+// out of that we need to share between multiple instances.
+//
+static HANDLE g_hSharedHeap = NULL;
+
+#define MAXHEAPSIZE 2097152
+#define HEAP_SHARED 0x04000000 /* put heap in shared memory */
+
+
+/*----------------------------------------------------------
+Purpose: Clean up heap. This function should be called at
+ the program's termination.
+
+Returns: --
+Cond: --
+*/
+void PUBLIC SharedTerminate()
+ {
+ // Assuming that everything else has exited
+ //
+ if (g_hSharedHeap != NULL)
+ HeapDestroy(g_hSharedHeap);
+ g_hSharedHeap = NULL;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Allocate out of shared heap
+
+Returns: Pointer to allocate memory
+Cond: --
+*/
+void FAR * PUBLIC SharedAlloc(
+ DWORD cb)
+ {
+ // I will assume that this is the only one that needs the checks to
+ // see if the heap has been previously created or not
+
+ if (g_hSharedHeap == NULL)
+ {
+ ENTER_EXCLUSIVE()
+ {
+ if (g_hSharedHeap == NULL)
+ {
+ g_hSharedHeap = HeapCreate(HEAP_SHARED, 1, MAXHEAPSIZE);
+ }
+ }
+ LEAVE_EXCLUSIVE()
+
+ // If still NULL we have problems!
+ if (g_hSharedHeap == NULL)
+ return(NULL);
+ }
+
+ return HeapAlloc(g_hSharedHeap, HEAP_ZERO_MEMORY, cb);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Realloc out of shared heap.
+
+Returns: Possibly new pointer to resized block
+Cond: --
+*/
+void FAR * PUBLIC SharedReAlloc(
+ LPVOID pv,
+ DWORD cb)
+ {
+ if (NULL == pv)
+ {
+ return SharedAlloc(cb);
+ }
+ return HeapReAlloc(g_hSharedHeap, HEAP_ZERO_MEMORY, pv, cb);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Free shared memory
+
+Returns: --
+Cond: --
+*/
+void PUBLIC _SharedFree(
+ LPVOID pv)
+ {
+ ASSERT(pv);
+
+ if (pv)
+ {
+ HeapFree(g_hSharedHeap, 0, pv);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns the allocated size of a block
+
+Returns: see above
+Cond: --
+*/
+DWORD PUBLIC SharedGetSize(
+ LPVOID pv)
+ {
+ return HeapSize(g_hSharedHeap, 0, pv);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Copies psz into *ppszBuf. Will alloc or realloc *ppszBuf
+ accordingly.
+
+ If psz is NULL, this function frees *ppszBuf. This is
+ the preferred method of freeing the allocated buffer.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL PUBLIC SharedSetString(
+ LPTSTR FAR * ppszBuf,
+ LPCTSTR psz) // NULL to free *ppszBuf
+ {
+ BOOL bRet;
+
+ ASSERT(ppszBuf);
+
+ // Free the buffer?
+ if (!psz)
+ {
+ // Yes
+ if (ppszBuf)
+ SharedFree(*ppszBuf);
+ bRet = TRUE;
+ }
+ else
+ {
+ // No; (re)allocate and set buffer
+ DWORD cb = CbFromCch(lstrlen(psz)+1);
+
+ LPTSTR pszT = SharedReAlloc(*ppszBuf, cb);
+ if (pszT)
+ {
+ *ppszBuf = pszT;
+ lstrcpy(*ppszBuf, psz);
+ bRet = TRUE;
+ }
+ else
+ bRet = FALSE;
+ }
+ return bRet;
+ }
+#endif // NOSHAREDHEAP
+
+#endif // WIN32
+
+//////////////////////////////////////////////////////////////////
+
+
+#ifndef NODA
+
+#ifdef WIN32
+
+//
+// Memory tracking functions
+//
+
+#ifdef DEBUG
+
+typedef struct _HEAPTRACE
+{
+ DWORD cAlloc;
+ DWORD cFailure;
+ DWORD cReAlloc;
+ DWORD cbMaxTotal;
+ DWORD cCurAlloc;
+ DWORD cbCurTotal;
+} HEAPTRACE;
+
+HEAPTRACE g_htSync = {0}; // Start of zero...
+
+#endif // DEBUG
+
+
+/*----------------------------------------------------------
+Purpose: Allocate from a heap.
+
+Returns: pointer to block of memory
+ NULL (if out of memory)
+
+Cond: --
+*/
+LPVOID PUBLIC MemAlloc(
+ HANDLE hheap,
+ DWORD cb)
+ {
+ LPVOID lp;
+
+ if (hheap)
+ {
+ lp = HeapAlloc(hheap, HEAP_ZERO_MEMORY, cb);
+ }
+ else
+ {
+ lp = GAlloc(cb);
+ }
+
+ if (lp == NULL)
+ {
+ DEBUG_CODE( g_htSync.cFailure++; )
+ return NULL;
+ }
+
+#ifdef DEBUG
+
+ // Update counts.
+ g_htSync.cAlloc++;
+ g_htSync.cCurAlloc++;
+ g_htSync.cbCurTotal += cb;
+ if (g_htSync.cbCurTotal > g_htSync.cbMaxTotal)
+ g_htSync.cbMaxTotal = g_htSync.cbCurTotal;
+
+#endif
+
+ return lp;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Reallocate a block of memory in a given heap.
+
+Returns: Pointer to reallocated block
+ NULL (if out of memory)
+
+Cond: --
+*/
+LPVOID PUBLIC MemReAlloc(
+ HANDLE hheap,
+ LPVOID pb,
+ DWORD cb)
+ {
+ LPVOID lp;
+ DEBUG_CODE( DWORD cbOld; )
+
+ if (hheap)
+ {
+ DEBUG_CODE( cbOld = HeapSize(hheap, 0, pb); )
+
+ lp = HeapReAlloc(hheap, HEAP_ZERO_MEMORY, pb, cb);
+ }
+ else
+ {
+ if (pb)
+ {
+ DEBUG_CODE( cbOld = GGetSize(pb); )
+
+ lp = GReAlloc(pb, cb);
+ }
+ else
+ {
+ DEBUG_CODE( cbOld = 0; )
+
+ lp = GAlloc(cb);
+ }
+ }
+
+ if (lp == NULL)
+ {
+ DEBUG_CODE( g_htSync.cFailure++; )
+ return NULL;
+ }
+
+#ifdef DEBUG
+
+ // Update counts.
+ g_htSync.cReAlloc++;
+ g_htSync.cbCurTotal += cb - cbOld;
+ if (g_htSync.cbCurTotal > g_htSync.cbMaxTotal)
+ g_htSync.cbMaxTotal = g_htSync.cbCurTotal;
+
+#endif
+
+ return lp;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Free block of memory in heap.
+
+Returns: TRUE
+ FALSE (if failure)
+
+Cond: --
+*/
+BOOL PUBLIC MemFree(
+ HANDLE hheap,
+ LPVOID pb)
+ {
+ BOOL fRet;
+ DEBUG_CODE( DWORD cbOld; )
+
+ if (hheap)
+ {
+ DEBUG_CODE( cbOld = HeapSize(hheap, 0, pb); )
+
+ fRet = HeapFree(hheap, 0, pb);
+ }
+ else
+ {
+ DEBUG_CODE( cbOld = GGetSize(pb); )
+
+ GFree(pb);
+ fRet = TRUE;
+ }
+
+#ifdef DEBUG
+
+ if (fRet)
+ {
+ // Update counts.
+ g_htSync.cCurAlloc--;
+ g_htSync.cbCurTotal -= cbOld;
+ }
+
+#endif
+
+ return fRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns the size of the given block.
+
+Returns: size in bytes
+Cond: --
+*/
+DWORD PUBLIC MemSize(
+ HANDLE hheap,
+ LPVOID pb)
+ {
+ if (hheap)
+ return HeapSize(hheap, 0, pb);
+ else
+ return GGetSize(pb);
+ }
+
+#endif // WIN32
+
+
+/*----------------------------------------------------------
+Purpose: Private alloc for pointer array functions.
+
+Returns: pointer to block of memory
+ NULL (if out of memory)
+
+Cond: --
+*/
+LPVOID PRIVATE PrvAlloc(
+ DWORD dwFlags, // PAF_* flags
+ HANDLE hheap,
+ DWORD cb)
+ {
+ LPVOID lp;
+
+ ASSERT(PAF_SHARED == SAF_SHARED);
+
+ if (IsFlagSet(dwFlags, PAF_SHARED))
+ {
+ lp = SharedAlloc(cb);
+ }
+ else
+ {
+ lp = MemAlloc(hheap, cb);
+ }
+
+ return lp;
+ }
+
+
+// Heapsort is a bit slower, but it doesn't use any stack or memory...
+// Mergesort takes a bit of memory (O(n)) and stack (O(log(n)), but very fast...
+//
+#ifdef WIN32
+#define MERGESORT
+#else
+#define USEHEAPSORT
+#endif
+
+#ifdef DEBUG
+#define SA_MAGIC ('S' | ('A' << 256))
+#define IsSA(psa) ((psa) && (psa)->magic == SA_MAGIC)
+#define PA_MAGIC ('P' | ('A' << 256))
+#define IsPA(ppa) ((ppa) && (ppa)->magic == PA_MAGIC)
+#else
+#define IsSA(psa)
+#define IsPA(ppa)
+#endif
+
+
+typedef struct
+ {
+ LPVOID FAR * pp;
+ PFNPACOMPARE pfnCmp;
+ LPARAM lParam;
+ int cp;
+#ifdef MERGESORT
+ LPVOID FAR * ppT;
+#endif
+ } SORTPARAMS;
+
+BOOL NEAR PAQuickSort(SORTPARAMS FAR* psp);
+BOOL NEAR PAQuickSort2(int i, int j, SORTPARAMS FAR* psp);
+BOOL NEAR PAHeapSort(SORTPARAMS FAR* psp);
+void NEAR PAHeapSortPushDown(int first, int last, SORTPARAMS FAR* psp);
+BOOL NEAR PAMergeSort(SORTPARAMS FAR* psp);
+void NEAR PAMergeSort2(SORTPARAMS FAR* psp, int iFirst, int cItems);
+
+
+//
+// Structure Array
+//
+
+typedef struct _SA
+ {
+ // NOTE: The following field MUST be defined at the beginning of the
+ // structure in order for SAGetCount() to work.
+ int cItem; // number of elements in sa
+
+ LPVOID aItem; // memory for elements
+ int cItemAlloc; // number items which fit in aItem
+ int cbItem; // size of each item
+ int cItemGrow; // number items to grow cItemAlloc by
+ DWORD dwFlags;
+ HANDLE hheap;
+
+#ifdef DEBUG
+ UINT magic;
+#endif
+ } SA;
+
+#define SA_PITEM(psa, index) ((LPVOID)(((BYTE FAR*)(psa)->aItem) + ((index) * (psa)->cbItem)))
+
+
+/*----------------------------------------------------------
+Purpose: Create a structure array.
+
+Returns: handle to structure array
+Cond: --
+*/
+HSA PUBLIC SACreate(
+ int cbItem,
+ int cItemGrow,
+ HANDLE hheap, // Must be non-NULL if SAF_HEAP set
+ DWORD dwFlags)
+ {
+ HSA psa;
+
+ ASSERT(cbItem);
+ ASSERT(hheap && IsFlagSet(dwFlags, SAF_HEAP) ||
+ IsFlagClear(dwFlags, SAF_HEAP));
+
+ psa = PrvAlloc(dwFlags, hheap, sizeof(SA));
+
+#if !defined(NOSHAREDHEAP) && defined(WIN95)
+ if (IsFlagSet(dwFlags, PAF_SHARED))
+ hheap = g_hSharedHeap;
+#endif
+
+ if (psa)
+ {
+ psa->cItem = 0;
+ psa->cItemAlloc = 0;
+ psa->cbItem = cbItem;
+ psa->cItemGrow = (cItemGrow == 0 ? 1 : cItemGrow);
+ psa->aItem = NULL;
+ psa->dwFlags = dwFlags;
+ psa->hheap = hheap;
+
+#ifdef DEBUG
+ psa->magic = SA_MAGIC;
+#endif
+ }
+ return psa;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Destroys a structure array.
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC SADestroy(
+ HSA psa)
+ {
+ ASSERT(IsSA(psa));
+
+ if (psa == NULL) // allow NULL for low memory cases, still assert
+ return TRUE;
+
+#ifdef DEBUG
+ psa->cItem = 0;
+ psa->cItemAlloc = 0;
+ psa->cbItem = 0;
+ psa->magic = 0;
+#endif
+ if (psa->aItem && !MemFree(psa->hheap, psa->aItem))
+ return FALSE;
+
+ MemFree(psa->hheap, psa);
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Copy structure at index into buffer.
+
+Returns: TRUE
+ FALSE
+Cond: --
+*/
+BOOL PUBLIC SAGetItem(
+ HSA psa,
+ int index,
+ LPVOID pitem)
+ {
+ ASSERT(IsSA(psa));
+ ASSERT(pitem);
+
+ if (index < 0 || index >= psa->cItem)
+ {
+ TRACE_MSG(TF_ERROR, "SA: Invalid index: %d", index);
+ return FALSE;
+ }
+
+ hmemcpy(pitem, SA_PITEM(psa, index), psa->cbItem);
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Get pointer to structure in array
+
+Returns:
+Cond: --
+*/
+LPVOID PUBLIC SAGetItemPtr(
+ HSA psa,
+ int index)
+ {
+ ASSERT(IsSA(psa));
+
+ if (index < 0 || index >= psa->cItem)
+ {
+ TRACE_MSG(TF_ERROR, "SA: Invalid index: %d", index);
+ return NULL;
+ }
+ return SA_PITEM(psa, index);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set item
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC SASetItem(
+ HSA psa,
+ int index,
+ LPVOID pitem)
+ {
+ ASSERT(pitem);
+ ASSERT(IsSA(psa));
+
+ if (index < 0)
+ {
+ TRACE_MSG(TF_ERROR, "SA: Invalid index: %d", index);
+ return FALSE;
+ }
+
+ if (index >= psa->cItem)
+ {
+ if (index + 1 > psa->cItemAlloc)
+ {
+ int cItemAlloc = (((index + 1) + psa->cItemGrow - 1) / psa->cItemGrow) * psa->cItemGrow;
+
+ LPVOID aItemNew = MemReAlloc(psa->hheap, psa->aItem, cItemAlloc * psa->cbItem);
+ if (!aItemNew)
+ return FALSE;
+
+ psa->aItem = aItemNew;
+ psa->cItemAlloc = cItemAlloc;
+ }
+ psa->cItem = index + 1;
+ }
+
+ hmemcpy(SA_PITEM(psa, index), pitem, psa->cbItem);
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+int PUBLIC SAInsertItem(
+ HSA psa,
+ int index,
+ LPVOID pitem)
+ {
+ ASSERT(pitem);
+ ASSERT(IsSA(psa));
+
+ if (index < 0)
+ {
+ TRACE_MSG(TF_ERROR, "SA: Invalid index: %d", index);
+ return -1;
+ }
+
+ if (index > psa->cItem)
+ index = psa->cItem;
+
+ if (psa->cItem + 1 > psa->cItemAlloc)
+ {
+ LPVOID aItemNew = MemReAlloc(psa->hheap, psa->aItem,
+ (psa->cItemAlloc + psa->cItemGrow) * psa->cbItem);
+ if (!aItemNew)
+ return -1;
+
+ psa->aItem = aItemNew;
+ psa->cItemAlloc += psa->cItemGrow;
+ }
+
+ if (index < psa->cItem)
+ {
+ hmemcpy(SA_PITEM(psa, index + 1), SA_PITEM(psa, index),
+ (psa->cItem - index) * psa->cbItem);
+ }
+ psa->cItem++;
+ hmemcpy(SA_PITEM(psa, index), pitem, psa->cbItem);
+
+ return index;
+ }
+
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+BOOL PUBLIC SADeleteItem(
+ HSA psa,
+ int index)
+ {
+ ASSERT(IsSA(psa));
+
+ if (index < 0 || index >= psa->cItem)
+ {
+ TRACE_MSG(TF_ERROR, "SA: Invalid index: %d", index);
+ return FALSE;
+ }
+
+ if (index < psa->cItem - 1)
+ {
+ hmemcpy(SA_PITEM(psa, index), SA_PITEM(psa, index + 1),
+ (psa->cItem - (index + 1)) * psa->cbItem);
+ }
+ psa->cItem--;
+
+ if (psa->cItemAlloc - psa->cItem > psa->cItemGrow)
+ {
+ LPVOID aItemNew = MemReAlloc(psa->hheap, psa->aItem,
+ (psa->cItemAlloc - psa->cItemGrow) * psa->cbItem);
+
+ ASSERT(aItemNew);
+ psa->aItem = aItemNew;
+ psa->cItemAlloc -= psa->cItemGrow;
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+BOOL PUBLIC SADeleteAllItems(
+ HSA psa)
+ {
+ ASSERT(IsSA(psa));
+
+ if (psa->aItem)
+ {
+ MemFree(psa->hheap, psa->aItem);
+ }
+
+ psa->aItem = NULL;
+ psa->cItem = psa->cItemAlloc = 0;
+ return TRUE;
+ }
+
+
+//================== Dynamic pointer array implementation ===========
+
+typedef struct _PA {
+// NOTE: The following two fields MUST be defined in this order, at
+// the beginning of the structure in order for the macro APIs to work.
+//
+ int cp;
+ LPVOID FAR * pp;
+
+ HANDLE hheap; // Heap to allocate from if NULL use shared
+
+ int cpAlloc;
+ int cpGrow;
+ DWORD dwFlags;
+
+#ifdef DEBUG
+ UINT magic;
+#endif
+} PA;
+
+
+
+/*----------------------------------------------------------
+Purpose: Creates a pointer array.
+
+Returns: handle to pointer array
+ NULL (if out of memory)
+
+Cond: --
+*/
+HPA PUBLIC PACreate(
+ int cpGrow,
+ HANDLE hheap, // Must be non-null if PAF_HEAP set
+ DWORD dwFlags) // PAF_*
+ {
+ HPA ppa;
+
+ ASSERT(hheap && IsFlagSet(dwFlags, SAF_HEAP) ||
+ IsFlagClear(dwFlags, SAF_HEAP));
+
+ ppa = PrvAlloc(dwFlags, hheap, sizeof(PA));
+
+#if !defined(NOSHAREDHEAP) && defined(WIN95)
+ if (IsFlagSet(dwFlags, PAF_SHARED))
+ hheap = g_hSharedHeap;
+#endif
+
+ if (ppa)
+ {
+ ppa->dwFlags = dwFlags;
+ ppa->cp = 0;
+ ppa->cpAlloc = 0;
+ ppa->cpGrow = (cpGrow < 8 ? 8 : cpGrow);
+ ppa->pp = NULL;
+
+#ifdef WIN32
+ ppa->hheap = hheap;
+#else
+ ppa->hheap = NULL;
+#endif
+
+#ifdef DEBUG
+ ppa->magic = PA_MAGIC;
+#endif
+ }
+ return ppa;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Destroy a pointer array, and call the given pfnFree
+ function for each element in the array.
+
+Returns: TRUE
+ FALSE (on failure)
+
+Cond: --
+*/
+BOOL PUBLIC PADestroyEx(
+ HPA ppa,
+ PFNPAFREE pfnFree,
+ LPARAM lParam)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (ppa == NULL) // allow NULL for low memory cases, still assert
+ return TRUE;
+
+ if (ppa->pp)
+ {
+ if (pfnFree)
+ {
+ int i = PAGetCount(ppa) - 1;
+
+ for (; 0 <= i; i--)
+ {
+ pfnFree(PAFastGetPtr(ppa, i), lParam);
+ }
+ }
+
+ if (!MemFree(ppa->hheap, ppa->pp))
+ return FALSE;
+ }
+
+#ifdef DEBUG
+ ppa->cp = 0;
+ ppa->cpAlloc = 0;
+ ppa->magic = 0;
+#endif
+
+ return MemFree(ppa->hheap, ppa);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Clone a pointer array
+
+Returns: pointer to new array
+ NULL (if out of memory)
+
+Cond: --
+*/
+HPA PUBLIC PAClone(
+ HPA ppa,
+ HPA ppaNew)
+ {
+ BOOL fAlloc = FALSE;
+
+ if (!ppaNew)
+ {
+ ppaNew = PACreate(ppa->cpGrow, ppa->hheap, ppa->dwFlags);
+ if (!ppaNew)
+ return NULL;
+
+ fAlloc = TRUE;
+ }
+
+ if (!PAGrow(ppaNew, ppa->cpAlloc))
+ {
+ if (fAlloc)
+ PADestroy(ppaNew);
+ return NULL;
+ }
+
+ ppaNew->cp = ppa->cp;
+ hmemcpy(ppaNew->pp, ppa->pp, ppa->cp * sizeof(LPVOID));
+
+ return ppaNew;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Get a pointer stored in index
+
+Returns: stored pointer
+Cond: --
+*/
+LPVOID PUBLIC PAGetPtr(
+ HPA ppa,
+ int index)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (index < 0 || index >= ppa->cp)
+ return NULL;
+
+ return ppa->pp[index];
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the index that pointer p is stored at
+
+Returns: index
+Cond: --
+*/
+int PUBLIC PAGetPtrIndex(
+ HPA ppa,
+ LPVOID p)
+ {
+ LPVOID FAR * pp;
+ LPVOID FAR * ppMax;
+
+ ASSERT(IsPA(ppa));
+ if (ppa->pp)
+ {
+ pp = ppa->pp;
+ ppMax = pp + ppa->cp;
+ for ( ; pp < ppMax; pp++)
+ {
+ if (*pp == p)
+ return (pp - ppa->pp);
+ }
+ }
+ return -1;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Grow the pointer array
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC PAGrow(
+ HPA ppa,
+ int cpAlloc)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (cpAlloc > ppa->cpAlloc)
+ {
+ LPVOID FAR * ppNew;
+
+ cpAlloc = ((cpAlloc + ppa->cpGrow - 1) / ppa->cpGrow) * ppa->cpGrow;
+
+ if (ppa->pp)
+ ppNew = (LPVOID FAR *)MemReAlloc(ppa->hheap, ppa->pp, cpAlloc * sizeof(LPVOID));
+ else
+ ppNew = (LPVOID FAR *)PrvAlloc(ppa->dwFlags, ppa->hheap, cpAlloc * sizeof(LPVOID));
+ if (!ppNew)
+ return FALSE;
+
+ ppa->pp = ppNew;
+ ppa->cpAlloc = cpAlloc;
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Store a pointer at index. Grows the array accordingly.
+
+Returns: TRUE
+ FALSE (if out of memory)
+Cond: --
+*/
+BOOL PUBLIC PASetPtr(
+ HPA ppa,
+ int index,
+ LPVOID p)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (index < 0)
+ {
+ TRACE_MSG(TF_ERROR, "PA: Invalid index: %d", index);
+ return FALSE;
+ }
+
+ if (index >= ppa->cp)
+ {
+ if (!PAGrow(ppa, index + 1))
+ return FALSE;
+ ppa->cp = index + 1;
+ }
+
+ ppa->pp[index] = p;
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Inserts a pointer at index. If index is beyond the
+ current size of array, this function appends the
+ pointer to the end of the array.
+
+Returns: index pointer is stored in
+ PA_ERR
+
+Cond: --
+*/
+int PUBLIC PAInsertPtr(
+ HPA ppa,
+ int index,
+ LPVOID p)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (index < 0)
+ {
+ TRACE_MSG(TF_ERROR, "PA: Invalid index: %d", index);
+ return -1;
+ }
+ if (index > ppa->cp)
+ index = ppa->cp;
+
+ // Make sure we have room for one more item
+ //
+ if (ppa->cp + 1 > ppa->cpAlloc)
+ {
+ if (!PAGrow(ppa, ppa->cp + 1))
+ return -1;
+ }
+
+ // If we are inserting, we need to slide everybody up
+ //
+ if (index < ppa->cp)
+ {
+ hmemcpy(&ppa->pp[index + 1], &ppa->pp[index],
+ (ppa->cp - index) * sizeof(LPVOID));
+ }
+
+ ppa->pp[index] = p;
+ ppa->cp++;
+
+ return index;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Delete a pointer from index.
+
+Returns: the deleted pointer
+ NULL (if index is out of range)
+
+Cond: --
+*/
+LPVOID PUBLIC PADeletePtr(
+ HPA ppa,
+ int index)
+ {
+ LPVOID p;
+
+ ASSERT(IsPA(ppa));
+
+ if (index < 0 || index >= ppa->cp)
+ {
+ TRACE_MSG(TF_ERROR, "PA: Invalid index: %d", index);
+ return NULL;
+ }
+
+ p = ppa->pp[index];
+
+ if (index < ppa->cp - 1)
+ {
+ hmemcpy(&ppa->pp[index], &ppa->pp[index + 1],
+ (ppa->cp - (index + 1)) * sizeof(LPVOID));
+ }
+ ppa->cp--;
+
+ if (ppa->cpAlloc - ppa->cp > ppa->cpGrow)
+ {
+ LPVOID FAR * ppNew;
+ ppNew = MemReAlloc(ppa->hheap, ppa->pp, (ppa->cpAlloc - ppa->cpGrow) * sizeof(LPVOID));
+
+ ASSERT(ppNew);
+ ppa->pp = ppNew;
+ ppa->cpAlloc -= ppa->cpGrow;
+ }
+ return p;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Delete all the pointers in the array. If pfnFree
+ is non-NULL, this function will free each of the
+ pointer elements in this array using pfnFree.
+
+Returns: TRUE
+ FALSE
+
+Cond: --
+*/
+BOOL PUBLIC PADeleteAllPtrsEx(
+ HPA ppa,
+ PFNPAFREE pfnFree,
+ LPARAM lParam)
+ {
+ ASSERT(IsPA(ppa));
+
+ if (ppa->pp)
+ {
+ if (pfnFree)
+ {
+ int i = PAGetCount(ppa) - 1;
+
+ for (; 0 <= i; i--)
+ {
+ pfnFree(PAFastGetPtr(ppa, i), lParam);
+ }
+ }
+
+ if (!MemFree(ppa->hheap, ppa->pp))
+ return FALSE;
+ }
+
+ ppa->pp = NULL;
+ ppa->cp = ppa->cpAlloc = 0;
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sort the array.
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC PASort(
+ HPA ppa,
+ PFNPACOMPARE pfnCmp,
+ LPARAM lParam)
+ {
+ SORTPARAMS sp;
+
+ sp.cp = ppa->cp;
+ sp.pp = ppa->pp;
+ sp.pfnCmp = pfnCmp;
+ sp.lParam = lParam;
+
+#ifdef USEQUICKSORT
+ return PAQuickSort(&sp);
+#endif
+#ifdef USEHEAPSORT
+ return PAHeapSort(&sp);
+#endif
+#ifdef MERGESORT
+ return PAMergeSort(&sp);
+#endif
+ }
+
+#ifdef USEQUICKSORT
+
+BOOL NEAR PAQuickSort(SORTPARAMS FAR* psp)
+{
+ return PAQuickSort2(0, psp->cp - 1, psp);
+}
+
+BOOL NEAR PAQuickSort2(int i, int j, SORTPARAMS FAR* psp)
+{
+ LPVOID FAR * pp = psp->pp;
+ LPARAM lParam = psp->lParam;
+ PFNPACOMPARE pfnCmp = psp->pfnCmp;
+
+ int iPivot;
+ LPVOID pFirst;
+ int k;
+ int result;
+
+ iPivot = -1;
+ pFirst = pp[i];
+ for (k = i + 1; k <= j; k++)
+ {
+ result = (*pfnCmp)(pp[k], pFirst, lParam);
+
+ if (result > 0)
+ {
+ iPivot = k;
+ break;
+ }
+ else if (result < 0)
+ {
+ iPivot = i;
+ break;
+ }
+ }
+
+ if (iPivot != -1)
+ {
+ int l = i;
+ int r = j;
+ LPVOID pivot = pp[iPivot];
+
+ do
+ {
+ LPVOID p;
+
+ p = pp[l];
+ pp[l] = pp[r];
+ pp[r] = p;
+
+ while ((*pfnCmp)(pp[l], pivot, lParam) < 0)
+ l++;
+ while ((*pfnCmp)(pp[r], pivot, lParam) >= 0)
+ r--;
+ } while (l <= r);
+
+ if (l - 1 > i)
+ PAQuickSort2(i, l - 1, psp);
+ if (j > l)
+ PAQuickSort2(l, j, psp);
+ }
+ return TRUE;
+}
+#endif // USEQUICKSORT
+
+#ifdef USEHEAPSORT
+
+void NEAR PAHeapSortPushDown(int first, int last, SORTPARAMS FAR* psp)
+{
+ LPVOID FAR * pp = psp->pp;
+ LPARAM lParam = psp->lParam;
+ PFNPACOMPARE pfnCmp = psp->pfnCmp;
+ int r;
+ int r2;
+ LPVOID p;
+
+ r = first;
+ while (r <= last / 2)
+ {
+ int wRTo2R;
+ r2 = r * 2;
+
+ wRTo2R = (*pfnCmp)(pp[r-1], pp[r2-1], lParam);
+
+ if (r2 == last)
+ {
+ if (wRTo2R < 0)
+ {
+ p = pp[r-1]; pp[r-1] = pp[r2-1]; pp[r2-1] = p;
+ }
+ break;
+ }
+ else
+ {
+ int wR2toR21 = (*pfnCmp)(pp[r2-1], pp[r2+1-1], lParam);
+
+ if (wRTo2R < 0 && wR2toR21 >= 0)
+ {
+ p = pp[r-1]; pp[r-1] = pp[r2-1]; pp[r2-1] = p;
+ r = r2;
+ }
+ else if ((*pfnCmp)(pp[r-1], pp[r2+1-1], lParam) < 0 && wR2toR21 < 0)
+ {
+ p = pp[r-1]; pp[r-1] = pp[r2+1-1]; pp[r2+1-1] = p;
+ r = r2 + 1;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+}
+
+BOOL NEAR PAHeapSort(SORTPARAMS FAR* psp)
+{
+ LPVOID FAR * pp = psp->pp;
+ int c = psp->cp;
+ int i;
+
+ for (i = c / 2; i >= 1; i--)
+ PAHeapSortPushDown(i, c, psp);
+
+ for (i = c; i >= 2; i--)
+ {
+ LPVOID p = pp[0]; pp[0] = pp[i-1]; pp[i-1] = p;
+
+ PAHeapSortPushDown(1, i - 1, psp);
+ }
+ return TRUE;
+}
+#endif // USEHEAPSORT
+
+#if defined(MERGESORT) && defined(WIN32)
+
+#define SortCompare(psp, pp1, i1, pp2, i2) \
+ (psp->pfnCmp(pp1[i1], pp2[i2], psp->lParam))
+
+//
+// This function merges two sorted lists and makes one sorted list.
+// psp->pp[iFirst, iFirst+cItes/2-1], psp->pp[iFirst+cItems/2, iFirst+cItems-1]
+//
+void NEAR PAMergeThem(SORTPARAMS FAR* psp, int iFirst, int cItems)
+{
+ //
+ // Notes:
+ // This function is separated from PAMergeSort2() to avoid comsuming
+ // stack variables. Never inline this.
+ //
+ int cHalf = cItems/2;
+ int iIn1, iIn2, iOut;
+ LPVOID FAR * ppvSrc = &psp->pp[iFirst];
+
+ // Copy the first part to temp storage so we can write directly into
+ // the final buffer. Note that this takes at most psp->cp/2 DWORD's
+ hmemcpy(psp->ppT, ppvSrc, cHalf*sizeof(LPVOID));
+
+ for (iIn1=0, iIn2=cHalf, iOut=0;;)
+ {
+ if (SortCompare(psp, psp->ppT, iIn1, ppvSrc, iIn2) <= 0) {
+ ppvSrc[iOut++] = psp->ppT[iIn1++];
+
+ if (iIn1==cHalf) {
+ // We used up the first half; the rest of the second half
+ // should already be in place
+ break;
+ }
+ } else {
+ ppvSrc[iOut++] = ppvSrc[iIn2++];
+ if (iIn2==cItems) {
+ // We used up the second half; copy the rest of the first half
+ // into place
+ hmemcpy(&ppvSrc[iOut], &psp->ppT[iIn1], (cItems-iOut)*sizeof(LPVOID));
+ break;
+ }
+ }
+ }
+}
+
+//
+// This function sorts a give list (psp->pp[iFirst,iFirst-cItems-1]).
+//
+void NEAR PAMergeSort2(SORTPARAMS FAR* psp, int iFirst, int cItems)
+{
+ //
+ // Notes:
+ // This function is recursively called. Therefore, we should minimize
+ // the number of local variables and parameters. At this point, we
+ // use one local variable and three parameters.
+ //
+ int cHalf;
+
+ switch(cItems)
+ {
+ case 1:
+ return;
+
+ case 2:
+ // Swap them, if they are out of order.
+ if (SortCompare(psp, psp->pp, iFirst, psp->pp, iFirst+1) > 0)
+ {
+ psp->ppT[0] = psp->pp[iFirst];
+ psp->pp[iFirst] = psp->pp[iFirst+1];
+ psp->pp[iFirst+1] = psp->ppT[0];
+ }
+ break;
+
+ default:
+ cHalf = cItems/2;
+ // Sort each half
+ PAMergeSort2(psp, iFirst, cHalf);
+ PAMergeSort2(psp, iFirst+cHalf, cItems-cHalf);
+ // Then, merge them.
+ PAMergeThem(psp, iFirst, cItems);
+ break;
+ }
+}
+
+BOOL NEAR PAMergeSort(SORTPARAMS FAR* psp)
+{
+ if (psp->cp==0)
+ return TRUE;
+
+ // Note that we divide by 2 below; we want to round down
+ psp->ppT = LocalAlloc(LPTR, psp->cp/2 * sizeof(LPVOID));
+ if (!psp->ppT)
+ return FALSE;
+
+ PAMergeSort2(psp, 0, psp->cp);
+ LocalFree(psp->ppT);
+ return TRUE;
+}
+#endif // MERGESORT
+
+// Search function
+//
+int PUBLIC PASearch(HPA ppa, LPVOID pFind, int iStart,
+ PFNPACOMPARE pfnCompare, LPARAM lParam, UINT options)
+{
+ int cp = PAGetCount(ppa);
+
+ ASSERT(pfnCompare);
+ ASSERT(0 <= iStart);
+
+ // Only allow these wierd flags if the list is sorted
+ ASSERT((options & PAS_SORTED) || !(options & (PAS_INSERTBEFORE | PAS_INSERTAFTER)));
+
+ if (!(options & PAS_SORTED))
+ {
+ // Not sorted: do linear search.
+ int i;
+
+ for (i = iStart; i < cp; i++)
+ {
+ if (0 == pfnCompare(pFind, PAFastGetPtr(ppa, i), lParam))
+ return i;
+ }
+ return -1;
+ }
+ else
+ {
+ // Search the array using binary search. If several adjacent
+ // elements match the target element, the index of the first
+ // matching element is returned.
+
+ int iRet = -1; // assume no match
+ BOOL bFound = FALSE;
+ int nCmp = 0;
+ int iLow = 0; // Don't bother using iStart for binary search
+ int iMid = 0;
+ int iHigh = cp - 1;
+
+ // (OK for cp == 0)
+ while (iLow <= iHigh)
+ {
+ iMid = (iLow + iHigh) / 2;
+
+ nCmp = pfnCompare(pFind, PAFastGetPtr(ppa, iMid), lParam);
+
+ if (0 > nCmp)
+ iHigh = iMid - 1; // First is smaller
+ else if (0 < nCmp)
+ iLow = iMid + 1; // First is larger
+ else
+ {
+ // Match; search back for first match
+ bFound = TRUE;
+ while (0 < iMid)
+ {
+ if (0 != pfnCompare(pFind, PAFastGetPtr(ppa, iMid-1), lParam))
+ break;
+ else
+ iMid--;
+ }
+ break;
+ }
+ }
+
+ if (bFound)
+ {
+ ASSERT(0 <= iMid);
+ iRet = iMid;
+ }
+
+ // Did the search fail AND
+ // is one of the strange search flags set?
+ if (!bFound && (options & (PAS_INSERTAFTER | PAS_INSERTBEFORE)))
+ {
+ // Yes; return the index where the target should be inserted
+ // if not found
+ if (0 < nCmp) // First is larger
+ iRet = iLow;
+ else
+ iRet = iMid;
+ // (We don't distinguish between the two flags anymore)
+ }
+ else if ( !(options & (PAS_INSERTAFTER | PAS_INSERTBEFORE)) )
+ {
+ // Sanity check with linear search
+ ASSERT(PASearch(ppa, pFind, iStart, pfnCompare, lParam, options & ~PAS_SORTED) == iRet);
+ }
+ return iRet;
+ }
+}
+
+#endif // NODA
+
+#endif // NOMEM
diff --git a/private/unimodem/common/rovpath.c b/private/unimodem/common/rovpath.c
new file mode 100644
index 000000000..80f6b95d8
--- /dev/null
+++ b/private/unimodem/common/rovpath.c
@@ -0,0 +1,503 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// path.c
+//
+// This files contains path whacking functions. Some of this code
+// was taken from the shell and the briefcase engine.
+//
+// This is meant to be used in conjunction with common.h and common.c.
+//
+// History:
+// 01-31-94 ScottH Moved from shellext.c
+// 04-28-95 ScottH Transferred and expanded from Briefcase code
+//
+
+#include "proj.h"
+
+#ifndef NOPATH
+
+#pragma data_seg(DATASEG_READONLY)
+
+const TCHAR c_szColonSlash[] = ":\\";
+
+#pragma data_seg()
+
+#define DBL_BSLASH(sz) (*(WORD *)(sz) == 0x5C5C) // check for double backslash '\\'
+
+/*----------------------------------------------------------
+Purpose: Check is a path is a root.
+
+Returns: TRUE for "\" "X:\" "\\foo\asdf" "\\foo\"
+ FALSE for anything else
+
+Cond: --
+*/
+BOOL PUBLIC WPPathIsRoot(LPCTSTR pPath)
+ {
+ if (!IsDBCSLeadByte(*pPath))
+ {
+ if (!lstrcmpi(pPath + 1, c_szColonSlash)) // "X:\" case
+ return TRUE;
+ }
+
+ if ((*pPath == '\\') && (*(pPath + 1) == 0)) // "\" case
+ return TRUE;
+
+ if (DBL_BSLASH(pPath)) // smells like UNC name
+ {
+ LPCTSTR p;
+ int cBackslashes = 0;
+
+ for (p = pPath + 2; *p; p = AnsiNext(p))
+ {
+ if (*p == '\\' && (++cBackslashes > 1))
+ return FALSE; /* not a bare UNC name, therefore not a root dir */
+ }
+ return TRUE; /* end of string with only 1 more backslash */
+ /* must be a bare UNC, which looks like a root dir */
+ }
+ return FALSE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the given string is a UNC path.
+
+Returns: see above
+Cond: --
+*/
+BOOL PUBLIC WPPathIsUNC(LPCTSTR pszPath)
+ {
+ return DBL_BSLASH(pszPath);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Removes the trailing backslash from a path.
+
+ A:\ --> A:\
+ C:\foo\ --> C:\foo
+ \\Pyrex\User\ --> \\Pyrex\User
+
+Returns: pointer to NULL that replaced the backslash or
+ the pointer to the last character if it isn't
+ a backslash
+
+Cond: pimped this code from the shell
+*/
+LPTSTR PUBLIC WPRemoveBackslash(
+ LPTSTR lpszPath)
+ {
+ int len = lstrlen(lpszPath)-1;
+ if (IsDBCSLeadByte(*AnsiPrev(lpszPath,lpszPath+len+1)))
+ len--;
+
+ if (!WPPathIsRoot(lpszPath) && lpszPath[len] == '\\')
+ lpszPath[len] = '\0';
+
+ return lpszPath + len;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: copies the path without the extension into the buffer
+
+Returns: new path
+Cond: --
+*/
+LPTSTR PUBLIC WPRemoveExt(
+ LPCTSTR pszPath,
+ LPTSTR pszBuf)
+ {
+ LPTSTR psz;
+ LPTSTR pszMark = NULL;
+
+ ASSERT(pszPath);
+ ASSERT(pszBuf);
+
+ psz = pszBuf;
+ while (*pszPath)
+ {
+ *psz = *pszPath;
+ pszPath = AnsiNext(pszPath);
+ if ('.' == *psz)
+ pszMark = psz;
+ else if ('\\' == *psz)
+ pszMark = NULL;
+ psz = AnsiNext(psz);
+ }
+ *psz = '\0';
+
+ if (pszMark)
+ *pszMark = '\0';
+
+ return pszBuf;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Convert a file spec to make it look a bit better
+ if it is all upper case chars.
+
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE MakeComponentPretty(LPTSTR lpPath)
+{
+ LPTSTR lp;
+
+ // check for all uppercase
+ for (lp = lpPath; *lp; lp = AnsiNext(lp)) {
+ if ((*lp >= 'a') && (*lp <= 'z'))
+ return FALSE; // this is a LFN, dont mess with it
+ }
+
+ AnsiLower(lpPath);
+ AnsiUpperBuff(lpPath, 1);
+ return TRUE; // did the conversion
+}
+
+
+//---------------------------------------------------------------------------
+// Given a pointer to a point in a path - return a ptr the start of the
+// next path component. Path components are delimted by slashes or the
+// null at the end.
+// There's special handling for UNC names.
+// This returns NULL if you pass in a pointer to a NULL ie if you're about
+// to go off the end of the path.
+LPTSTR PUBLIC WPFindNextComponentI(LPCTSTR lpszPath)
+{
+ LPTSTR lpszLastSlash;
+
+ // Are we at the end of a path.
+ if (!*lpszPath)
+ {
+ // Yep, quit.
+ return NULL;
+ }
+ // Find the next slash.
+ // REVIEW UNDONE - can slashes be quoted?
+ lpszLastSlash = AnsiChr(lpszPath, '\\');
+ // Is there a slash?
+ if (!lpszLastSlash)
+ {
+ // No - Return a ptr to the NULL.
+ return (LPTSTR) (lpszPath+lstrlen(lpszPath));
+ }
+ else
+ {
+ // Is it a UNC style name?
+ if ('\\' == *(lpszLastSlash+1))
+ {
+ // Yep, skip over the second slash.
+ return lpszLastSlash+2;
+ }
+ else
+ {
+ // Nope. just skip over one slash.
+ return lpszLastSlash+1;
+ }
+ }
+}
+
+
+/*----------------------------------------------------------
+Purpose: Takes the path and makes it presentable.
+
+ The rules are:
+ If the LFN name is simply the short name (all caps),
+ then convert to lowercase with first letter capitalized
+
+Returns: --
+Cond: --
+*/
+void PUBLIC WPMakePresentable(
+ LPTSTR pszPath)
+ {
+ LPTSTR pszComp; // pointers to begining and
+ LPTSTR pszEnd; // end of path component
+ LPTSTR pch;
+ int cComponent = 0;
+ BOOL bUNCPath;
+ TCHAR ch;
+
+ bUNCPath = WPPathIsUNC(pszPath);
+
+ pszComp = pszPath;
+ while (pszEnd = WPFindNextComponentI(pszComp))
+ {
+ // pszEnd may be pointing to the right of the backslash
+ // beyond the path component, so back up one
+ //
+ ch = *pszEnd;
+ *pszEnd = 0; // temporary null
+
+ // pszComp points to the path component
+ //
+ pch = AnsiNext(pszComp);
+ if (':' == *pch)
+ {
+ // Simply capitalize the drive-portion of the path
+ //
+ AnsiUpper(pszComp);
+ }
+ else if (bUNCPath && cComponent++ < 3)
+ {
+ // Network server or share name
+ // BUGBUG: handle LFN network names
+ //
+ AnsiUpper(pszComp);
+ MakeComponentPretty(pszComp);
+ }
+ else
+ {
+ // Normal path component
+ //
+ MakeComponentPretty(pszComp);
+ }
+
+ *pszEnd = ch;
+ pszComp = pszEnd;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the combined path of pszFolder and
+ pszName is greater than MAX_PATH.
+
+Returns: see above
+Cond: --
+*/
+BOOL PUBLIC WPPathsTooLong(
+ LPCTSTR pszFolder,
+ LPCTSTR pszName)
+ {
+ // +1 for possible '\' between the two path components
+ return CbFromCch(lstrlen(pszFolder) + lstrlen(pszName) + 1) >= MAX_PATH;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fully qualifies a path
+Returns: --
+Cond: --
+*/
+void PUBLIC WPCanonicalize(
+ LPCTSTR pszPath,
+ LPTSTR pszBuf) // Must be sizeof(MAX_PATH)
+ {
+ DWORD dwcPathLen;
+
+ dwcPathLen = GetFullPathName(pszPath, MAX_PATH, pszBuf, NULL);
+
+ if (! dwcPathLen || dwcPathLen >= MAX_PATH)
+ lstrcpy(pszBuf, pszPath);
+
+ WPMakePresentable(pszBuf);
+
+ ASSERT(lstrlen(pszBuf) < MAX_PATH);
+ }
+
+
+// Returns a pointer to the last component of a path string.
+//
+// in:
+// path name, either fully qualified or not
+//
+// returns:
+// pointer into the path where the path is. if none is found
+// returns a poiter to the start of the path
+//
+// c:\foo\bar -> bar
+// c:\foo -> foo
+// c:\foo\ -> c:\foo\ (REVIEW: is this case busted?)
+// c:\ -> c:\ (REVIEW: this case is strange)
+// c: -> c:
+// foo -> foo
+LPTSTR PUBLIC WPFindFileName(LPCTSTR pPath)
+ {
+ LPCTSTR pT;
+
+ for (pT = pPath; *pPath; pPath = AnsiNext(pPath))
+ {
+ if ((pPath[0] == '\\' || pPath[0] == ':') && pPath[1] && (pPath[1] != '\\'))
+ pT = pPath + 1;
+ }
+
+ return (LPTSTR)pT; // const -> non const
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the file/directory exists.
+
+Returns: see above
+Cond: --
+*/
+BOOL PUBLIC WPPathExists(
+ LPCTSTR pszPath)
+ {
+ return GetFileAttributes(pszPath) != 0xFFFFFFFF;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Finds the end of the root specification in a path.
+
+ input path output string
+ ---------- -------------
+ c: <empty string>
+ c:\ <empty string>
+ c:\foo foo
+ c:\foo\bar foo\bar
+ \\pyrex\user <empty string>
+ \\pyrex\user\ <empty string>
+ \\pyrex\user\foo foo
+ \\pyrex\user\foo\bar foo\bar
+
+Returns: pointer to first character after end of root spec.
+
+Cond: --
+*/
+LPCTSTR PUBLIC WPFindEndOfRoot(
+ LPCTSTR pszPath)
+ {
+ LPCTSTR psz;
+
+ ASSERT(pszPath);
+
+ if (':' == pszPath[1])
+ {
+ if ('\\' == pszPath[2])
+ psz = &pszPath[3];
+ else
+ psz = &pszPath[2];
+ }
+ else if (WPPathIsUNC(pszPath))
+ {
+ psz = WPFindNextComponentI(pszPath); // hop double-slash
+ psz = WPFindNextComponentI(psz); // hop server name
+ if (psz)
+ psz = WPFindNextComponentI(psz); // hop share name
+
+ if (!psz)
+ {
+ ASSERT(0); // There is no share name
+ psz = pszPath;
+ }
+ }
+ else
+ {
+ ASSERT(0);
+ psz = pszPath;
+ }
+
+ return psz;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Determines whether or not one path is a prefix of another.
+ Stole this from DavidDi's twincore.
+Returns: TRUE if second path is a prefix of the first path
+Cond: --
+*/
+BOOL PUBLIC WPPathIsPrefix(
+ LPCTSTR lpcszPath1, // whole path (longer or same length)
+ LPCTSTR lpcszPath2) // prefix path (shorter or same length)
+ {
+ BOOL bIsPrefix = FALSE;
+ int nLen1;
+ int nLen2;
+
+ ASSERT(lpcszPath1);
+ ASSERT(lpcszPath2);
+
+ nLen1 = lstrlen(lpcszPath1);
+ nLen2 = lstrlen(lpcszPath2);
+
+ /* Is the prefix string shorter or the same length? */
+
+ if (nLen1 >= nLen2)
+ {
+ /*
+ * Yes. Do the two strings match through the length of the prefix
+ * string?
+ */
+
+ if (! lstrnicmp(lpcszPath1, lpcszPath2, nLen2))
+ {
+ /*
+ * Yes. Is the prefix of the longer string followed immediately by
+ * a null terminator or a path separator?
+ */
+
+ if (! lpcszPath1[nLen2] ||
+ lpcszPath1[nLen2] == '\\' ||
+ *(CharPrev(lpcszPath2, lpcszPath2 + lstrlen(lpcszPath2))) == '\\')
+ /* Yes. */
+ bIsPrefix = TRUE;
+ }
+ }
+
+ return(bIsPrefix);
+ }
+
+
+#ifdef WANT_SHELL_SUPPORT
+/*----------------------------------------------------------
+Purpose: Gets the displayable filename of the path. The filename
+ is placed in the provided buffer.
+
+Returns: pointer to buffer
+Cond: --
+*/
+LPTSTR PUBLIC WPGetDisplayName(
+ LPCTSTR pszPath,
+ LPTSTR pszBuf)
+ {
+ SHFILEINFO sfi;
+
+ if (SHGetFileInfo(pszPath, 0, &sfi, sizeof(sfi), SHGFI_DISPLAYNAME))
+ lstrcpy(pszBuf, sfi.szDisplayName);
+ else
+ lstrcpy(pszBuf, WPFindFileName(pszPath));
+
+ return pszBuf;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sends a notify message to the shell regarding a file-status
+ change.
+Returns: --
+Cond: --
+*/
+void PUBLIC WPNotifyShell(
+ LPCTSTR pszPath,
+ NOTIFYSHELLEVENT nse,
+ BOOL bDoNow) // TRUE: force the event to be processed right away
+ {
+#pragma data_seg(DATASEG_READONLY)
+
+ static LONG const rgShEvents[] =
+ { SHCNE_CREATE, SHCNE_MKDIR, SHCNE_UPDATEITEM, SHCNE_UPDATEDIR };
+
+#pragma data_seg()
+
+ ASSERT(pszPath);
+ ASSERT(nse < ARRAYSIZE(rgShEvents));
+
+ SHChangeNotify(rgShEvents[nse], SHCNF_PATH, pszPath, NULL);
+
+ if (bDoNow)
+ {
+ SHChangeNotify(0, SHCNF_FLUSHNOWAIT, NULL, NULL);
+ }
+ }
+#endif // WANT_SHELL_SUPPORT
+
+#endif // NOPATH
+
diff --git a/private/unimodem/common/sec.c b/private/unimodem/common/sec.c
new file mode 100644
index 000000000..109e18074
--- /dev/null
+++ b/private/unimodem/common/sec.c
@@ -0,0 +1,163 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SEC.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/27/96 JosephJ Created
+//
+//
+// Description: Security-related helper functions
+//
+//****************************************************************************
+#include "proj.h"
+#include "sec.h"
+
+
+//****************************************************************************
+// Description: This procedure will allocate and initialize a security
+// descriptor with the specificed attributes.
+//
+// Returns: pointer to an allocated and initialized security descriptor.
+// If NULL, GetLastError() will return the appropriate error code.
+//
+// History:
+// 3/27/96 JosephJ Created
+//****************************************************************************/
+//
+PSECURITY_DESCRIPTOR AllocateSecurityDescriptor (
+ PSID_IDENTIFIER_AUTHORITY pSIA,
+ DWORD dwRID,
+ DWORD dwRights,
+ PSID pSidOwner,
+ PSID pSidGroup
+ )
+{
+ PSID pObjSid = NULL;
+ PACL pDacl = NULL;
+ PSECURITY_DESCRIPTOR pSD = NULL;
+
+ pSD = LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH+256);
+
+ if (!pSD) goto end_fail;
+
+ // Set up the SID for the admins that will be allowed to have
+ // access. This SID will have 1 sub-authority
+ if (!AllocateAndInitializeSid(
+ pSIA,
+ 1,
+ dwRID, 0, 0, 0, 0, 0, 0, 0,
+ &pObjSid
+ ))
+ {
+ goto end_fail;
+ }
+
+ // Set up the DACL that will allow all processes with the above SID
+ // access specified in dwRights. It should be large enough to hold all ACEs.
+ //
+ {
+ DWORD cbDaclSize = sizeof(ACCESS_ALLOWED_ACE) +
+ GetLengthSid(pObjSid) +
+ sizeof(ACL);
+
+ pDacl = (PACL)LocalAlloc( LPTR, cbDaclSize );
+ if (!pDacl)
+ {
+ goto end_fail;
+ }
+
+ if ( !InitializeAcl( pDacl, cbDaclSize, ACL_REVISION2 ) )
+ {
+ goto end_fail;
+ }
+ }
+
+ // Add the ACE to the DACL
+ //
+ if ( !AddAccessAllowedAce( pDacl, ACL_REVISION2, dwRights, pObjSid))
+ {
+ goto end_fail;
+ }
+
+ // Create the security descriptor and put the DACL in it.
+ //
+ if ( !InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION ))
+ {
+ goto end_fail;
+ }
+
+ if ( !SetSecurityDescriptorDacl(pSD, TRUE, pDacl, FALSE ) )
+ {
+ goto end_fail;
+ }
+
+ // Set owner for the descriptor
+ //
+ if ( !SetSecurityDescriptorOwner( pSD, pSidOwner, FALSE) )
+ {
+ goto end_fail;
+ }
+
+ // Set group for the descriptor
+ //
+ if ( !SetSecurityDescriptorGroup( pSD, pSidGroup, FALSE) )
+ {
+ goto end_fail;
+ }
+
+ FreeSid(pObjSid);
+ return pSD;
+
+
+end_fail:
+ {
+ DWORD dwRetCode = GetLastError();
+
+ if (pDacl) { LocalFree(pDacl); pDacl=0;}
+
+ if (pObjSid) { FreeSid(pObjSid); pObjSid=0;}
+
+ if (pSD) { LocalFree(pSD); pSD=0;}
+
+ SetLastError(dwRetCode);
+ }
+ return NULL;
+}
+
+
+//****************************************************************************
+// Description: Frees a security descriptor previously allocated by
+// AllocateSecurityDescriptor.
+//
+// History:
+// 3/27/96 JosephJ Created
+//****************************************************************************/
+void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD)
+{
+ PSID pObjSid = NULL;
+ PACL pDacl = NULL;
+ BOOL fGotAcl=FALSE, fByDefault=FALSE;
+
+
+ // Free Dacl, if user had allocated it.
+ if (GetSecurityDescriptorDacl(pSD, &fGotAcl, &pDacl, &fByDefault ))
+ {
+ if (fGotAcl && !fByDefault && pDacl)
+ {
+ LocalFree(pDacl);
+ }
+ }
+ else
+ {
+ ASSERT(FALSE); // We should not be calling this function with such
+ // an pSD.
+ }
+
+ LocalFree(pSD);
+
+}
diff --git a/private/unimodem/common/sec.h b/private/unimodem/common/sec.h
new file mode 100644
index 000000000..9ec615f7e
--- /dev/null
+++ b/private/unimodem/common/sec.h
@@ -0,0 +1,24 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SEC.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/27/96 JosephJ Created
+//
+//
+// Description: Security-related helper functions
+//
+//****************************************************************************
+PSECURITY_DESCRIPTOR AllocateSecurityDescriptor (
+ PSID_IDENTIFIER_AUTHORITY pSIA,
+ DWORD dwRID,
+ DWORD dwRights,
+ PSID pSidOwner,
+ PSID pSidGroup
+ );
+void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD);
diff --git a/private/unimodem/common/slot.c b/private/unimodem/common/slot.c
new file mode 100644
index 000000000..a75f4ca7f
--- /dev/null
+++ b/private/unimodem/common/slot.c
@@ -0,0 +1,487 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Implements the unimodem TSP notification mechanism:
+// The lower level (notifXXXX) APIs
+//
+//****************************************************************************
+
+#include "proj.h"
+#include <slot.h>
+#include "sec.h"
+
+#define T(_str) TEXT(_str)
+
+#ifdef CONSOLE
+#define ASSERT(_c) \
+ ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__))
+#define DPRINTF(_fmt) printf(_fmt)
+#define DPRINTF1(_fmt,_arg) printf(_fmt,_arg)
+#define DPRINTF2(_fmt,_arg,_arg2) printf(_fmt,_arg,_arg2)
+#define DPRINTF3(_fmt,_arg,_arg2,_arg3) printf(_fmt,_arg,_arg2,_arg3)
+#endif // CONSOLE
+
+#define fNOTIF_STATE_DEINIT 0
+#define fNOTIF_STATE_INIT_SERVER 1
+#define fNOTIF_STATE_INIT_CLIENT 2
+
+#define IS_SERVER(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_SERVER)
+#define IS_CLIENT(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_CLIENT)
+
+
+// The following help define the fully-qualified mailslot and semaphore names.
+#define dwNOTIFSTATE_SIG (0x53CB31A0L)
+#define FULLNAME_TEMPLATE T("--.-mailslot-%08lx-%s")
+
+// Keeps the state of a notification (either client or server).
+// It is cast to a DWORD to form the handle returned by notifCreate()
+typedef struct
+{
+ DWORD dwSig; // should be dwNOTIFSTATE_SIG when inited
+ HANDLE hSem;
+ HANDLE hSlot;
+ DWORD dwState;
+ DWORD dwcbMax;
+
+} NOTIFICATION_STATE, *PNOTIFICATION_STATE;
+
+DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz,
+ DWORD dwMaxSize,
+ DWORD dwMaxPending);
+DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz);
+PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn);
+
+
+//****************************************************************************
+// Function: Creates a notification object -- either as server or client.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+HNOTIFICATION notifCreate(
+ BOOL fServer, // TRUE ==> Server
+ LPCTSTR lptszName, // Name to associate with this object
+ DWORD dwMaxSize, // Max size of frames written/read
+ // (Ignored if (!fServer))
+ DWORD dwMaxPending // Max number of notification frames allowed
+ // to be pending. (Ignored if (!fServer))
+)
+{
+ PNOTIFICATION_STATE pns=NULL;
+ HNOTIFICATION hn=0;
+ TCHAR rgtchTmp[MAX_NOTIFICATION_NAME_SIZE+23];
+ UINT u = lstrlen(lptszName);
+ DWORD dwErr=0;
+
+ // Format of semaphore name is --.-mailslot-sig-name
+ // Example: "--.-mailslot-8cb45651-unimodem"
+ // To create the equivalent mailslot, we run through and change
+ // all '-' to '\'s (if the name containts '-', they will get converted --
+ // big deal.)
+ if ((u+23)>(sizeof(rgtchTmp)/sizeof(TCHAR))) // 13(prefix)+ 9(sig-) +1(null)
+ {
+ dwErr = ERROR_INVALID_PARAMETER;
+ goto end;
+ }
+
+ pns=LocalAlloc(LPTR, sizeof(*pns));
+ if (!pns) goto end;
+
+ wsprintf(rgtchTmp,FULLNAME_TEMPLATE,
+ (unsigned long) dwNOTIFSTATE_SIG,
+ lptszName);
+
+ TRACE_MSG(TF_GENERAL, "Semaphore name = [%s]\n", rgtchTmp);
+
+ if (fServer) dwErr = inotif_server_create(pns, rgtchTmp,
+ dwMaxSize, dwMaxPending);
+ else dwErr = inotif_client_open(pns, rgtchTmp);
+
+ if (dwErr) goto end;
+ pns->dwSig=dwNOTIFSTATE_SIG;
+ hn = (HNOTIFICATION)pns;
+
+end:
+ if (!hn)
+ {
+ if (!dwErr) dwErr=GetLastError();
+ if (pns) LocalFree(pns);
+ SetLastError(dwErr);
+ }
+ return hn;
+}
+
+//****************************************************************************
+// Function: Free a notification object
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void notifFree(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (hn)
+ {
+ pns->dwSig=0;
+ CloseHandle(pns->hSem); pns->hSem=0;
+ CloseHandle(pns->hSlot); pns->hSlot=0;
+ LocalFree(pns);
+ }
+}
+
+//****************************************************************************
+// Function: Retrieve the synchronization object handle accociated with
+// the notiication object. NOTE: This handle is valid until
+// the notification object is alive. It must NOT be deleted
+// externally. Must be a server object.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+HANDLE notifGetObj(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (pns && IS_SERVER(pns))
+ {
+ return pns->hSem;
+ }
+ else if (pns)
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return NULL;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return NULL;
+ }
+}
+
+//****************************************************************************
+// Function: Retrieves the max allowable size of the frame (server only)
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD notifGetMaxSize(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (pns && IS_SERVER(pns))
+ {
+ return pns->dwcbMax;
+ }
+ else
+ {
+ if (pns)
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+ return 0;
+ }
+}
+
+
+//****************************************************************************
+// Function: (Server only) Reads a notification msg, if any. Does not block.
+// A return value of FALSE and a GetLastError value of ERROR_NO_DATA
+// indicates that no frame was available..
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifReadMsg(HNOTIFICATION hn,
+ LPBYTE lpb,
+ DWORD dwcbMax,
+ LPDWORD lpdwRead)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ BOOL fRet=FALSE;
+ *lpdwRead=0;
+
+ if (pns)
+ {
+ DWORD dwRead=0;
+
+ if(!IS_SERVER(pns))
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ goto end;
+ }
+
+ fRet = ReadFile(pns->hSlot, lpb, dwcbMax, lpdwRead, NULL);
+
+ if (!fRet)
+ {
+ TRACE_MSG(TF_GENERAL, "ReadFile failed!\n");
+ goto end;
+ }
+
+ TRACE_MSG(TF_GENERAL, "Success!\n");
+ fRet=TRUE;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+
+end:
+ return fRet;
+}
+
+
+//****************************************************************************
+// Function: Returns the size of the next frame in the queue. Returns TRUE
+// even if there is no data in the queue -- in this case, *lpdwcb
+// is set to 0. Returns FALSE if there is some other error.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb)
+{
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return FALSE;
+}
+
+
+//****************************************************************************
+// Function: (Client side). Write a notification msg.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ BOOL fRet=FALSE;
+
+ if (pns)
+ {
+ DWORD dwWritten=0;
+
+ if(!IS_CLIENT(pns))
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ goto end;
+ }
+
+ fRet = WriteFile(pns->hSlot, lpb, dwcb, &dwWritten, NULL);
+ if (fRet)
+ {
+ fRet=ReleaseSemaphore(pns->hSem,1,NULL);
+ if (!fRet)
+ {
+ TRACE_MSG(TF_GENERAL, "ReleaseSemaphore failed!\n");
+ goto end;
+ }
+ }
+ if (!fRet || dwWritten!=dwcb)
+ {
+ DWORD dwErr = GetLastError();
+ TRACE_MSG(TF_GENERAL,
+ "WriteFile failed. fRet=%lu; dwWritten=%lu; Err=%lu\n",
+ fRet, dwcb, dwErr);
+ SetLastError(dwErr);
+ goto end;
+ }
+ TRACE_MSG(TF_GENERAL, "notifWriteFrame: success!\n");
+ fRet=TRUE;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+
+end:
+ return fRet;
+}
+
+
+//****************************************************************************
+// Function: (internal) create the notif object -- server side.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz, DWORD dwMaxSize,
+ DWORD dwMaxPending)
+{
+ DWORD dwErr=ERROR_INVALID_PARAMETER;
+ TCHAR c, *pc = lptsz;
+ SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY;
+ SECURITY_ATTRIBUTES sa, *psa=NULL;
+
+ PSECURITY_DESCRIPTOR pSD = AllocateSecurityDescriptor (
+ &siaWorld,
+ SECURITY_WORLD_RID,
+ STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL
+ | SEMAPHORE_ALL_ACCESS
+ | SEMAPHORE_MODIFY_STATE
+ | GENERIC_READ
+ | GENERIC_WRITE
+ ,
+ NULL,
+ NULL
+ );
+
+ if (!pSD)
+ {
+ TRACE_MSG(TF_GENERAL,
+ "WARNING:AllocateSecurityDescriptor(-) returns error 0x%lx\n",
+ GetLastError());
+ }
+ else
+ {
+ TRACE_MSG(TF_GENERAL, "AllocateSecurityDescriptor(-) returns SUCCESS\n");
+ sa.nLength = sizeof(sa);
+ sa.bInheritHandle=FALSE;
+ sa.lpSecurityDescriptor = pSD;
+ psa = &sa;
+
+ }
+
+ // Create mailslot name -- make sure there are no '\'s
+ while(c=*pc++) {if (c=='\\') pc[-1]='-';}
+ TRACE_MSG(TF_GENERAL, "Semaphore name = [%s]\n", lptsz);
+
+ // Create Semaphore
+ {
+ pns->hSem=CreateSemaphore(psa, 0, dwMaxPending, lptsz);
+ if (pns->hSem && (dwErr=(GetLastError()==ERROR_ALREADY_EXISTS)))
+ {
+ TRACE_MSG(TF_GENERAL, "Semaphore %s already exists!\n", lptsz);
+ CloseHandle(pns->hSem);
+ pns->hSem=NULL;
+ }
+ if (!pns->hSem) goto end_fail;
+ }
+
+ // Create mailslot name
+ pc = lptsz;
+ while(c=*pc++) {if (c=='-') pc[-1]='\\';}
+
+ TRACE_MSG(TF_GENERAL, "Mailslot name = [%s]\n", lptsz);
+
+ // CreateMailSlot -- specify size, zero-delay
+ pns->hSlot=CreateMailslot(lptsz, dwMaxSize, 0, psa);
+ if (!pns->hSlot)
+ {
+ dwErr = GetLastError();
+ CloseHandle(pns->hSem); pns->hSem=0;
+ goto end_fail;
+ }
+
+ TRACE_MSG(TF_GENERAL, "Mailslot created!\n");
+
+ // set state and maxsize
+ pns->dwState=fNOTIF_STATE_INIT_SERVER;
+ pns->dwcbMax=dwMaxSize;
+ dwErr=0;
+ goto end;
+
+end_fail:
+ if (!dwErr) dwErr=GetLastError();
+ if (!dwErr) dwErr=ERROR_INVALID_PARAMETER;
+
+end:
+ if (pSD) {FreeSecurityDescriptor(pSD);}
+ return dwErr;
+}
+
+
+//****************************************************************************
+// Function: (internal) create the notif object -- client side.
+// The server must be already up and running, or we will
+// fail.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz)
+{
+ DWORD dwErr=ERROR_INVALID_PARAMETER;
+ TCHAR c, *pc = lptsz;
+
+ // Create mailslot name -- convert '-' to '\';
+ while(c=*pc++) {if (c=='-') pc[-1]='\\';}
+ TRACE_MSG(TF_GENERAL, "Mailslot name = [%s]\n", lptsz);
+
+ // Open mailslot ...
+ pns->hSlot=CreateFile(
+ lptsz,
+ GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL
+ );
+
+ if (!pns->hSlot)
+ {
+ TRACE_MSG(TF_GENERAL, "Couldn't open mailslot for writing\n");
+ goto end_fail;
+ }
+
+ // Create Semaphore name -- convert '\' to '-';
+ pc=lptsz;
+ while(c=*pc++) {if (c=='\\') pc[-1]='-';}
+ TRACE_MSG(TF_GENERAL, "Sempahore name = [%s]\n", lptsz);
+
+ pns->hSem=OpenSemaphore(SEMAPHORE_MODIFY_STATE, FALSE, lptsz);
+ //pns->hSem=OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, lptsz);
+ if (!pns->hSem) {
+ TRACE_MSG(TF_GENERAL, "Could not open semaphore\n");
+ dwErr=GetLastError();
+ CloseHandle(pns->hSlot); pns->hSlot=0;
+ goto end_fail;
+ }
+
+ // set state and maxsize
+ pns->dwState=fNOTIF_STATE_INIT_CLIENT;
+ pns->dwcbMax=0; // Apparently you can't get the max size of the mailslot.
+ dwErr=0;
+ goto end;
+
+end_fail:
+ if (!dwErr) dwErr=GetLastError();
+ if (!dwErr) dwErr=ERROR_INVALID_PARAMETER;
+
+end:
+ return dwErr;
+}
+
+//****************************************************************************
+// Function: (internal) validates and converts a handle to a ptr to state.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn)
+{
+ if (hn)
+ {
+ PNOTIFICATION_STATE pns= (PNOTIFICATION_STATE) hn;
+ if (pns->dwSig!=dwNOTIFSTATE_SIG)
+ {
+ TRACE_MSG(TF_GENERAL, "Bad hotification handle 0x%lu\n", hn);
+ ASSERT(FALSE);
+ return NULL;
+ }
+ return pns;
+ }
+ return NULL;
+}
diff --git a/private/unimodem/common/sources b/private/unimodem/common/sources
new file mode 100644
index 000000000..47b42b75f
--- /dev/null
+++ b/private/unimodem/common/sources
@@ -0,0 +1,65 @@
+!IF 0
+
+Copyright (c) 1994 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+
+Author:
+
+ Steve Cathcart (stevecat) 15-Nov-1994
+
+NOTE: Commented description of this file is in \nt\bak\bin\sources.tpl
+
+Use the following line when this is UNICODE ported
+
+NOT_UNICODE=1
+
+
+ $(BASEDIR)\public\sdk\lib\*\mpr.lib \
+
+!ENDIF
+
+MAJORCOMP=shell
+MINORCOMP=cpls
+
+TARGETNAME=rovcomm
+TARGETPATH=..\lib
+TARGETTYPE=LIBRARY
+
+NOT_LEAN_AND_MEAN=1
+
+INCLUDES=.;..\inc;$(BASEDIR)\private\windows\inc
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+!IF "$(SHELLDBG)"=="1"
+C_DEFINES=$(C_DEFINES) -DDEBUG -DFULL_DEBUG
+!ENDIF
+
+UMTYPE=windows
+EXPECTED_WINVER=4.0
+
+SOURCES= rovcomm.c \
+ rovmem.c \
+ rovini.c \
+ rovdi.c \
+ slot.c \
+ sec.c
+
+PRECOMPILED_INCLUDE=proj.h
+PRECOMPILED_PCH=proj.pch
+PRECOMPILED_OBJ=proj.obj
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/cpl/ci.c b/private/unimodem/cpl/ci.c
new file mode 100644
index 000000000..cb5bbc0de
--- /dev/null
+++ b/private/unimodem/cpl/ci.c
@@ -0,0 +1,3677 @@
+/*
+ * CI.C -- Contains Class Installer for Modems.
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1994
+ * All rights reserved
+ *
+ */
+
+#include "proj.h"
+
+
+#define DEFAULT_CALL_SETUP_FAIL_TIMEOUT 60 // seconds
+
+#pragma data_seg(DATASEG_READONLY)
+
+#define SAFE_DTE_SPEED 19200
+static DWORD const FAR s_adwLegalBaudRates[] = { 300, 1200, 2400, 9600, 19200, 38400, 57600, 115200 };
+
+TCHAR const FAR c_szDeviceType[] = REGSTR_VAL_DEVTYPE;
+TCHAR const FAR c_szAttachedTo[] = TEXT("AttachedTo");
+TCHAR const FAR c_szService[] = REGSTR_VAL_SERVICE;
+
+TCHAR const FAR c_szDeviceDesc[] = REGSTR_VAL_DEVDESC;
+
+TCHAR const FAR c_szManufacturer[] = TEXT("Manufacturer");
+TCHAR const FAR c_szModel[] = TEXT("Model");
+TCHAR const FAR c_szID[] = TEXT("ID");
+
+TCHAR const FAR c_szProperties[] = REGSTR_VAL_PROPERTIES;
+TCHAR const FAR c_szSettings[] = TEXT("Settings");
+TCHAR const FAR c_szBlindOn[] = TEXT("Blind_On");
+TCHAR const FAR c_szBlindOff[] = TEXT("Blind_Off");
+TCHAR const FAR c_szDCB[] = TEXT("DCB");
+TCHAR const FAR c_szDefault[] = TEXT("Default");
+
+TCHAR const FAR c_szContention[] = TEXT("Contention");
+
+
+#ifdef PROFILE_MASSINSTALL
+HWND g_hwnd;
+DWORD g_dwTimeSpent;
+DWORD g_dwTimeBegin;
+#endif
+
+
+
+// NOTE: this is dependent on the INFSTR_PLATFORM_NTxxx defines from infstr.h
+#ifdef WINNT
+TCHAR const FAR c_szInfSectionExt[] = TEXT(".NT");
+#endif
+
+#if !defined(WINNT)
+TCHAR const FAR c_szVcd[] = TEXT("*vcd");
+#endif
+
+#ifdef FULL_PNP
+#if !defined(WINNT)
+TCHAR const FAR c_szPortDriver[] = TEXT("PortDriver");
+TCHAR const FAR c_szSerialVxd[] = TEXT("Serial.vxd");
+#endif
+TCHAR const FAR c_szPortConfigDialog[] = TEXT("PortConfigDialog");
+TCHAR const FAR c_szSerialUI[] = TEXT("serialui.dll");
+#endif
+
+#pragma data_seg()
+
+
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+DWORD gDeviceFlags;
+#endif // INSTANT_DEVICE_ACTIVATION
+
+BOOL PutStuffInCache(HKEY hKeyDrv);
+BOOL GetStuffFromCache(HKEY hkeyDrv);
+
+//-----------------------------------------------------------------------------------
+// Wizard handlers
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Adds a page to the dynamic wizard
+
+Returns: handle to the prop sheet page
+Cond: --
+*/
+HPROPSHEETPAGE
+PRIVATE
+AddWizardPage(
+ IN PSP_INSTALLWIZARD_DATA piwd,
+ IN HINSTANCE hinst,
+ IN UINT id,
+ IN DLGPROC pfn,
+ IN LPFNPSPCALLBACK pfnCallback, OPTIONAL
+ IN LPARAM lParam) OPTIONAL
+ {
+ HPROPSHEETPAGE hpage = NULL;
+
+ if (MAX_INSTALLWIZARD_DYNAPAGES > piwd->NumDynamicPages)
+ {
+ PROPSHEETPAGE psp;
+
+ psp.dwSize = sizeof(psp);
+ psp.dwFlags = PSP_DEFAULT;
+ if (pfnCallback)
+ {
+ psp.dwFlags |= PSP_USECALLBACK;
+ }
+
+ psp.hInstance = hinst;
+ psp.pszTemplate = MAKEINTRESOURCE(id);
+ psp.hIcon = NULL;
+ psp.pszTitle = NULL;
+ psp.pfnDlgProc = pfn;
+ psp.lParam = lParam;
+ psp.pfnCallback = pfnCallback;
+ psp.pcRefParent = NULL;
+
+ piwd->DynamicPages[piwd->NumDynamicPages] = CreatePropertySheetPage(&psp);
+ if (piwd->DynamicPages[piwd->NumDynamicPages])
+ {
+ hpage = piwd->DynamicPages[piwd->NumDynamicPages];
+ piwd->NumDynamicPages++;
+ }
+ }
+ return hpage;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Adds a page from the Setup APIs to the dynamic wizard
+
+Returns: handle to the prop sheet page
+Cond: --
+*/
+HPROPSHEETPAGE
+PRIVATE
+AddSetupWizardPage(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_INSTALLWIZARD_DATA piwd,
+ IN DWORD dwPageType)
+ {
+ HPROPSHEETPAGE hpage = NULL;
+
+ if (MAX_INSTALLWIZARD_DYNAPAGES > piwd->NumDynamicPages)
+ {
+ piwd->DynamicPages[piwd->NumDynamicPages] = CplDiGetWizardPage(hdi, pdevData, piwd, dwPageType, SPWP_USE_DEVINFO_DATA);
+ if (piwd->DynamicPages[piwd->NumDynamicPages])
+ {
+ hpage = piwd->DynamicPages[piwd->NumDynamicPages];
+ piwd->NumDynamicPages++;
+ }
+ }
+ return hpage;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function attempts to add the TAPI dialing
+ properties wizard page. If it fails, it sets the
+ pfnDialInited field to NULL so we won't try to
+ switch to this page during the wizard.
+
+Returns: handle to the prop sheet page
+Cond: --
+*/
+HPROPSHEETPAGE
+PRIVATE
+AddTapiWizardPage(
+ IN PSP_INSTALLWIZARD_DATA piwd,
+ IN LPSETUPINFO psi)
+ {
+ HPROPSHEETPAGE hpage = NULL;
+
+ // Did the TAPI DLL get loaded correctly? (It was loaded in
+ // SetupInfo_Create.)
+ if (ISVALIDHINSTANCE(psi->hinstTapi))
+ {
+ // Yes; add the mini-dial wizard page
+ DLGPROC pfnDlg;
+
+ pfnDlg = (DLGPROC)GetProcAddress(psi->hinstTapi, "LocWizardDlgProc");
+ if (pfnDlg)
+ {
+ HRSRC hres;
+
+ hres = FindResource(psi->hinstTapi, MAKEINTRESOURCE(IDD_WIZ_DIALINFO), RT_DIALOG);
+ if (NULL == hres)
+ {
+ TRACE_MSG(TF_ERROR, "Could not find resource %d in TAPI32.", IDD_WIZ_DIALINFO);
+ }
+ else
+ {
+ hpage = AddWizardPage(piwd,
+ psi->hinstTapi,
+ IDD_WIZ_DIALINFO,
+ pfnDlg,
+ NULL,
+ 0);
+ }
+ }
+
+ // Did we fail to add the page?
+ if (NULL == hpage)
+ {
+ // Yes; don't even try to switch to this page in the wizard
+ psi->pfnDialInited = NULL;
+ }
+ }
+
+ return hpage;
+ }
+
+
+
+
+/*----------------------------------------------------------
+Purpose: This function destroys the wizard context block
+ and removes it from the InstallWizard class install
+ params.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+CleanupWizard(
+ IN LPSETUPINFO psi)
+ {
+ ASSERT(psi);
+
+ if (sizeof(*psi) == psi->cbSize)
+ {
+ TRACE_MSG(TF_GENERAL, "Destroy install wizard structures");
+
+
+ // Clean up
+ SetupInfo_Destroy(psi);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Callback for the standard modem wizard pages. This
+ function handles the cleanup of the pages. Although
+ the caller may call DIF_DESTROYWIZARDDATA, we do not
+ depend on this to clean up.
+
+Returns: TRUE on success
+Cond: --
+*/
+UINT
+CALLBACK
+ModemWizardCallback(
+ IN HWND hwnd,
+ IN UINT uMsg,
+ IN LPPROPSHEETPAGE ppsp)
+ {
+ UINT uRet = TRUE;
+
+ ASSERT(ppsp);
+
+ try
+ {
+ // Release everything?
+ if (PSPCB_RELEASE == uMsg)
+ {
+ // Yes
+ LPSETUPINFO psi = (LPSETUPINFO)ppsp->lParam;
+
+ ASSERT(psi);
+
+ if (IsFlagSet(psi->dwFlags, SIF_RELEASE_IN_CALLBACK))
+ {
+ CleanupWizard(psi);
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ ASSERT(0);
+ uRet = FALSE;
+ }
+
+ return uRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function initializes the wizard pages.
+
+Returns:
+Cond: --
+*/
+DWORD
+PRIVATE
+InitWizard(
+ OUT LPSETUPINFO FAR * ppsi,
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_INSTALLWIZARD_DATA piwd,
+ IN PMODEM_INSTALL_WIZARD pmiw)
+ {
+ DWORD dwRet;
+ LPSETUPINFO psi;
+
+ ASSERT(ppsi);
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pmiw);
+
+ dwRet = SetupInfo_Create(&psi, hdi, pdevData, piwd, pmiw);
+
+ if (NO_ERROR == dwRet)
+ {
+ TRACE_MSG(TF_GENERAL, "Initialize install wizard structures");
+
+ piwd->DynamicPageFlags = DYNAWIZ_FLAG_PAGESADDED;
+
+ // Add standard modem wizard pages. The first page will
+ // also specify the cleanup callback.
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_INTRO,
+ IntroDlgProc,
+ ModemWizardCallback,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_SELQUERYPORT,
+ SelQueryPortDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_DETECT,
+ DetectDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_NOMODEM,
+ NoModemDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_NOP,
+ SelPrevPageDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ // Add the standard Setup "Select Device" page
+ AddSetupWizardPage(hdi, psi->pdevData, piwd, SPWPT_SELECTDEVICE);
+
+ // Add remaining pages
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_PORTMANUAL,
+ PortManualDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_PORTDETECT,
+ PortDetectDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_INSTALL,
+ InstallDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ // Add the TAPI dialing properties page
+ AddTapiWizardPage(piwd, psi);
+
+
+ AddWizardPage(piwd,
+ g_hinst,
+ IDD_WIZ_DONE,
+ DoneDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ // Set the ClassInstallParams given the changes made above
+ if ( !CplDiSetClassInstallParams(hdi, pdevData, PCIPOfPtr(piwd), sizeof(*piwd)) )
+ {
+ dwRet = GetLastError();
+ ASSERT(NO_ERROR != dwRet);
+ }
+ else
+ {
+ dwRet = NO_ERROR;
+ }
+ }
+
+ *ppsi = psi;
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: DIF_INSTALLWIZARD handler
+
+ The modem installation wizard pages are composed in this
+ function.
+
+Returns: NO_ERROR to add wizard pages
+Cond: --
+*/
+DWORD
+PRIVATE
+ClassInstall_OnInstallWizard(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_DEVINSTALL_PARAMS pdevParams)
+ {
+ DWORD dwRet;
+ SP_INSTALLWIZARD_DATA iwd;
+ MODEM_INSTALL_WIZARD miw;
+ PMODEM_INSTALL_WIZARD pmiw;
+
+ DBG_ENTER(ClassInstall_OnInstallWizard);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevParams);
+
+ iwd.ClassInstallHeader.cbSize = sizeof(iwd.ClassInstallHeader);
+
+ if (!CplDiGetClassInstallParams(hdi, pdevData, PCIPOfPtr(&iwd), sizeof(iwd), NULL) ||
+ DIF_INSTALLWIZARD != iwd.ClassInstallHeader.InstallFunction)
+ {
+ dwRet = ERROR_DI_DO_DEFAULT;
+ goto exit;
+ }
+
+ // First check for the unattended install case.
+ pmiw = (PMODEM_INSTALL_WIZARD)iwd.PrivateData;
+ if (pmiw && pmiw->InstallParams.bUnattended)
+ {
+ UnattendedInstall(iwd.hwndWizardDlg, &pmiw->InstallParams);
+ dwRet = NO_ERROR;
+ goto exit;
+ }
+
+ if (NULL == pdevParams)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ else
+ {
+ // The modem class installer allows an app to invoke it
+ // different ways.
+ //
+ // 1) Atomically. This allows the caller to invoke the
+ // wizard with a single call to the class installer
+ // using the DIF_INSTALLWIZARD install function.
+ //
+ if (NULL == pmiw)
+ {
+ pmiw = &miw;
+
+ ZeroInit(pmiw);
+ pmiw->cbSize = sizeof(*pmiw);
+ }
+ else
+ {
+ pmiw->PrivateData = 0; // ensure this
+ }
+
+ // Verify the size of the optional modem install structure.
+ if (sizeof(*pmiw) != pmiw->cbSize)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ else
+ {
+ LPSETUPINFO psi;
+
+ dwRet = InitWizard(&psi, hdi, pdevData, &iwd, pmiw);
+
+ // Was the wizard initialized?
+ if (NO_ERROR == dwRet)
+ {
+ // Yes; show it
+ PROPSHEETHEADER psh;
+
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_PROPTITLE | PSH_WIZARD;
+ psh.hwndParent = iwd.hwndWizardDlg;
+ psh.hInstance = g_hinst;
+ psh.pszCaption = MAKEINTRESOURCE(IDS_CAP_MODEMWIZARD);
+ psh.nPages = iwd.NumDynamicPages;
+ psh.nStartPage = 0;
+ psh.phpage = iwd.DynamicPages;
+
+ PropertySheet(&psh);
+
+ // Set the return value according to how the wizard fared
+ if (PSBTN_CANCEL == psi->miw.ExitButton)
+ {
+ dwRet = ERROR_CANCELLED;
+ }
+ else
+ {
+ dwRet = NO_ERROR;
+ }
+
+ if (iwd.PrivateData)
+ {
+ // Return back any pertinent info to the caller
+ ASSERT((LPVOID)pmiw == (LPVOID)iwd.PrivateData);
+
+ BltByte(pmiw, &psi->miw, pmiw->cbSize);
+ ASSERT(0 == pmiw->PrivateData);
+ }
+
+ CleanupWizard(psi);
+ }
+ }
+ }
+
+exit:
+ DBG_EXIT(ClassInstall_OnInstallWizard);
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: DIF_DESTROYWIZARDDATA handler
+
+Returns: NO_ERROR
+Cond: --
+*/
+DWORD
+PRIVATE
+ClassInstall_OnDestroyWizard(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_DEVINSTALL_PARAMS pdevParams)
+ {
+ DWORD dwRet;
+ SP_INSTALLWIZARD_DATA iwd;
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevParams);
+
+ iwd.ClassInstallHeader.cbSize = sizeof(iwd.ClassInstallHeader);
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+ if (DEVICE_ADDED(gDeviceFlags))
+ {
+ NotifyTSP_ReEnum();
+ }
+#endif // INSTANT_DEVICE_ACTIVATION
+
+ if ( !pdevParams )
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ else if ( !CplDiGetClassInstallParams(hdi, pdevData, PCIPOfPtr(&iwd), sizeof(iwd), NULL) ||
+ DIF_INSTALLWIZARD != iwd.ClassInstallHeader.InstallFunction)
+ {
+ dwRet = ERROR_DI_DO_DEFAULT;
+ }
+ else
+ {
+ PMODEM_INSTALL_WIZARD pmiw = (PMODEM_INSTALL_WIZARD)iwd.PrivateData;
+
+ dwRet = NO_ERROR; // Assume success
+
+ if (pmiw && sizeof(*pmiw) == pmiw->cbSize)
+ {
+ LPSETUPINFO psi = (LPSETUPINFO)pmiw->PrivateData;
+
+ if (psi)
+ {
+ CleanupWizard(psi);
+ }
+ }
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: DIF_SELECTDEVICE handler
+
+Returns: ERROR_DI_DO_DEFAULT
+Cond: --
+*/
+DWORD
+PRIVATE
+ClassInstall_OnSelectDevice(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData) OPTIONAL
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+ SP_SELECTDEVICE_PARAMS sdp;
+
+ DBG_ENTER(ClassInstall_OnSelectDevice);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+
+ // Get the DeviceInstallParams and the ClassInstallParams
+ devParams.cbSize = sizeof(devParams);
+ sdp.ClassInstallHeader.cbSize = sizeof(sdp.ClassInstallHeader);
+
+ if (CplDiGetClassInstallParams(hdi, pdevData, PCIPOfPtr(&sdp), sizeof(sdp), NULL) &&
+ CplDiGetDeviceInstallParams(hdi, pdevData, &devParams) &&
+ DIF_SELECTDEVICE == sdp.ClassInstallHeader.InstallFunction)
+ {
+ SetFlag(devParams.Flags, DI_USECI_SELECTSTRINGS);
+
+ LoadString(g_hinst, IDS_CAP_MODEMWIZARD, sdp.Title, SIZECHARS(sdp.Title));
+ LoadString(g_hinst, IDS_ST_SELECT_INSTRUCT, sdp.Instructions, SIZECHARS(sdp.Instructions));
+ LoadString(g_hinst, IDS_ST_MODELS, sdp.ListLabel, SIZECHARS(sdp.ListLabel));
+
+ // Set the DeviceInstallParams and the ClassInstallParams
+ CplDiSetDeviceInstallParams(hdi, pdevData, &devParams);
+ CplDiSetClassInstallParams(hdi, pdevData, PCIPOfPtr(&sdp), sizeof(sdp));
+ }
+
+ DBG_EXIT(ClassInstall_OnSelectDevice);
+ return ERROR_DI_DO_DEFAULT;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Verifies with the user about the modem that we detected.
+
+ The DeviceInfoData properties is modified based on the
+ user's actions.
+
+Returns: TRUE on success
+ FALSE on error or dialog was cancelled
+
+Cond: --
+*/
+BOOL
+PRIVATE
+AskUserAboutModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN HWND hwndOwner,
+ IN LPCTSTR pszPort)
+ {
+ BOOL bRet;
+ DWORD dwRet;
+ LPSETUPINFO psi;
+ SP_INSTALLWIZARD_DATA iwd; // use this simply as a place holder
+
+ ZeroInit(&iwd);
+
+ dwRet = SetupInfo_Create(&psi, hdi, pdevData, NULL, NULL);
+ if (NO_ERROR != dwRet)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ bRet = CatMultiString(&psi->pszPortList, pszPort);
+ if (bRet)
+ {
+ PROPSHEETHEADER psh;
+
+ // There is only one page in this wizard
+ AddWizardPage(&iwd,
+ g_hinst,
+ IDD_WIZ_FOUND,
+ FoundDlgProc,
+ NULL,
+ (LPARAM)psi);
+
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_PROPTITLE | PSH_WIZARD;
+ psh.hwndParent = hwndOwner;
+ psh.hInstance = g_hinst;
+ psh.pszCaption = MAKEINTRESOURCE(IDS_CAP_MODEMWIZARD);
+ psh.nPages = iwd.NumDynamicPages;
+ psh.nStartPage = 0;
+ psh.phpage = iwd.DynamicPages;
+
+ PropertySheet(&psh);
+
+ // Set the return value according to how the wizard fared
+ if (PSBTN_CANCEL == psi->miw.ExitButton)
+ {
+ SetLastError(ERROR_CANCELLED);
+ bRet = FALSE;
+ }
+ else
+ {
+ bRet = TRUE;
+ }
+ }
+
+ SetupInfo_Destroy(psi);
+ }
+
+ return bRet;
+ }
+
+
+// This structure contains the data useful while querying each port
+typedef struct tagQUERYPARAMS
+ {
+ HDEVINFO hdi;
+ HWND hwnd;
+ HWND hwndOutsideWizard;
+ DWORD dwFlags;
+ HANDLE hLog;
+ PMODEM_DETECT_SIG pmds;
+ PSP_DEVINSTALL_PARAMS pdevParams;
+ DETECTCALLBACK detectcallback;
+ } QUERYPARAMS, FAR * PQUERYPARAMS;
+
+// Flags for QUERYPARAMS
+#define QPF_DEFAULT 0x00000000
+#define QPF_FOUND_MODEM 0x00000001
+#define QPF_USER_CANCELLED 0x00000002
+#define QPF_FIND_DUPS 0x00000004
+#define QPF_CONFIRM 0x00000008
+
+/*----------------------------------------------------------
+Purpose: Clean up any detected modems.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+CleanUpDetectedModems(
+ IN HDEVINFO hdi,
+ IN PQUERYPARAMS pparams)
+ {
+ // Delete any device instances we may have created
+ // during this detection session.
+ SP_DEVINFO_DATA devData;
+ DWORD iDevice = 0;
+
+ devData.cbSize = sizeof(devData);
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ if (CplDiIsModemMarked(pparams->hdi, &devData, MARKF_DETECTED))
+ {
+ CplDiRemoveDevice(hdi, &devData);
+ CplDiDeleteDeviceInfo(hdi, &devData);
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Queries the given port for a modem.
+
+Returns: TRUE to continue
+Cond: --
+*/
+BOOL
+PRIVATE
+ReallyQueryPort(
+ IN PQUERYPARAMS pparams,
+ IN LPCTSTR pszPort)
+ {
+ BOOL bRet;
+ DWORD dwRet;
+ HDEVINFO hdi = pparams->hdi;
+ PMODEM_DETECT_SIG pmds = pparams->pmds;
+ SP_DEVINFO_DATA devData;
+ DWORD iDevice;
+ BOOL bFindDups;
+
+ DBG_ENTER(ReallyQueryPort);
+
+ // Query the port for a modem signature
+ devData.cbSize = sizeof(devData);
+ dwRet = DetectModemOnPort(hdi, &pparams->detectcallback, pparams->hLog,
+ pszPort, pmds, &devData);
+
+ switch (dwRet)
+ {
+ case ERROR_CANCELLED:
+ // User cancelled detection
+ SetFlag(pparams->dwFlags, QPF_USER_CANCELLED);
+
+ // Delete any device instances we may have created
+ // during this detection session.
+ CleanUpDetectedModems(hdi, pparams);
+
+ bRet = FALSE; // Stop querying anymore ports
+ break;
+
+ case NO_ERROR:
+ // Modem may have been found. Create a device instance
+ ASSERT(DetectSig_Validate(pmds));
+ ASSERT(IsFlagSet(pmds->dwMask, MDSM_HARDWAREID));
+ ASSERT(IsFlagSet(pmds->dwMask, MDSM_DEVICEDESC));
+ ASSERT(IsFlagSet(pmds->dwMask, MDSM_PORT));
+
+ bFindDups = IsFlagSet(pparams->dwFlags, QPF_FIND_DUPS);
+
+ // Register the device as a modem device
+ bRet = CplDiRegisterModem(hdi, &devData, pmds, bFindDups, NULL);
+
+ if ( !bRet )
+ {
+ // Is this a duplicate?
+ if (ERROR_DUPLICATE_FOUND == GetLastError())
+ {
+ // Yes; this modem is already installed. Don't try to
+ // reinstall it.
+ TRACE_MSG(TF_GENERAL, "%s is a duplicate modem. We won't install this.", pmds->szDeviceDesc);
+ }
+ else if (IsFlagClear(pparams->pdevParams->Flags, DI_QUIETINSTALL))
+ {
+ // No; something else failed
+ SP_DRVINFO_DATA drvData;
+
+ drvData.cbSize = sizeof(drvData);
+ CplDiGetSelectedDriver(hdi, &devData, &drvData);
+
+ MsgBox(g_hinst,
+ pparams->hwnd,
+ MAKEINTRESOURCE(IDS_ERR_DET_REGISTER_FAILED),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION,
+ drvData.Description, pmds->szPort);
+ }
+
+ CplDiRemoveDevice(hdi, &devData);
+
+ // Continue with detection
+ bRet = TRUE;
+ }
+ else
+ {
+ SetFlag(pparams->dwFlags, QPF_FOUND_MODEM);
+ CplDiMarkModem(pparams->hdi, &devData, MARKF_DETECTED);
+ }
+ break;
+
+ default:
+ // Do nothing
+ bRet = TRUE;
+ break;
+ }
+
+ DBG_EXIT(ReallyQueryPort);
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Callback that queries the given port for a modem.
+
+Returns: TRUE to continue
+Cond: --
+*/
+BOOL
+CALLBACK
+QueryPort(
+ IN HPORTDATA hportdata,
+ IN LPARAM lParam)
+ {
+ BOOL bRet;
+ PORTDATA pd;
+
+ DBG_ENTER(QueryPort);
+
+ pd.cbSize = sizeof(pd);
+ bRet = PortData_GetProperties(hportdata, &pd);
+ if (bRet)
+ {
+ // Is this a serial port?
+ if (PORT_SUBCLASS_SERIAL == pd.nSubclass)
+ {
+ // Yes; interrogate it
+ bRet = ReallyQueryPort((PQUERYPARAMS)lParam, pd.szPort);
+ }
+ }
+
+ DBG_EXIT(QueryPort);
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: DIF_DETECT handler
+
+Returns: NO_ERROR in all cases but serious errors.
+
+ If a modem is detected and confirmed by the user, we
+ create a device instance, register it, and associate
+ the modem detection signature with it.
+
+Cond: --
+*/
+DWORD
+PRIVATE
+ClassInstall_OnDetect(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_DEVINSTALL_PARAMS pdevParams)
+ {
+ DWORD dwRet = NO_ERROR;
+ DETECT_DATA dd;
+
+ DBG_ENTER(ClassInstall_OnDetect);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevParams);
+
+ dd.ClassInstallHeader.cbSize = sizeof(dd.ClassInstallHeader);
+
+ if (NULL == pdevParams)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ else if ( !CplDiGetClassInstallParams(hdi, pdevData, PCIPOfPtr(&dd), sizeof(dd), NULL) ||
+ DIF_DETECT != dd.ClassInstallHeader.InstallFunction)
+ {
+ // Set up some default values
+ dd.hwndOutsideWizard = NULL;
+ dd.dwFlags = DDF_DEFAULT;
+
+ dwRet = NO_ERROR;
+ }
+
+ if (NO_ERROR == dwRet)
+ {
+ MODEM_DETECT_SIG mds;
+ QUERYPARAMS params;
+
+ // Initialize the query instance data
+ DetectSig_Init(&mds, 0, NULL, NULL);
+
+ params.hdi = hdi;
+ params.dwFlags = QPF_DEFAULT;
+ params.hwndOutsideWizard = dd.hwndOutsideWizard;
+ params.hwnd = pdevParams->hwndParent;
+ params.pmds = &mds;
+ params.pdevParams = pdevParams;
+
+ if (IsFlagSet(dd.dwFlags, DDF_USECALLBACK))
+ {
+ params.detectcallback.pfnCallback = dd.pfnCallback;
+ params.detectcallback.lParam = dd.lParam;
+ }
+ else
+ {
+ params.detectcallback.pfnCallback = NULL;
+ params.detectcallback.lParam = 0;
+ }
+
+ if (IsFlagSet(dd.dwFlags, DDF_CONFIRM))
+ {
+ SetFlag(params.dwFlags, QPF_CONFIRM);
+ }
+
+ // Open the detection log
+ params.hLog = OpenDetectionLog();
+
+ // Query just one port?
+ if (IsFlagSet(dd.dwFlags, DDF_QUERY_SINGLE))
+ {
+ // Yes
+ ReallyQueryPort(&params, dd.szPortQuery);
+ }
+ else
+ {
+ // No; enumerate the ports and query for a modem on each port
+ SetFlag(params.dwFlags, QPF_FIND_DUPS);
+
+ EnumeratePorts(QueryPort, (LPARAM)&params);
+ }
+
+ // Did the user cancel detection?
+ if (IsFlagSet(params.dwFlags, QPF_USER_CANCELLED))
+ {
+ // Yes
+ dwRet = ERROR_CANCELLED;
+ }
+
+ // Did we find a modem?
+ else if (IsFlagSet(params.dwFlags, QPF_FOUND_MODEM))
+ {
+ // Yes
+ DetectSetStatus(&params.detectcallback, DSS_FOUND_MODEM);
+
+ // Should we confirm our find(s) with the user?
+ if (IsFlagSet(dd.dwFlags, DDF_CONFIRM))
+ {
+ // Yes
+ DWORD iDevice;
+ SP_DEVINFO_DATA devData;
+
+ devData.cbSize = sizeof(devData);
+ iDevice = 0;
+
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ if (CplDiIsModemMarked(params.hdi, &devData, MARKF_DETECTED))
+ {
+ MODEM_DETECT_SIG mds;
+
+ mds.cbSize = sizeof(mds);
+ CplDiGetDetectSignature(hdi, &devData, &mds);
+
+ if ( !AskUserAboutModem(hdi, &devData,
+ dd.hwndOutsideWizard,
+ mds.szPort) &&
+ ERROR_CANCELLED == GetLastError())
+ {
+ // User cancelled, clean up and stop
+ CleanUpDetectedModems(hdi, &params);
+
+ dwRet = ERROR_CANCELLED;
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ // No
+ DetectSetStatus(&params.detectcallback, DSS_FINISHED);
+ }
+
+ CloseDetectionLog(params.hLog);
+ }
+
+ DBG_EXIT(ClassInstall_OnDetect);
+ return dwRet;
+ }
+
+
+#if !defined(WINNT)
+
+/*----------------------------------------------------------
+Purpose: Writes the contention driver out to the driver key
+ if the device is a single DeviceInstance modem
+ (eg, PCMCIA).
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WriteContention(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN HKEY hkeyDrv)
+ {
+ DWORD dwBusType;
+
+ // Is this a plug and play modem (that is not enumerating via
+ // SERENUM or LPTENUM)?
+ if (CplDiGetBusType(hdi, pdevData, &dwBusType) &&
+ BUS_TYPE_ROOT != dwBusType &&
+ BUS_TYPE_SERENUM != dwBusType &&
+ BUS_TYPE_LPTENUM != dwBusType)
+ {
+ // Yes; does the contention driver exist?
+ if (NO_ERROR != RegQueryValueEx(hkeyDrv, c_szContention, NULL, NULL,
+ NULL, NULL))
+ {
+ // No; use VCD as the contention driver
+ RegSetValueEx(hkeyDrv, c_szContention, 0, REG_SZ, (LPBYTE)c_szVcd,
+ CbFromCch(lstrlen(c_szVcd)+1));
+
+ TRACE_DRV_SZ(c_szContention, c_szVcd);
+ }
+ }
+ }
+
+#endif // WINNT
+
+
+LONG WINAPI
+WriteAnsiStringToReg(
+ HKEY hkey,
+ LPCTSTR EntryName,
+ LPCSTR Value
+ )
+
+{
+
+ LPTSTR WideBuffer;
+ UINT BufferLength;
+ LONG Result;
+
+
+ BufferLength=MultiByteToWideChar(
+ CP_ACP,
+ MB_ERR_INVALID_CHARS,
+ Value,
+ -1,
+ NULL,
+ 0
+ );
+
+ if (BufferLength == 0) {
+
+ return GetLastError();
+ }
+
+ BufferLength=(BufferLength+1)*sizeof(WCHAR);
+
+ WideBuffer=LocalAlloc(LPTR,BufferLength);
+
+ if (NULL == WideBuffer) {
+
+ return ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+ BufferLength=MultiByteToWideChar(
+ CP_ACP,
+ MB_ERR_INVALID_CHARS,
+ Value,
+ -1,
+ WideBuffer,
+ BufferLength
+ );
+
+
+ if (BufferLength == 0) {
+
+ LocalFree(WideBuffer);
+ return GetLastError();
+ }
+
+
+ Result=RegSetValueEx(
+ hkey,
+ EntryName,
+ 0,
+ REG_SZ,
+ (LPBYTE)WideBuffer,
+ CbFromCch(lstrlen(WideBuffer) + 1)
+ );
+
+
+ LocalFree(WideBuffer);
+
+ return Result;
+}
+
+
+/*----------------------------------------------------------
+Purpose: Takes the detection signature of the devince instance
+ and parses it out to the driver key in certain values.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+WriteDetectionInfo(
+ IN PMODEM_DETECT_SIG pmds, OPTIONAL
+ IN HKEY hkeyDrv)
+ {
+ BOOL bRet = TRUE; // Default to success
+
+ // Is there a detection signature at all?
+ if (pmds)
+ {
+ // Yes; do we want to update the device caps?
+ ASSERT(DetectSig_Validate(pmds));
+
+ if (IsFlagSet(pmds->dwFlags, MDSF_UPDATE_DEVCAPS))
+ {
+ // Yes; read in the Properties value
+ DWORD cbData;
+ REGDEVCAPS regdevcaps;
+
+ cbData = sizeof(REGDEVCAPS);
+ if (NO_ERROR == RegQueryValueEx(hkeyDrv, c_szProperties, NULL, NULL,
+ (LPBYTE)&regdevcaps, &cbData))
+ {
+ HKEY hkeySettings;
+
+ // Change the properties value
+ regdevcaps.dwMaxDTERate = pmds->dwMaxDTE;
+ regdevcaps.dwMaxDCERate = pmds->dwMaxDCE;
+
+ // Change the BlindOn or BlindOff settings?
+ if (pmds->szBlindOn[0] && pmds->szBlindOff[0])
+ {
+ // Yes; create or open the Settings key for the settings
+ if (NO_ERROR == RegCreateKey(hkeyDrv, c_szSettings, &hkeySettings))
+ {
+ regdevcaps.dwModemOptions |= MDM_BLIND_DIAL;
+
+ WriteAnsiStringToReg(
+ hkeySettings,
+ c_szBlindOn,
+ pmds->szBlindOn
+ );
+
+ TRACE_MSG(TF_REG, "Set drv value %s based on DetectionInfo", (LPTSTR)c_szBlindOn);
+
+ WriteAnsiStringToReg(
+ hkeySettings,
+ c_szBlindOff,
+ pmds->szBlindOff
+ );
+
+ TRACE_MSG(TF_REG, "Set drv value %s based on DetectionInfo", (LPTSTR)c_szBlindOff);
+
+ RegCloseKey(hkeySettings);
+ }
+ else
+ {
+ TRACE_MSG(TF_WARNING, "The Settings key wasn't opened!");
+ }
+ }
+
+ // Write out the new Properties value
+ cbData = sizeof(REGDEVCAPS);
+ RegSetValueEx(hkeyDrv, c_szProperties, 0, REG_BINARY,
+ (LPBYTE)&regdevcaps, cbData);
+
+ TRACE_MSG(TF_REG, "Set drv value %s based on DetectionInfo", (LPTSTR)c_szProperties);
+
+ bRet = TRUE;
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "Properties key wasn't found!");
+ ASSERT(0);
+
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_DATA);
+ }
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function is a hack fix for international modems
+ (Italian) that do not wait for the dial-tone before
+ dialing.
+
+ It checks for the HKEY_CURRENT_USER\Control Panel\-
+ International\DefaultBlindDialFlag byte value.
+ If this byte value is present and non-zero then we
+ set MDM_BLIND_DIAL.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+HackForStupidIntlModems(
+ IN REGDEVCAPS FAR * pregdevcaps,
+ IN REGDEVSETTINGS FAR * pregdevsettings)
+ {
+ HKEY hkeyIntl;
+ DWORD dwType;
+ BYTE bFlag;
+ DWORD cbData;
+
+ if (NO_ERROR == RegOpenKey(HKEY_CURRENT_USER, TEXT("Control Panel\\International"), &hkeyIntl))
+ {
+ cbData = sizeof(bFlag);
+ if (NO_ERROR == RegQueryValueEx(hkeyIntl, TEXT("DefaultBlindDialFlag"), NULL,
+ &dwType, (LPBYTE)&bFlag, &cbData))
+ {
+ if (cbData == sizeof(bFlag) && bFlag)
+ {
+ pregdevsettings->dwPreferredModemOptions |= (pregdevcaps->dwModemOptions & MDM_BLIND_DIAL);
+ }
+ }
+ RegCloseKey(hkeyIntl);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function writes the Default value to the driver
+ key of the device instance, if no such value exists
+ already.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WriteDefaultValue(
+ IN REGDEVCAPS FAR * pregdevcaps,
+ OUT REGDEVSETTINGS FAR * pregdevsettings,
+ IN HKEY hkeyDrv)
+ {
+ DWORD cbData;
+
+ // Is there a Default value already?
+ cbData = sizeof(REGDEVSETTINGS);
+ if (NO_ERROR == RegQueryValueEx(hkeyDrv, c_szDefault, NULL, NULL,
+ (LPBYTE)pregdevsettings, &cbData))
+ {
+ // Yes; don't do anything
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "Default value already exists");
+#endif
+ }
+ else
+ {
+ // No; create a Default value structure
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "Set drv value Default");
+#endif
+ ZeroInit(pregdevsettings);
+
+ // dwCallSetupFailTimer
+ pregdevsettings->dwCallSetupFailTimer =
+ (pregdevcaps->dwCallSetupFailTimer >=
+ DEFAULT_CALL_SETUP_FAIL_TIMEOUT) ?
+ DEFAULT_CALL_SETUP_FAIL_TIMEOUT :
+ pregdevcaps->dwCallSetupFailTimer;
+
+ // dwInactivityTimeout
+ pregdevsettings->dwInactivityTimeout = 0;
+
+ // dwSpeakerVolume
+ if (IsFlagSet(pregdevcaps->dwSpeakerVolume, MDMVOLFLAG_LOW))
+ {
+ pregdevsettings->dwSpeakerVolume = MDMVOL_LOW;
+ }
+ else if (IsFlagSet(pregdevcaps->dwSpeakerVolume, MDMVOLFLAG_MEDIUM))
+ {
+ pregdevsettings->dwSpeakerVolume = MDMVOL_MEDIUM;
+ }
+ else if (IsFlagSet(pregdevcaps->dwSpeakerVolume, MDMVOLFLAG_HIGH))
+ {
+ pregdevsettings->dwSpeakerVolume = MDMVOL_HIGH;
+ }
+
+ // dwSpeakerMode
+ if (IsFlagSet(pregdevcaps->dwSpeakerMode, MDMSPKRFLAG_DIAL))
+ {
+ pregdevsettings->dwSpeakerMode = MDMSPKR_DIAL;
+ }
+ else if (IsFlagSet(pregdevcaps->dwSpeakerMode, MDMSPKRFLAG_OFF))
+ {
+ pregdevsettings->dwSpeakerMode = MDMSPKR_OFF;
+ }
+ else if (IsFlagSet(pregdevcaps->dwSpeakerMode, MDMSPKRFLAG_CALLSETUP))
+ {
+ pregdevsettings->dwSpeakerMode = MDMSPKR_CALLSETUP;
+ }
+ else if (IsFlagSet(pregdevcaps->dwSpeakerMode, MDMSPKRFLAG_ON))
+ {
+ pregdevsettings->dwSpeakerMode = MDMSPKR_ON;
+ }
+
+ // dwPreferredModemOptions
+ pregdevsettings->dwPreferredModemOptions = pregdevcaps->dwModemOptions &
+ (MDM_COMPRESSION | MDM_ERROR_CONTROL |
+ MDM_SPEED_ADJUST | MDM_TONE_DIAL |
+ MDM_CCITT_OVERRIDE);
+ if (IsFlagSet(pregdevcaps->dwModemOptions, MDM_FLOWCONTROL_HARD))
+ {
+ SetFlag(pregdevsettings->dwPreferredModemOptions, MDM_FLOWCONTROL_HARD);
+ }
+ else if (IsFlagSet(pregdevcaps->dwModemOptions, MDM_FLOWCONTROL_SOFT))
+ {
+ SetFlag(pregdevsettings->dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT);
+ }
+
+ // Set the blind dial for some international modems
+ HackForStupidIntlModems(pregdevcaps, pregdevsettings);
+
+ // Write the new value to the registry
+ cbData = sizeof(REGDEVSETTINGS);
+ RegSetValueEx(hkeyDrv, c_szDefault, 0, REG_BINARY,
+ (LPBYTE)pregdevsettings, cbData);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Computes a "decent" initial baud rate.
+
+Returns: a decent/legal baudrate (legal = settable)
+Cond: --
+*/
+DWORD
+PRIVATE
+ComputeDecentBaudRate(
+ IN DWORD dwMaxDTERate, // will always be legal
+ IN DWORD dwMaxDCERate) // will not always be legal
+ {
+ DWORD dwRetRate;
+ int i;
+ static const ceBaudRates = ARRAYSIZE(s_adwLegalBaudRates);
+
+ // BUGBUG (ccaputo) - Should check for fifo and use high dte if present.
+ // BUGBUG (ccaputo) - Should set dte to around 19200 when fifo is not present, maybe...
+
+ dwRetRate = 2 * dwMaxDCERate;
+
+ if (dwRetRate <= s_adwLegalBaudRates[0] || dwRetRate > s_adwLegalBaudRates[ceBaudRates-1])
+ {
+ dwRetRate = dwMaxDTERate;
+ }
+ else
+ {
+ for (i = 1; i < ceBaudRates; i++)
+ {
+ if (dwRetRate > s_adwLegalBaudRates[i-1] && dwRetRate <= s_adwLegalBaudRates[i])
+ {
+ break;
+ }
+ }
+
+ // cap off at dwMaxDTERate
+ dwRetRate = s_adwLegalBaudRates[i] > dwMaxDTERate ? dwMaxDTERate : s_adwLegalBaudRates[i];
+
+ // optimize up to SAFE_DTE_SPEED or dwMaxDTERate if possible
+ if (dwRetRate < dwMaxDTERate && dwRetRate < SAFE_DTE_SPEED)
+ {
+ dwRetRate = min(dwMaxDTERate, SAFE_DTE_SPEED);
+ }
+ }
+
+ //
+ // limit default baud rate to 57600.
+ // usr 33600 modem seem to have a problem with an initial 115200 rate
+ //
+ if (dwRetRate > 57600) {
+
+ dwRetRate = 57600;
+ }
+
+
+
+
+ // POINTFIX for Win95c:10614
+ // Make it so all 38400 speeds become 19200. This is so that
+ // 14400 thru 19200 modems will not have problems with people not having
+ // a FIFO. We don't fix the 21600 thru 28800 case because we assume that
+ // those users will have better hardware.
+ // Example:
+ // DCE DTE
+ // 14400 -> 19200
+ // 16800 -> 19200
+ // 19200 -> 19200
+ // 21600 -> 57600
+ // 24000 -> 57600
+ // 26400 -> 57600
+ // 28800 -> 57600
+ if (dwRetRate == 38400)
+ {
+ dwRetRate = 19200;
+ }
+
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "A.I. Initial Baud Rate: MaxDCE=%ld, MaxDTE=%ld, A.I. Rate=%ld",
+ dwMaxDCERate, dwMaxDTERate, dwRetRate);
+#endif
+ return dwRetRate;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Write the DCB value to the driver key of the device
+ instance if the value does not already exist.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WriteDCB(
+ IN REGDEVCAPS FAR * pregdevcaps,
+ IN REGDEVSETTINGS FAR * pregdevsettings,
+ IN HKEY hkeyDrv)
+ {
+ DWORD cbData;
+ WIN32DCB dcb;
+
+ // Check for DCB, if none then create one.
+ cbData = sizeof(WIN32DCB);
+ if (NO_ERROR == RegQueryValueEx(hkeyDrv, c_szDCB, NULL, NULL,
+ (LPSTR)&dcb, &cbData))
+ {
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "DCB value already exists");
+#endif
+ }
+ else
+ {
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "Set drv value DCB");
+#endif
+ ZeroInit(&dcb);
+
+ dcb.DCBlength = sizeof(dcb);
+ dcb.BaudRate = ComputeDecentBaudRate(pregdevcaps->dwMaxDTERate,
+ pregdevcaps->dwMaxDCERate);
+ dcb.fBinary = 1;
+ dcb.fDtrControl = DTR_CONTROL_ENABLE;
+ dcb.XonLim = 0xa;
+ dcb.XoffLim = 0xa;
+ dcb.ByteSize = 8;
+ dcb.XonChar = 0x11;
+ dcb.XoffChar = 0x13;
+
+ // Set flow control to hard unless it is specifically set to soft
+ if (IsFlagSet(pregdevsettings->dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT))
+ {
+ ASSERT(IsFlagClear(pregdevsettings->dwPreferredModemOptions, MDM_FLOWCONTROL_HARD));
+ dcb.fOutX = 1;
+ dcb.fInX = 1;
+ dcb.fOutxCtsFlow = 0;
+ dcb.fRtsControl = RTS_CONTROL_DISABLE;
+ }
+ else
+ {
+ dcb.fOutX = 0;
+ dcb.fInX = 0;
+ dcb.fOutxCtsFlow = 1;
+ dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
+ }
+
+ // Write the new value to the registry
+ cbData = sizeof(WIN32DCB);
+ RegSetValueEx(hkeyDrv, c_szDCB, 0, REG_BINARY, (LPBYTE)&dcb, cbData);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates Default and DCB values if necessary.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+WriteDriverDefaults(
+ IN HKEY hkeyDrv)
+ {
+ BOOL bRet;
+ REGDEVCAPS regdevcaps;
+ REGDEVSETTINGS regdevsettings;
+ DWORD cbData;
+
+ // Get the Properties (REGDEVCAPS) structure for this device instance
+ cbData = sizeof(REGDEVCAPS);
+ if (NO_ERROR != RegQueryValueEx(hkeyDrv, c_szProperties, NULL, NULL,
+ (LPBYTE)&regdevcaps, &cbData))
+ {
+ TRACE_MSG(TF_ERROR, "Properties value not present!!! (very bad)");
+ ASSERT(0);
+
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_DATA);
+ }
+ else
+ {
+ // Write the Default value if one doesn't exist
+ WriteDefaultValue(&regdevcaps, &regdevsettings, hkeyDrv);
+
+ // Write the DCB value if one doesn't exist
+ WriteDCB(&regdevcaps, &regdevsettings, hkeyDrv);
+
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns a unique friendly name based on the proposed name.
+ The proposed name *may* already have a " #x" appended to it,
+ since we are now going to start with a best guess at a
+ unique name based on the driver's reference count.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+GetUniqueFriendlyName(
+ OUT LPTSTR pszBuf,
+ IN LPCTSTR pszRawName,
+ IN LPCTSTR pszProposed)
+ {
+ HDEVINFO hdi;
+ BOOL bInstalled;
+
+#ifdef PROFILE_MASSINSTALL
+ DWORD dwTimeStart = GetTickCount();
+#endif
+
+ DBG_ENTER(GetUniqueFriendlyName);
+
+ ASSERT(pszBuf);
+ ASSERT(pszProposed);
+
+ lstrcpy(pszBuf, pszProposed); // Start with the proposed name
+
+ // Create a list of the installed modems, because we will need
+ // to look for existing friendly names that might match the proposed
+ // name.
+ if (CplDiGetModemDevs(&hdi, NULL, 0, &bInstalled))
+ {
+ if (bInstalled)
+ {
+ HKEY hkey;
+ UINT nCount;
+ DWORD iIndex;
+ SP_DEVINFO_DATA devData;
+ MODEM_PRIV_PROP mpp;
+
+ devData.cbSize = sizeof(devData);
+ mpp.cbSize = sizeof(mpp);
+
+ nCount = 2;
+ while (TRUE)
+ {
+ BOOL bRet;
+
+ // Look for a name that is a duplicate of pszProposed.
+ //
+ // This list should be small (realistically few modems
+ // installed per system), so we don't care about the NxN
+ // performance.
+ //
+ // BUGBUG (scotth): the above comment is not necessarily true on
+ // NT, where a machine may have many modems.
+ // We will want to review this.
+
+ for (iIndex = 0;
+ TRUE == (bRet = CplDiEnumDeviceInfo(hdi, iIndex, &devData));
+ iIndex++)
+ {
+ // Get the friendly name value
+ mpp.dwMask = MPPM_FRIENDLY_NAME;
+
+ if (CplDiGetPrivateProperties(hdi, &devData, &mpp))
+ {
+ // Does this friendly name match the proposed name AND
+ // is this DeviceInfoData different from the one we
+ // are currently installing?
+ if (IsFlagSet(mpp.dwMask, MPPM_FRIENDLY_NAME) &&
+ IsSzEqual(pszBuf, mpp.szFriendlyName))
+ {
+ // Yes; found a duplicate
+ break;
+ }
+ }
+ }
+
+ // Was a duplicate name found above?
+ if (bRet)
+ {
+ // Yes; try another "unique" name
+ MakeUniqueName(pszBuf, pszRawName, nCount++);
+
+ if (1000 == nCount) // Safety harness...
+ {
+ ASSERT(0);
+ break;
+ }
+ }
+ else
+ {
+ // No; we're done
+ break;
+ }
+ }
+ }
+
+ CplDiDestroyDeviceInfoList(hdi);
+ }
+
+#ifdef PROFILE_MASSINSTALL
+ g_dwTimeSpent += GetTickCount() - dwTimeStart;
+#endif
+
+ DBG_EXIT(GetUniqueFriendlyName);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Actually writes the modem's friendly name to the
+ device and driver keys in the registry.
+
+Returns: --
+Cond: --
+*/
+VOID
+PRIVATE
+WriteFriendlyNameToRegistry(
+ IN HDEVINFO hdi,
+ IN HKEY hkey,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN LPCTSTR pszName)
+{
+ // Write the friendly name to the driver key.
+ RegSetValueEx(hkey, c_szFriendlyName, 0, REG_SZ, (LPBYTE)pszName,
+ CbFromCch(lstrlen(pszName)+1));
+
+ // Also write the friendly name to the device registry properties so
+ // that other applets (like Services and Devices) can display it.
+ CplDiSetDeviceRegistryProperty(hdi, pdevData, SPDRP_FRIENDLYNAME,
+ (LPBYTE)pszName, CbFromCch(lstrlen(pszName)+1));
+
+}
+
+
+/*----------------------------------------------------------
+Purpose: Writes the friendly name of the modem to the driver key.
+
+ This function returns the friendly name in pszNameBuf,
+ which must be at least MAX_REG_KEY_LEN in size. No
+ size-checking is performed.
+
+ NOTE: in Win95, we wrote the friendly name to the device key.
+ In NT, it is in the driver key.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WriteFriendlyName(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN HKEY hkey,
+ IN LPCTSTR pszRawName,
+ IN LPCTSTR pszProposed,
+ IN LPCTSTR pszPort) OPTIONAL
+ {
+ BYTE nSubclass;
+ DWORD cbData;
+ TCHAR pszNameBuf[MAX_REG_KEY_LEN];
+
+ DBG_ENTER(WriteFriendlyName);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pszProposed);
+ ASSERT(pszNameBuf);
+
+ // Does the friendly name exist yet?
+ cbData = MAX_REG_KEY_LEN;
+ if (NO_ERROR != RegQueryValueEx(hkey, c_szFriendlyName, NULL, NULL,
+ (LPBYTE)pszNameBuf, &cbData))
+ {
+ // No; is this modem installed via AddCables?
+ if (CplDiIsLocalConnection(hdi, pdevData, &nSubclass))
+ {
+ // Yes; write in a friendly name based on our template
+ TCHAR szTemplate[32];
+ UINT ids = (PORT_SUBCLASS_SERIAL == nSubclass ?
+ IDS_SERIAL_TEMPLATE : IDS_PARALLEL_TEMPLATE);
+
+ ASSERT(pszPort);
+ ASSERT(0 != *pszPort);
+
+ LoadString(g_hinst, ids, szTemplate, SIZECHARS(szTemplate));
+ wsprintf(pszNameBuf, szTemplate, pszPort);
+ }
+ else
+ {
+ // No; write in a normal friendly name
+ GetUniqueFriendlyName(pszNameBuf, pszRawName, pszProposed);
+ }
+
+ WriteFriendlyNameToRegistry(hdi, hkey, pdevData, pszNameBuf);
+
+ TRACE_DRV_SZ(c_szFriendlyName, pszNameBuf);
+ }
+
+ DBG_EXIT(WriteFriendlyName);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates a "best guess" at the friendly name for this
+ driver, based on the Responses Key reference count.
+ A modem of this type may have been installed before
+ this reference count was implemented, but this will
+ save of a lot of time otherwise.
+
+NOTE: This function must be called *before* the driver is
+ installed so that it gets the right count appended
+ to the name.
+
+Returns: --
+Cond: --
+*/
+VOID
+PRIVATE
+ProposeFriendlyName(
+ IN PSP_DRVINFO_DATA pdrvData,
+ OUT LPTSTR pszPropose)
+{
+ LONG lErr;
+ HKEY hkeyCmn;
+ DWORD dwRefCount, cbData;
+
+ // Open the key that's common to all devices of this type.
+ if (!OpenCommonDriverKey(NULL, pdrvData, KEY_READ, &hkeyCmn))
+ {
+ TRACE_MSG(TF_WARNING, "OpenCommonDriverKey() couldn't get key name");
+ goto err_exit;
+ }
+
+ // Read the driver's reference count value
+ cbData = sizeof(dwRefCount);
+ lErr = RegQueryValueEx(hkeyCmn, c_szRefCount, NULL, NULL,
+ (LPBYTE)&dwRefCount, &cbData);
+
+ if (lErr == ERROR_SUCCESS)
+ {
+ ASSERT(dwRefCount); // expecting non-0 ref count
+ ASSERT(cbData == sizeof(DWORD)); // expecting DWORD ref count
+ }
+ else
+ {
+ if (lErr == ERROR_FILE_NOT_FOUND)
+ goto err_exit; // done: proposal = description
+ else
+ {
+ // some error other than key doesn't exist
+ TRACE_MSG(TF_ERROR, "RegQueryValueEx(RefCount) failed: %#08lx.", lErr);
+ goto err_exit;
+ }
+ }
+
+ MakeUniqueName(pszPropose, pdrvData->Description, ++dwRefCount);
+ return;
+
+err_exit:
+
+ // Something failed...just propose the description.
+ lstrcpy(pszPropose, pdrvData->Description);
+}
+
+
+#ifdef FULL_PNP
+
+/*----------------------------------------------------------
+Purpose: Write necessary stuff to the registry assuming this
+ is an external PNP modem discovered by SERENUM or
+ LPTENUM.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+WritePoorPNPModemInfo(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN HKEY hkeyDrv)
+ {
+#ifdef WIN95
+ static TCHAR const FAR c_szRegstrPathEnum[] = REGSTR_PATH_SYSTEMENUM;
+#endif
+
+ BOOL bRet;
+ TCHAR szName[MAX_REG_KEY_LEN];
+ DWORD cbData;
+ BYTE nDeviceType;
+ HKEY hkeyPort;
+ LPTSTR psz;
+
+ TRACE_MSG(TF_GENERAL, "Device is an external PnP modem");
+
+#ifdef WIN95
+ // Get the COM port and add it as the AttachedTo value
+ // in the driver key.
+
+ // The instance name of the hardware node is actually the
+ // path to the port that the modem is connected to.
+ // It follows the format: ROOT&*PNP0500&0000. We simply
+ // need to convert the & to \ in that string, open that
+ // node, and get the PortName.
+ lstrcpy(szName, c_szRegstrPathEnum);
+ lstrcat(szName, c_szBackSlash);
+ lstrcat(szName, StrFindInstanceName(pszRegPath));
+ for (psz = szName; *psz; psz++)
+ {
+ if ('&' == *psz)
+ *psz = '\\';
+ }
+
+ // (We can re-use szName to get the port name value)
+ cbData = sizeof(szName);
+ if (NO_ERROR == RegOpenKey(HKEY_LOCAL_MACHINE, szName, &hkeyPort) &&
+ NO_ERROR == RegQueryValueEx(hkeyPort, c_szPortName, NULL, NULL, szName, &cbData))
+ {
+ // Write out as the AttachedTo value in the driver node
+ RegSetValueEx(hkeyDrv, c_szAttachedTo, 0, REG_SZ, szName, cbData);
+
+ TRACE_DRV_SZ(c_szAttachedTo, szName);
+
+ RegCloseKey(hkeyPort);
+ }
+#else
+ bRet = TRUE;
+#endif
+
+ // Be smart--we know this is an external modem
+ nDeviceType = DT_EXTERNAL_MODEM;
+ RegSetValueEx(hkeyDrv, c_szDeviceType, 0, REG_BINARY, &nDeviceType, sizeof(nDeviceType));
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Write necessary stuff to the registry assuming this
+ is a plug and play modem.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+WritePNPModemInfo(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN HKEY hkeyDrv,
+ IN DWORD dwBusType)
+ {
+ BYTE nDeviceType;
+
+ // Make sure the port and contention drivers are set in the
+ // modem driver section if they are not already.
+ TRACE_MSG(TF_GENERAL, "Device is a PnP enumerated modem");
+
+#if !defined(WINNT)
+ if (NO_ERROR != RegQueryValueEx(hkeyDrv, c_szPortDriver, NULL, NULL, NULL, NULL))
+ {
+ RegSetValueEx(hkeyDrv, c_szPortDriver, 0, REG_SZ, (LPBYTE)c_szSerialVxd,
+ CbFromCch(lstrlen(c_szSerialVxd)+1));
+
+ TRACE_DRV_SZ(c_szPortDriver, c_szSerialVxd);
+ }
+#endif
+
+ // Is this a PCMCIA card?
+ if (BUS_TYPE_PCMCIA == dwBusType)
+ {
+ // Yes; force the device type to be such
+ nDeviceType = DT_PCMCIA_MODEM;
+ }
+ else
+ {
+ // No; default to internal modem
+ nDeviceType = DT_INTERNAL_MODEM;
+ }
+ RegSetValueEx(hkeyDrv, c_szDeviceType, 0, REG_BINARY, &nDeviceType, sizeof(nDeviceType));
+
+ TRACE_DRV_DWORD(c_szDeviceType, nDeviceType);
+
+ // Does this modem have a special port config dialog already?
+ if (NO_ERROR != RegQueryValueEx(hkeyDrv, c_szPortConfigDialog, NULL, NULL, NULL, NULL))
+ {
+ // No; set SERIALUI to be the provider
+ RegSetValueEx(hkeyDrv, c_szPortConfigDialog, 0, REG_SZ,
+ (LPBYTE)c_szSerialUI, CbFromCch(lstrlen(c_szSerialUI)+1));
+
+ TRACE_DRV_SZ(c_szPortConfigDialog, c_szSerialUI);
+ }
+
+ return TRUE;
+ }
+
+#endif // FULL_PNP
+
+
+/*----------------------------------------------------------
+Purpose: Write necessary stuff to the registry assuming this
+ is a root-enumerated modem.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PRIVATE
+WriteRootModemInfo(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PMODEM_DETECT_SIG pmds, OPTIONAL
+ IN HKEY hkeyDrv)
+ {
+ BOOL bRet;
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+
+ TRACE_MSG(TF_GENERAL, "Device is a root-enumerated modem");
+
+ // For root-enumerated modems, there should always be a modem
+ // detection signature. The signature is used to determined
+ // (among other things) which port the modem is attached to.
+
+ if ( !pmds )
+ {
+ // It is not a very good sign that the detection signature
+ // is missing. However, we should still complete the
+ // installation, since the only thing that will be missing
+ // is the AttachedTo string. The user can set this via
+ // the property page.
+
+ TRACE_MSG(TF_ERROR, "Detection signature does not exist.");
+ ASSERT(0);
+
+ bRet = TRUE; // Against my better judgement...
+ }
+ else
+ {
+ // The detection signature was validated by the caller
+ ASSERT(DetectSig_Validate(pmds));
+
+ // The port name should have been set
+ ASSERT(IsFlagSet(pmds->dwMask, MDSM_PORT));
+
+ // Set the AttachedTo value now
+ RegSetValueEx(hkeyDrv, c_szAttachedTo, 0, REG_SZ, (LPBYTE)pmds->szPort,
+ CbFromCch(lstrlen(pmds->szPort)+1));
+
+ TRACE_DRV_SZ(c_szAttachedTo, pmds->szPort);
+
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Write stuff to the registry that is common for all
+ modems.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PRIVATE
+WriteCommonModemInfo(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DRVINFO_DATA pdrvData,
+ IN PMODEM_DETECT_SIG pmds, OPTIONAL
+ IN HKEY hkeyDrv)
+ {
+ DWORD dwID;
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pdrvData);
+
+ // Write the manufacturer to the driver key
+ RegSetValueEx(hkeyDrv, c_szManufacturer, 0, REG_SZ, (LPBYTE)pdrvData->MfgName,
+ CbFromCch(lstrlen(pdrvData->MfgName)+1));
+
+#ifndef PROFILE_MASSINSTALL
+ TRACE_DRV_SZ(c_szManufacturer, pdrvData->MfgName);
+#endif
+
+ // Write the model to the driver key
+ RegSetValueEx(hkeyDrv, c_szModel, 0, REG_SZ, (LPBYTE)pdrvData->Description,
+ CbFromCch(lstrlen(pdrvData->Description)+1));
+
+#ifndef PROFILE_MASSINSTALL
+ TRACE_DRV_SZ(c_szModel, pdrvData->Description);
+#endif
+
+ // Write a pseudo-unique ID to the driver key. This is used as the
+ // permanent TAPI line ID for this device.
+ dwID = GetTickCount();
+ RegSetValueEx(hkeyDrv, c_szID, 0, REG_BINARY, (LPBYTE)&dwID, sizeof(dwID));
+
+#ifndef PROFILE_MASSINSTALL
+ TRACE_DRV_DWORD(c_szID, dwID);
+#endif
+
+ return TRUE;
+ }
+
+
+#if defined(WINNT)
+
+//
+// Define the "Ports" class GUID in string form here, to avoid pulling in GUID
+// manipulation routines.
+//
+#define PORTS_CLASS_GUID_STRING (TEXT("{4D36E978-E325-11CE-BFC1-08002BE10318}"))
+
+/*----------------------------------------------------------
+Purpose: This function transforms the specified PnP ISA modem
+ device information element into a serial port device,
+ and then creates a new device information element for
+ the modem that is more palatable to the modem class
+ installer.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+GenerateStdModemFromPnpIsaModem(
+ IN HDEVINFO hdi,
+ IN OUT PSP_DEVINFO_DATA *ppdevData,
+ IN OUT PSP_DEVINSTALL_PARAMS pdevParams,
+ IN OUT PSP_DRVINFO_DATA pdrvData,
+ IN OUT HKEY *phkeyDrv // set to INVALID_HANDLE_VALUE upon return if error
+ )
+{
+ HKEY hDeviceKey;
+ TCHAR PortName[MAX_BUF_SHORT];
+ DWORD PortNameSize, Err;
+ PSP_DEVINFO_DATA NewDevInfoData;
+ PSP_DRVINFO_DETAIL_DATA DrvInfoDetailData;
+ DWORD DrvInfoDetailDataSize;
+ BOOL Success = FALSE;
+ TCHAR NewDeviceId[MAX_DEVICE_ID_LEN];
+ SP_DEVINSTALL_PARAMS NewDevInstallParams;
+ MODEM_DETECT_SIG DetectSignature;
+
+ //
+ // Before we convert this modem into a COM port, we need to retrieve information about
+ // the modem driver node currently selected for it.
+ // (Start out with an initial buffer size large enough to hold a single, maximum-sized,
+ // device ID.)
+ //
+ DrvInfoDetailDataSize = sizeof(SP_DRVINFO_DETAIL_DATA) + (200 * sizeof(TCHAR));
+ while(TRUE) {
+
+ if(!(DrvInfoDetailData = LocalAlloc(LPTR, DrvInfoDetailDataSize))) {
+ TRACE_MSG(TF_ERROR, "Couldn't allocate memory for driver details on PnP ISA modem.");
+ return FALSE;
+ }
+
+ DrvInfoDetailData->cbSize = sizeof(SP_DRVINFO_DETAIL_DATA);
+ if(CplDiGetDriverInfoDetail(hdi,
+ *ppdevData,
+ pdrvData,
+ DrvInfoDetailData,
+ DrvInfoDetailDataSize,
+ &DrvInfoDetailDataSize)) {
+ break;
+ }
+
+ LocalFree(DrvInfoDetailData);
+
+ if((Err = GetLastError()) != ERROR_INSUFFICIENT_BUFFER) {
+ TRACE_MSG(TF_ERROR, "Couldn't get driver details for PnP ISA modem. Error = %#08lx.", Err);
+ return FALSE;
+ }
+ }
+
+ //
+ // Close the driver key handle, since it will be invalid after changing the device's class.
+ //
+ RegCloseKey(*phkeyDrv);
+ *phkeyDrv = INVALID_HANDLE_VALUE;
+
+ //
+ // Get rid of any driver lists associated with this device.
+ //
+ CplDiDestroyDriverInfoList(hdi, *ppdevData, SPDIT_CLASSDRIVER);
+ CplDiDestroyDriverInfoList(hdi, *ppdevData, SPDIT_COMPATDRIVER);
+
+ //
+ // For NT SUR, the modem class installer can only handle modems as things
+ // that hang off of COM ports. So we're going to turn this PnP ISA modem
+ // into a device of class "Ports", and hand it off to the Ports class
+ // installer to be configured.
+ //
+ // Hard-code the string representation for the Ports class GUID, so we don't
+ // have to pull in GUID manipulation routines.
+ //
+ if(!CplDiSetDeviceRegistryProperty(hdi,
+ *ppdevData,
+ SPDRP_CLASSGUID,
+ (PBYTE)PORTS_CLASS_GUID_STRING,
+ sizeof(PORTS_CLASS_GUID_STRING))) {
+
+ TRACE_MSG(TF_ERROR, "Couldn't change PnP ISA modem to class 'Ports'. Error = %#08lx.", GetLastError());
+ goto clean0;
+ }
+
+ //
+ // OK, now we can pass this device instance off to the Ports class installer and
+ // let him install/configure it.
+ //
+ if(!CplDiCallClassInstaller(DIF_INSTALLDEVICE, hdi, *ppdevData)) {
+ TRACE_MSG(TF_ERROR, "Couldn't install PnP ISA modem as a COM port. Error = %#08lx.", GetLastError());
+ goto clean0;
+ }
+
+ //
+ // COM port was installed successfully--retrieve the port name that was assigned.
+ //
+ if((hDeviceKey = CplDiOpenDevRegKey(hdi,
+ *ppdevData,
+ DICS_FLAG_GLOBAL,
+ 0,
+ DIREG_DEV,
+ KEY_READ)) == INVALID_HANDLE_VALUE) {
+
+ TRACE_MSG(TF_ERROR, "Couldn't open device key for new PnP ISA COM port. Error = %#08lx.", GetLastError());
+ goto clean0;
+ }
+
+ PortNameSize = sizeof(PortName);
+ Err = RegQueryValueEx(hDeviceKey,
+ REGSTR_VAL_PORTNAME,
+ NULL,
+ NULL,
+ (PBYTE)PortName,
+ &PortNameSize
+ );
+
+ RegCloseKey(hDeviceKey);
+
+ if(Err != ERROR_SUCCESS) {
+ TRACE_MSG(TF_ERROR, "Couldn't get PortName value for new PnP ISA COM port. Error = %#08lx.", Err);
+ goto clean0;
+ }
+
+ //
+ // Generate a simple device ID (i.e. to be placed under Enum\Root) for our new modem device.
+ //
+ if(!CplDiCopyScrubbedHardwareID(NewDeviceId, DrvInfoDetailData->HardwareID, sizeof(NewDeviceId))) {
+ TRACE_MSG(TF_ERROR, "Couldn't get a device ID for our new modem.");
+ goto clean0;
+ }
+
+ //
+ // We can now proceed to manufacture a new device information element that matches the
+ // characteristics of a modem detected on the port created by the Ports class installer.
+ //
+ if(!(NewDevInfoData = LocalAlloc(LPTR, sizeof(SP_DEVINFO_DATA)))) {
+ TRACE_MSG(TF_ERROR, "Couldn't allocate a legacy modem device for new PnP ISA COM port.");
+ goto clean0;
+ }
+
+ NewDevInfoData->cbSize = sizeof(SP_DEVINFO_DATA);
+ if(!CplDiCreateDeviceInfo(hdi,
+ NewDeviceId,
+ g_pguidModem,
+ NULL,
+ pdevParams->hwndParent, // use the same parent window as the enumerated device
+ DICD_GENERATE_ID,
+ NewDevInfoData)) {
+
+ TRACE_MSG(TF_ERROR, "Couldn't create new modem device on PnP ISA COM port. Error = %#08lx.", GetLastError());
+ goto clean1;
+ }
+
+ //
+ // Retrieve the device installation parameters for this new device so that we can modify them.
+ //
+ NewDevInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
+ if(!CplDiGetDeviceInstallParams(hdi, NewDevInfoData, &NewDevInstallParams)) {
+ TRACE_MSG(TF_ERROR, "Couldn't get device install params for new modem device. Error = %#08lx.", GetLastError());
+ goto clean2;
+ }
+
+ //
+ // Merge in flags from the COM port's device install parameters.
+ //
+ NewDevInstallParams.Flags |= (pdevParams->Flags & ~DI_CLASSINSTALLPARAMS);
+ NewDevInstallParams.FlagsEx |= pdevParams->FlagsEx;
+
+ //
+ // Set up the parameters so that we explicitly build our driver list from the INF where our driver
+ // node is located.
+ //
+ NewDevInstallParams.Flags |= DI_ENUMSINGLEINF;
+ lstrcpy(NewDevInstallParams.DriverPath, DrvInfoDetailData->InfFileName);
+
+ //
+ // Now store the new parameters in the device information element.
+ //
+ if(!CplDiSetDeviceInstallParams(hdi, NewDevInfoData, &NewDevInstallParams)) {
+ TRACE_MSG(TF_ERROR, "Couldn't set device install params for new modem device. Error = %#08lx.", GetLastError());
+ goto clean2;
+ }
+
+ //
+ // Build a class driver list for this new device...
+ //
+ if(!CplDiBuildDriverInfoList(hdi, NewDevInfoData, SPDIT_CLASSDRIVER)) {
+ TRACE_MSG(TF_ERROR, "Couldn't build class driver list for new modem device. Error = %#08lx.", GetLastError());
+ goto clean2;
+ }
+
+ //
+ // ... and select the same driver node within it that was previously selected for the PnP ISA modem.
+ //
+ pdrvData->Reserved = 0;
+ pdrvData->DriverType = SPDIT_CLASSDRIVER;
+ if(!CplDiSetSelectedDriver(hdi, NewDevInfoData, pdrvData)) {
+ TRACE_MSG(TF_ERROR, "Couldn't find driver node for new modem device. Error = %#08lx.", GetLastError());
+ goto clean2;
+ }
+
+ //
+ // OK, now we need to remove the DI_ENUMSINGLEINF flag, otherwise the device installer won't copy over
+ // the INF if it's from an OEM location (i.e., floppy). It's no biggie if this fails--it just means
+ // that the user will have to supply the floppy again in the future, if for some reason they need to
+ // re-install this modem.
+ //
+ NewDevInstallParams.Flags &= ~DI_ENUMSINGLEINF;
+ CplDiSetDeviceInstallParams(hdi, NewDevInfoData, &NewDevInstallParams);
+
+ //
+ // Now it's time to build the detection signature for this device.
+ //
+ DetectSig_Init(&DetectSignature, 0, NewDeviceId, PortName);
+
+ //
+ // Register this new modem device.
+ //
+ if(!CplDiRegisterModem(hdi, NewDevInfoData, &DetectSignature, TRUE, NULL)) {
+ TRACE_MSG(TF_ERROR, "Couldn't register new modem device on PnP ISA COM port.");
+ goto clean2;
+ }
+
+ //
+ // Now open up a driver key for this new device.
+ //
+ if((*phkeyDrv = CplDiCreateDevRegKey(hdi,
+ NewDevInfoData,
+ DICS_FLAG_GLOBAL,
+ 0,
+ DIREG_DRV,
+ NULL,
+ NULL)) == INVALID_HANDLE_VALUE) {
+
+ TRACE_MSG(TF_ERROR, "Couldn't open driver key for new modem device. Error = %#08lx.", GetLastError());
+
+ //
+ // Since we've already registered this device, simply deleting the device information element
+ // won't make it go away. We've got to explicitly remove it.
+ //
+ CplDiRemoveDevice(hdi, NewDevInfoData);
+ goto clean2;
+ }
+
+ //
+ // If we get to here, then we've successfully created a new modem device that's ready to be installed.
+ // Update the remaining output parameters to reflect the new device information.
+ //
+ *ppdevData = NewDevInfoData;
+ CopyMemory(pdevParams, &NewDevInstallParams, sizeof(SP_DEVINSTALL_PARAMS));
+
+ Success = TRUE;
+ goto clean0;
+
+clean2:
+ CplDiDeleteDeviceInfo(hdi, NewDevInfoData);
+
+clean1:
+ LocalFree(NewDevInfoData);
+
+clean0:
+ LocalFree(DrvInfoDetailData);
+
+ return Success;
+}
+#endif // WINNT
+
+
+/*----------------------------------------------------------
+Purpose: Returns a friendly name that is guaranteed to be
+ unique. Used only for the mass install case, where
+ the set of *used* friendly name instance numbers
+ has already been generated.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+GetMassInstallFriendlyName(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DRVINFO_DATA pdrvData,
+ OUT LPTSTR pszPropose)
+{
+ BOOL bRet;
+ SP_DRVINSTALL_PARAMS drvParams;
+ UINT ii;
+
+ drvParams.cbSize = sizeof(drvParams);
+ bRet = CplDiGetDriverInstallParams(hdi, pdevData, pdrvData, &drvParams);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetDriverInstallParams() failed: %#08lx",
+ GetLastError());
+ goto exit;
+ }
+
+ for (ii = 1;
+ (ii < MAX_INSTALLATIONS) && ((WORD*)(drvParams.PrivateData))[ii];
+ ii++)
+ ;
+
+ switch (ii)
+ {
+ case MAX_INSTALLATIONS:
+ bRet = FALSE; // ???: what to do with this problem?
+ goto exit;
+
+ case 1:
+ lstrcpy(pszPropose, pdrvData->Description);
+ break;
+
+ default:
+ MakeUniqueName(pszPropose, pdrvData->Description, ii);
+ break;
+ }
+
+ // Mark the instance number we just used as used.
+ ((WORD*)(drvParams.PrivateData))[ii] = TRUE;
+
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function performs any preparation work required
+ before the real installation is done.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+DoPreGamePrep(
+ IN HDEVINFO hdi,
+ IN OUT PSP_DEVINFO_DATA *ppdevData, // if updated on exit, must be freed!
+ IN OUT PSP_DEVINSTALL_PARAMS pdevParams,
+ IN OUT PSP_DRVINFO_DATA pdrvData,
+ IN OUT HKEY *phkeyDrv,
+ IN OUT LPDWORD lpdwRegType)
+ {
+ BOOL bRet;
+ DWORD dwBusType;
+ MODEM_DETECT_SIG mdsT;
+ PMODEM_DETECT_SIG pmds;
+
+ DBG_ENTER(DoPreGamePrep);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(ppdevData && *ppdevData);
+ ASSERT(pdrvData);
+ ASSERT(phkeyDrv && *phkeyDrv);
+
+ // NOTE: we must do this 1st thing, because the cached copy will have
+ // have settings which need to be overritten, eg the attached-to port.
+ if (*lpdwRegType==MARKF_REGUSECOPY)
+ {
+ if (!GetStuffFromCache(*phkeyDrv))
+ {
+ // Oh oh something happened -- fall back to old behaviour.
+ *lpdwRegType=0;
+ }
+ }
+ // BUGBUG: (performance) possibility of not saving some stuff ahead
+ // because it's already copied over from the cache
+
+ //
+ // Get the bus type (we must do this first, since on NT, we need to pass this
+ // device off to the Ports class installer if it's a PnP ISA modem).
+ //
+ if(!CplDiGetBusType(hdi, *ppdevData, &dwBusType)) {
+ return FALSE;
+ }
+
+#if defined(WINNT)
+ if(dwBusType == BUS_TYPE_OTHER) {
+ if(!GenerateStdModemFromPnpIsaModem(hdi, ppdevData, pdevParams, pdrvData, phkeyDrv)) {
+ return FALSE;
+ }
+ //
+ // From this point forward, the device instance we're working with is a legacy
+ // device instance (i.e., treated as a detected modem sitting on a COM port.
+ //
+ dwBusType = BUS_TYPE_ROOT;
+ }
+#endif // WINNT
+
+#if !defined(WINNT)
+ // Win95 requires that if we're installing a single-devinst modem
+ // (PCMCIA modems fall into this category), then we need to write
+ // the contention handler out before we install. That way the
+ // configuration manager will know who to call to handle resource
+ // contention issues when installing the device.
+
+ WriteContention(hdi, *ppdevData, *phkeyDrv);
+#endif
+
+ // Get the detection signature
+ mdsT.cbSize = sizeof(mdsT);
+ bRet = CplDiGetDetectSignature(hdi, *ppdevData, &mdsT);
+ if ( !bRet )
+ {
+ TRACE_MSG(TF_ERROR, "Detection signature does not exist. Error = %#08lx.", GetLastError());
+
+ pmds = NULL;
+ }
+ else
+ {
+ // Validate our detection signature
+ if ( !DetectSig_Validate(&mdsT) )
+ {
+ // Wrong size
+ TRACE_MSG(TF_ERROR, "Modem detection signature is invalid!");
+ ASSERT(0);
+
+ pmds = NULL;
+ }
+ else
+ {
+ pmds = &mdsT;
+ }
+ }
+
+#ifdef FULL_PNP
+ // Is this a plug and play modem?
+ if (BUS_TYPE_SERENUM == dwBusType || BUS_TYPE_LPTENUM == dwBusType)
+ {
+ // Yes; it is an external (poor man's) plug and play modem
+ bRet = WritePoorPNPModemInfo(hdi, *ppdevData, *phkeyDrv);
+ }
+ else if (BUS_TYPE_ROOT != dwBusType)
+ {
+ // Yes
+ bRet = WritePNPModemInfo(hdi, *ppdevData, *phkeyDrv, dwBusType);
+ }
+ else
+#endif
+ {
+ ASSERT(BUS_TYPE_ROOT == dwBusType);
+
+ // No; the modem has already been attached (detected
+ // or manually selected)
+ bRet = WriteRootModemInfo(hdi, *ppdevData, pmds, *phkeyDrv);
+ }
+
+ if (bRet)
+ {
+ LPTSTR pszPortBuf;
+ TCHAR szProposed[LINE_LEN+12]; // sizeof Description + room for " #xxx"
+
+ if (pmds)
+ {
+ pszPortBuf = pmds->szPort;
+ }
+ else
+ {
+ pszPortBuf = NULL;
+ }
+
+ // Write the friendly name to the driver key
+ // WARNING: these calls must be done *before* the driver is
+ // installed in order to get the appropriate # appended
+ // to the friendly name.
+ if (CplDiIsModemMarked(hdi, *ppdevData, MARKF_MASS_INSTALL))
+ {
+ GetMassInstallFriendlyName(hdi, *ppdevData, pdrvData, szProposed);
+ WriteFriendlyNameToRegistry(hdi, *phkeyDrv, *ppdevData, szProposed);
+ }
+ else
+ {
+ ProposeFriendlyName(pdrvData, szProposed);
+ WriteFriendlyName(hdi, *ppdevData, *phkeyDrv, pdrvData->Description,
+ szProposed, pszPortBuf);
+ }
+
+ // Write the dynamic info to the registry that is
+ // common to all modems.
+ bRet = WriteCommonModemInfo(hdi, *ppdevData, pdrvData, pmds, *phkeyDrv);
+ }
+
+ DBG_EXIT(DoPreGamePrep);
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Clean out obsolete values that are added by some
+ inf files.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WipeObsoleteValues(
+ IN HKEY hkeyDrv)
+ {
+#ifdef WINNT
+ // These values are not used on NT
+
+#pragma data_seg(DATASEG_READONLY)
+ static TCHAR const FAR s_szDevLoader[] = TEXT("DevLoader");
+ static TCHAR const FAR s_szEnumPropPages[] = TEXT("EnumPropPages");
+ static TCHAR const FAR s_szFriendlyDriver[] = TEXT("FriendlyDriver");
+#pragma data_seg()
+
+ RegDeleteValue(hkeyDrv, s_szDevLoader); // used by VCOMM
+ RegDeleteValue(hkeyDrv, s_szEnumPropPages); // used by device mgr
+ RegDeleteValue(hkeyDrv, s_szFriendlyDriver); // used by VCOMM
+ RegDeleteValue(hkeyDrv, c_szContention); // used by VCOMM
+
+#endif
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function moves the device's Responses key to
+ a location that is common to all modems of the same
+ type.
+
+Returns: TRUE if success, FALSE otherwise.
+Cond: --
+*/
+BOOL
+PRIVATE
+MoveResponsesKey(
+ IN HKEY hkeyDrv, BOOL fNotReally)
+ {
+ BOOL bRet = FALSE; // assume failure
+ LONG lErr;
+ HKEY hkeyDrvResp = NULL;
+ HKEY hkeyComResp = NULL;
+
+ WCHAR achClass[MAX_PATH];
+ DWORD cchClassName = MAX_PATH;
+ DWORD cSubKeys, cbMaxSubKey, cchMaxClass;
+ DWORD cValues, cchValue, cbData, cbSecDesc;
+ FILETIME ftLastWrite;
+
+ LPTSTR lpValue = NULL;
+ LPBYTE lpData = NULL;
+ DWORD ii, dwValueLen, dwType, dwDataLen, dwExisted;
+
+ // Create the Responses key that's common to all devices of this type.
+ if (!OpenCommonResponsesKey(hkeyDrv, CKFLAG_CREATE, KEY_WRITE,
+ &hkeyComResp, &dwExisted))
+ {
+ TRACE_MSG(TF_ERROR, "OpenCommonResponsesKey() failed.");
+ ASSERT(0);
+ goto final_exit;
+ }
+
+ if (fNotReally)
+ {
+ if (dwExisted == REG_OPENED_EXISTING_KEY)
+ {
+ bRet = TRUE;
+ }
+ else
+ {
+ // Since we won't be creating the key or moving the responses
+ // here, we're in serious trouble if the common responses didn't
+ // already exist! We expect a previous devince install to have put
+ // it there.
+ ASSERT(FALSE);
+ }
+ goto exit;
+ }
+
+// Allow subsequent installations to upgrade the Responses key.
+// As an optimization, we might want to avoid the upgrade when one modem
+// is being installed on > 1 port in one install operation. However this
+// isn't deemed to be worth it at this time....
+#if 0
+ // If the key already existed, we can assume that the Responses values
+ // have already been written there successfully and we're done.
+ if (dwExisted == REG_OPENED_EXISTING_KEY)
+ {
+ bRet = TRUE;
+ goto exit;
+ }
+#endif
+
+ // Open the Responses subkey of the driver key.
+ lErr = RegOpenKeyEx(hkeyDrv, c_szResponses, 0, KEY_READ, &hkeyDrvResp);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegOpenKeyEx() failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Determine the sizes of the values & data in the Responses key.
+ lErr = RegQueryInfoKey(hkeyDrvResp, achClass, &cchClassName, NULL, &cSubKeys,
+ &cbMaxSubKey, &cchMaxClass, &cValues, &cchValue, &cbData, &cbSecDesc,
+ &ftLastWrite);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegQueryInfoKey() failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Not expecting Responses key to have any subkeys!
+ ASSERT(cSubKeys == 0);
+
+ // Value from RegQueryInfoKey() didn't include NULL-terminating character.
+ cchValue++;
+
+ // Allocate necessary space for Value and Data buffers. Convert cchValue
+ // character count to byte count, allowing for DBCS (double-byte chars).
+ if ((lpValue = (LPTSTR)LocalAlloc(LPTR, cchValue << 1)) == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ ASSERT(0);
+ goto exit;
+ }
+
+ if ((lpData = (LPBYTE)LocalAlloc(LPTR, cbData)) == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Enumerate driver Responses values and write them
+ // to the common Responses key.
+ ii = 0;
+ dwValueLen = cchValue;
+ dwDataLen = cbData;
+ while ((lErr = RegEnumValue( hkeyDrvResp,
+ ii,
+ lpValue,
+ &dwValueLen,
+ NULL,
+ &dwType,
+ lpData,
+ &dwDataLen )) != ERROR_NO_MORE_ITEMS)
+ {
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegEnumValue() failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ lErr = RegSetValueEx(hkeyComResp, lpValue, 0, dwType, lpData, cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegSetValueEx() failed: %#08lx.", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Set params for next enumeration
+ ii++;
+ dwValueLen = cchValue;
+ dwDataLen = cbData;
+ }
+
+ bRet = TRUE;
+
+exit:
+
+ if (hkeyDrvResp)
+ RegCloseKey(hkeyDrvResp);
+
+ if (hkeyComResp)
+ RegCloseKey(hkeyComResp);
+
+ if (lpValue)
+ LocalFree(lpValue);
+
+ if (lpData)
+ LocalFree(lpData);
+
+ // If the move operation was successful then delete the original driver
+ // Responses key. If the move operation failed then delete the common
+ // Responses key (or decrement its reference count). This ensures that
+ // if the common Responses key exists, it is complete.
+ if (bRet)
+ {
+ if (!fNotReally)
+ {
+ lErr = RegDeleteKey(hkeyDrv, c_szResponses);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegDeleteKey(driver Responses) failed: %#08lx.", lErr);
+ ASSERT(0);
+ }
+ }
+ }
+ else
+ {
+ if (!fNotReally && !DeleteCommonDriverKey(hkeyDrv))
+ {
+ TRACE_MSG(TF_ERROR, "DeleteCommonDriverKey() failed.");
+ // failure here just means the common key is left around
+ }
+ }
+
+final_exit:
+
+ return(bRet);
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function does some things after the device is
+ installed. Note this function should not be used to
+ add things to the driver key that are needed for the
+ device to work. The reason is because the device
+ is activated in SetupDiInstallDevice -- the device
+ should be ready by then.
+
+Returns: NO_ERROR
+Cond: --
+*/
+BOOL
+PRIVATE
+DoPostGameWrapup(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DEVINSTALL_PARAMS pdevParams,
+ IN HKEY hkeyDrv,
+ IN OUT LPDWORD lpdwRegType)
+ {
+ BOOL bRet, bResponses;
+ DWORD dwBusType;
+
+ DBG_ENTER(DoPostGameWrapup);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pdevParams);
+ ASSERT(hkeyDrv);
+
+
+ // If 2nd param is true, it will not really try to open or copy the
+ // response key, but the reference count will be updated.
+ bResponses = MoveResponsesKey(hkeyDrv, *lpdwRegType==MARKF_REGUSECOPY);
+
+ // Get the bus type
+ bRet = CplDiGetBusType(hdi, pdevData, &dwBusType);
+
+ if (bRet)
+ {
+ MODEM_DETECT_SIG mdsT;
+ PMODEM_DETECT_SIG pmds;
+
+ // Clean out old values that are added by some inf files
+ WipeObsoleteValues(hkeyDrv);
+
+ // (In Win95 we changed the DeviceDesc to be the same as the
+ // friendly name. Don't do this anymore.)
+
+ // Get the detection signature
+ mdsT.cbSize = sizeof(mdsT);
+ bRet = CplDiGetDetectSignature(hdi, pdevData, &mdsT);
+ if ( !bRet )
+ {
+ TRACE_MSG(TF_ERROR, "Detection signature does not exist. Error = %#08lx.", GetLastError());
+
+ pmds = NULL;
+ }
+ else
+ {
+ // Validate our detection signature
+ if ( !DetectSig_Validate(&mdsT) )
+ {
+ // Wrong size
+ TRACE_MSG(TF_ERROR, "Modem detection signature is invalid!");
+ ASSERT(0);
+
+ pmds = NULL;
+ }
+ else
+ {
+ pmds = &mdsT;
+ }
+ }
+
+
+ // Write any detection info to the appropriate driver
+ // key values
+ bRet = WriteDetectionInfo(pmds, hkeyDrv);
+
+ if (bRet)
+ {
+ // Write the Default and DCB default settings
+ bRet = WriteDriverDefaults(hkeyDrv);
+
+ if (bRet)
+ {
+ // Finish up with miscellaneous device installation handling
+
+ // Was this a silent install of a PCMCIA modem?
+ if (BUS_TYPE_PCMCIA == dwBusType)
+ {
+ // Yes; perform a silent install dialinfo dialog
+ DoDialingProperties(pdevParams->hwndParent, TRUE, TRUE);
+ }
+
+ // Run any RunOnce command that is in the driver key
+ DoRunOnce(hkeyDrv);
+
+ // Does the system need to restart before the
+ // modem can be used?
+ if (IsFlagClear(pdevParams->Flags, DI_QUIETINSTALL) &&
+ ReallyNeedsReboot(pdevData, pdevParams))
+ {
+ MODEM_PRIV_PROP mpp;
+
+ mpp.cbSize = sizeof(mpp);
+ mpp.dwMask = MPPM_FRIENDLY_NAME;
+ CplDiGetPrivateProperties(hdi, pdevData, &mpp);
+
+// We decided to put this message box back here instead of the cpl because
+// the needs-reboot flag is not set most often and this is where it should
+// be anyway -- it's just that popping up the msg box when installing raz,
+// which needs to reboot anyway, was distracting. Revisit if still an issue.
+//#ifdef INSTANT_DEVICE_ACTIVATION
+// gDeviceFlags|= fDF_DEVICE_NEEDS_REBOOT;
+//#else // !INSTANT_DEVICE_ACTIVATION
+ // Yes; tell the user
+ MsgBox(g_hinst,
+ pdevParams->hwndParent,
+ MAKEINTRESOURCE(IDS_WRN_REBOOT),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION,
+ mpp.szFriendlyName);
+//#endif
+ }
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+#if 0 // We don't do this here -- instead we do this on DistroyWiz.
+ else
+ {
+ // Notify Unimodem Service Provider of a new modem
+ //
+ NotifyInstallRemove(hdi, pdevData, TRUE);
+ }
+#endif // 0
+#endif // INSTANT_DEVICE_ACTIVATION
+ }
+ }
+ }
+
+ // If this function failed somewhere, remove any common Responses key
+ // that it created. The driver will be removed by the caller.
+ if (bResponses && !bRet)
+ {
+ if (!DeleteCommonDriverKey(hkeyDrv))
+ {
+ TRACE_MSG(TF_ERROR, "DeleteCommonDriverKey() failed.");
+ // failure here just means the common key is left around
+ }
+ }
+
+ if (bRet && *lpdwRegType==MARKF_REGSAVECOPY)
+ {
+ if (!PutStuffInCache(hkeyDrv))
+ {
+ // oh oh, something happened, clear *lpdwRegType;
+ *lpdwRegType=0;
+ }
+ }
+
+ DBG_EXIT(DoPostGameWrapup);
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Determine whether to skip the file copy operation
+ specified by the .INF file, to be done when
+ installing the modem.
+
+NOTE: Any error encountered will cause this routine to
+ report that file copying should be skipped.
+
+Returns: TRUE - file copy should be skipped
+ FALSE - file copy should be performed
+Cond: --
+*/
+#ifdef WINNT
+BOOL
+PRIVATE
+SkipFileCopy(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DRVINFO_DATA pdrvData)
+ {
+ BOOL bRet = TRUE; // assume that the copy file operation *should* be skipped
+ DWORD dwErr;
+ SP_DRVINFO_DETAIL_DATA drvDetail;
+ HINF hinf = NULL;
+ TCHAR szRealSection[LINE_LEN];
+ PTSTR pszExt;
+
+ // Get the details.
+ drvDetail.cbSize = sizeof(drvDetail);
+ if (!CplDiGetDriverInfoDetail(hdi, pdevData, pdrvData, &drvDetail,
+ drvDetail.cbSize, NULL))
+ {
+ dwErr = GetLastError();
+ // ignore expected ERROR_INSUFFICIENT_BUFFER (didn't extend buffer size)
+ if (dwErr != ERROR_INSUFFICIENT_BUFFER)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetDriverInfoDetail returned error %#08lx", dwErr);
+ goto exit;
+ }
+ }
+
+ // try to open the INF file in order to get the HINF
+ hinf = SetupOpenInfFile(drvDetail.InfFileName, NULL,
+ INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL);
+
+ if (hinf == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "SetupOpenInfFile returned error %#08lx", GetLastError());
+ goto exit;
+ }
+
+ // Determine the complete name of the driver's INF section
+ if (!CplDiGetActualSectionToInstall(hinf, drvDetail.SectionName,
+ szRealSection, LINE_LEN, NULL, &pszExt))
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetActualSectionToInstall returned error %#08lx", GetLastError());
+ goto exit;
+ }
+
+ // If the section name has an extension, and that extension indicates
+ // that it's specific to an NT platform, then report that the file copy
+ // operation is *not* to be skipped.
+ if (pszExt)
+ {
+ if (IsSzEqualN(pszExt, c_szInfSectionExt, lstrlen(c_szInfSectionExt)))
+ {
+ bRet = FALSE;
+ }
+ }
+
+ exit:
+ if (hinf)
+ SetupCloseInfFile(hinf);
+
+ return bRet;
+ }
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: DIF_INSTALLDEVICE handler
+
+Returns: NO_ERROR
+ ERROR_INVALID_PARAMETER
+ ERROR_DI_DO_DEFAULT
+
+Cond: --
+*/
+DWORD
+PRIVATE
+ClassInstall_OnInstallDevice(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN OUT PSP_DEVINSTALL_PARAMS pdevParams)
+ {
+ DWORD dwRet;
+ SP_DRVINFO_DATA drvData;
+ PSP_DEVINFO_DATA OldDeviceInfoData = pdevData; // remember for potential use later.
+
+ DBG_ENTER(ClassInstall_OnInstallDevice);
+
+#ifdef PROFILE_MASSINSTALL
+ g_hwnd = pdevParams->hwndParent;
+#endif
+
+ // Is this a NULL device?
+ // (Ie, is it not in our INF files and did the user say "don't
+ // install"?)
+
+ drvData.cbSize = sizeof(drvData);
+ if ( !CplDiGetSelectedDriver(hdi, pdevData, &drvData) )
+ {
+ // Yes; have the device install handle it by default
+ TRACE_MSG(TF_GENERAL, "Passing installation off to device installer");
+
+ dwRet = ERROR_DI_DO_DEFAULT;
+ }
+ else
+ {
+ // No; continue to install the modem our way
+ HCURSOR hcur = SetCursor(LoadCursor(NULL, IDC_WAIT));
+ BOOL bRet;
+ HKEY hkeyDrv;
+ DWORD dwRegType = pdevParams->ClassInstallReserved;
+
+ if (dwRegType & MARKF_REGSAVECOPY) dwRegType = MARKF_REGSAVECOPY;
+ else if (dwRegType & MARKF_REGUSECOPY) dwRegType = MARKF_REGUSECOPY;
+ else dwRegType = 0;
+
+ dwRet = NO_ERROR; // assume success ("I am inveencible!")
+
+ // Create the driver key for the pre-installation prep
+ hkeyDrv = CplDiCreateDevRegKey(hdi, pdevData, DICS_FLAG_GLOBAL,
+ 0, DIREG_DRV, NULL, NULL);
+ if (INVALID_HANDLE_VALUE == hkeyDrv)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiCreateDevRegKey returned error %#08lx", GetLastError());
+ bRet = FALSE;
+ }
+ else
+ {
+ // Write possible values to the driver key before we
+ // execute the real installation.
+ // Note that this may modify the dwRegType value. In particular,
+ // If there was a problem getting the saved reg info info during
+ // pregameprep in the REGUSECOPY case, dwRegType will be cleared.
+ bRet = DoPreGamePrep(hdi, &pdevData, pdevParams, &drvData, &hkeyDrv, &dwRegType);
+ if (bRet)
+ {
+#ifdef WINNT
+ // Decide whether to copy INF-specified files or not. Files
+ // will ONLY be copied if they appear in a "XXX.NTxxx" section
+ // in the modem's INF file.
+ if (SkipFileCopy(hdi, pdevData, &drvData))
+ {
+ // 7/13/96 JosephJ
+ // BUGBUG shouldn't we do a get then set, not
+ // use the supplied pdevParams????
+ SetFlag(pdevParams->Flags, DI_NOFILECOPY);
+ CplDiSetDeviceInstallParams(hdi, pdevData, pdevParams);
+ }
+#endif
+ // Install the modem. This does the real work. We should
+ if (dwRegType == MARKF_REGUSECOPY)
+ {
+ SP_DEVINSTALL_PARAMS devParams1;
+
+ devParams1.cbSize = sizeof(devParams1);
+ bRet = CplDiGetDeviceInstallParams(
+ hdi, pdevData, &devParams1);
+ if (bRet)
+ {
+ SetFlag(
+ devParams1.FlagsEx,
+ DI_FLAGSEX_NO_DRVREG_MODIFY
+ );
+ CplDiSetDeviceInstallParams(
+ hdi,
+ pdevData,
+ &devParams1);
+ }
+ }
+
+ // be done with our stuff before we call this function.
+#ifdef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "> CplDiInstallDevice().....");
+#endif
+ bRet = CplDiInstallDevice(hdi, pdevData);
+
+#ifdef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "< CplDiInstallDevice().....");
+#endif
+ if (bRet)
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+
+ // Get the device install params since the installation
+ devParams.cbSize = sizeof(devParams);
+ bRet = CplDiGetDeviceInstallParams(hdi, pdevData, &devParams);
+ ASSERT(bRet);
+
+ if (bRet)
+ {
+ // Do some after-install things
+ // See comments regarding dwRegType in PreGamePrep.
+ bRet = DoPostGameWrapup(hdi, pdevData, &devParams, hkeyDrv, &dwRegType);
+ }
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "CplDiInstallDevice returned error %#08lx", GetLastError());
+ }
+ }
+
+ //
+ // We have to check the value of hkeyDrv before closing it, because 'DoPreGamePrep'
+ // might have failed in such a way that there is no longer a handle open.
+ //
+ if(hkeyDrv != INVALID_HANDLE_VALUE)
+ {
+ RegCloseKey(hkeyDrv);
+ }
+ }
+
+ SetCursor(hcur);
+
+ // Did the installation fail somewhere above?
+ if ( !bRet )
+ {
+ // Yes; delete the driver key that we created.
+ dwRet = GetLastError();
+
+ if (NO_ERROR == dwRet)
+ {
+ // Think of some reason why this failed...
+ dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+ if (ERROR_CANCELLED != dwRet)
+ {
+ MODEM_DETECT_SIG mdsT;
+ int id;
+ int ids;
+
+ // Get COM port for error string. If this fails, big deal.
+ mdsT.cbSize = sizeof(mdsT);
+ *mdsT.szPort = 0;
+ CplDiGetDetectSignature(hdi, pdevData, &mdsT);
+
+ switch (dwRet)
+ {
+ case ERROR_LINE_NOT_FOUND:
+ ids = IDS_ERR_CANT_COPY_FILES;
+ break;
+
+ default:
+ ids = IDS_ERR_CANT_ADD_MODEM;
+ break;
+ }
+
+ id = MsgBox(g_hinst,
+ pdevParams->hwndParent,
+ MAKEINTRESOURCE(ids),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OKCANCEL | MB_ICONINFORMATION,
+ drvData.Description, mdsT.szPort);
+ if (IDCANCEL == id)
+ {
+ dwRet = ERROR_CANCELLED;
+ }
+ }
+
+ // Try removing the modem since CplDiInstallDevice
+ // will not always clean up completely. Leaving
+ // partially filled registry entries lying around
+ // can cause problems.
+ bRet = CplDiRemoveDevice(hdi, pdevData);
+ if ( !bRet )
+ {
+ TRACE_MSG(TF_ERROR, "Not able to remove a modem. Error = %#08lx.", GetLastError());
+ }
+
+ }
+ else
+ {
+#ifdef INSTANT_DEVICE_ACTIVATION
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "settig gDeviceChange to TRUE");
+#endif
+ gDeviceFlags|=fDF_DEVICE_ADDED;
+#else // !INSTANT_DEVICE_ACTIVATION
+ if (IsFlagClear(pdevParams->Flags, DI_QUIETINSTALL))
+ {
+ MsgBox(g_hinst,
+ pdevParams->hwndParent,
+ MAKEINTRESOURCE( IDS_NT_BETA_1 ),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION);
+ }
+#endif //!INSTANT_DEVICE_ACTIVATION
+ }
+ }
+
+#ifdef WINNT
+ if(OldDeviceInfoData != pdevData)
+ {
+ //
+ // Then the 'DoPreGamePrep' routine must've determined that we were about to install a
+ // PnP ISA modem, and saved us from ourselves by creating a legacy modem device for us
+ // to play with. We need to free the memory now that it allocated for this device.
+ //
+ LocalFree(pdevData);
+ }
+#endif // WINNT
+
+ DBG_EXIT(ClassInstall_OnInstallDevice);
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function is the class installer entry-point.
+
+Returns:
+Cond: --
+*/
+DWORD
+APIENTRY
+ClassInstall32(
+ IN DI_FUNCTION dif,
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData) OPTIONAL
+ {
+ DWORD dwRet;
+ SP_DEVINSTALL_PARAMS devParams;
+
+ DBG_ENTER_DIF(ClassInstall32, dif);
+
+ try
+ {
+ // Get the DeviceInstallParams, because some of the InstallFunction
+ // handlers may find some of its fields useful. Keep in mind not
+ // to set the DeviceInstallParams using this same structure at the
+ // end. The handlers may have called functions which would change the
+ // DeviceInstallParams, and simply calling CplDiSetDeviceInstallParams
+ // with this blanket structure would destroy those settings.
+ devParams.cbSize = sizeof(devParams);
+ if ( !CplDiGetDeviceInstallParams(hdi, pdevData, &devParams) )
+ {
+ dwRet = GetLastError();
+ ASSERT(NO_ERROR != dwRet);
+ }
+ else
+ {
+ // Dispatch the InstallFunction
+ switch (dif)
+ {
+ case DIF_INSTALLWIZARD:
+ dwRet = ClassInstall_OnInstallWizard(hdi, pdevData, &devParams);
+ break;
+
+ case DIF_DESTROYWIZARDDATA:
+ dwRet = ClassInstall_OnDestroyWizard(hdi, pdevData, &devParams);
+ break;
+
+ case DIF_DETECT:
+ dwRet = ClassInstall_OnDetect(hdi, pdevData, &devParams);
+ break;
+
+ case DIF_INSTALLDEVICE:
+ //
+ // Beware! Upon return from this routine, pdevData could have
+ // turned into a 'Ports' device (if it was a PnP ISA modem). In
+ // this case, devParams will now contain the device install params
+ // for the new legacy-detected modem that we created.
+ //
+ dwRet = ClassInstall_OnInstallDevice(hdi, pdevData, &devParams);
+ break;
+
+ case DIF_SELECTDEVICE:
+ dwRet = ClassInstall_OnSelectDevice(hdi, pdevData);
+ break;
+
+ default:
+ dwRet = ERROR_DI_DO_DEFAULT;
+ break;
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+
+ DBG_EXIT_DWORD(ClassInstall32, dwRet);
+
+ return dwRet;
+ }
+
+
+BOOL RegCopy(
+ HKEY hkTo,
+ HKEY hkFrom,
+ DWORD dwToRegOptions,
+ DWORD dwMaxDepth
+ )
+{
+ // Note: This function is recursive and keeps open keys around,
+ // Max number of open keys = twize depth of recursion.
+ BOOL fRet = FALSE; // assume failure
+ LONG lRet;
+ DWORD cSubKeys, cValues;
+ DWORD cchMaxSubKey, cchMaxValueName;
+ DWORD cbMaxValueData;
+ LPTSTR ptszName = NULL;
+ BYTE *pbData = NULL;
+ DWORD dwType;
+ UINT ii;
+ DWORD cbMaxName;
+ BYTE rgbTmp[256];
+ BYTE *pb=NULL;
+ BOOL fAlloc=FALSE;
+ HKEY hkFromChild=NULL;
+ HKEY hkToChild=NULL;
+
+ // Get counts and sizes of values, keys and data
+ lRet = RegQueryInfoKey(
+ hkFrom,
+ NULL,
+ NULL,
+ NULL,
+ &cSubKeys,
+ &cchMaxSubKey,
+ NULL,
+ &cValues,
+ &cchMaxValueName,
+ &cbMaxValueData,
+ NULL,
+ NULL
+ );
+ if (lRet != ERROR_SUCCESS) goto end;
+
+ // Enough space for any Key or ValueName. '+1' is for terminating NULL.
+ cbMaxName = (((cchMaxSubKey>cchMaxValueName)?cchMaxSubKey:cchMaxValueName)
+ + 1)*sizeof(TCHAR);
+
+ // If rgbTmp is big enough, use it, else alloc.
+ if ((cbMaxName+cbMaxValueData)>sizeof(rgbTmp))
+ {
+ pb = (BYTE*)LocalAlloc(LPTR, cbMaxName+cbMaxValueData);
+ if (!pb) goto end;
+ fAlloc=TRUE;
+ }
+ else
+ {
+ pb = rgbTmp;
+ }
+ ptszName = (LPTSTR)pb;
+ pbData = pb+cbMaxName;
+
+
+ // Note as input, cch (character counts) include terminating NULL.
+ // As ouput, they don't include terminating NULL.
+
+ for(ii=0; ii<cValues; ii++)
+ {
+ DWORD cchThisValue= cchMaxValueName+1;
+ DWORD cbThisData = cbMaxValueData;
+ lRet = RegEnumValue(
+ hkFrom,
+ ii,
+ ptszName,
+ &cchThisValue,
+ NULL,
+ &dwType,
+ pbData,
+ &cbThisData
+ );
+ if (lRet!=ERROR_SUCCESS) goto end;
+
+ ASSERT(cbThisData<=cbMaxValueData);
+ ASSERT(cchThisValue<=cchMaxValueName);
+ lRet = RegSetValueEx(
+ hkTo,
+ ptszName,
+ 0,
+ dwType,
+ pbData,
+ cbThisData
+ );
+ if (lRet!=ERROR_SUCCESS) goto end;
+
+ }
+
+ if (!dwMaxDepth) {fRet = TRUE; goto end;}
+
+ // Now recurse for each key.
+
+ for(ii=0; ii<cSubKeys; ii++)
+ {
+ DWORD dwDisp;
+
+ lRet = RegEnumKey(
+ hkFrom,
+ ii,
+ ptszName,
+ cchMaxSubKey+1
+ );
+ if (lRet!=ERROR_SUCCESS) goto end;
+
+ lRet = RegOpenKeyEx(
+ hkFrom,
+ ptszName,
+ 0,
+ KEY_READ,
+ &hkFromChild);
+ if (lRet!=ERROR_SUCCESS) goto end;
+
+ lRet = RegCreateKeyEx(
+ hkTo,
+ ptszName,
+ 0,
+ NULL,
+ dwToRegOptions,
+ KEY_ALL_ACCESS,
+ NULL,
+ &hkToChild,
+ &dwDisp
+ );
+ if (lRet!=ERROR_SUCCESS) goto end;
+
+ fRet = RegCopy(
+ hkToChild,
+ hkFromChild,
+ dwToRegOptions,
+ dwMaxDepth-1
+ );
+
+ RegCloseKey(hkToChild); hkToChild=NULL;
+ RegCloseKey(hkFromChild); hkFromChild=NULL;
+ }
+ fRet = TRUE;
+
+end:
+ if (fAlloc) {LocalFree(pb);pb=NULL;}
+ if (hkFromChild) {RegCloseKey(hkFromChild); hkFromChild=NULL;}
+ if (hkToChild) {RegCloseKey(hkToChild); hkToChild=NULL;}
+
+ return fRet;
+}
+
+DWORD
+PRIVATE
+RegDeleteKeyNT(
+ IN HKEY hkStart,
+ IN LPCTSTR pKeyName);
+
+LPCTSTR szREGCACHE = REGSTR_PATH_SETUP TEXT("\\Unimodem\\RegCache");
+LPCTSTR szCACHEOK = TEXT("AllOK");
+
+BOOL PutStuffInCache(HKEY hkDrv)
+{
+ LONG lErr;
+ DWORD dwExisted;
+ BOOL bRet = FALSE;
+ HKEY hkCache;
+
+ RegDeleteKeyNT(HKEY_LOCAL_MACHINE, szREGCACHE);
+
+ lErr = RegCreateKeyEx(
+ HKEY_LOCAL_MACHINE,
+ szREGCACHE,
+ 0,
+ NULL,
+ REG_OPTION_VOLATILE,
+ KEY_ALL_ACCESS,
+ NULL,
+ &hkCache,
+ &dwExisted);
+
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR, "RegCreateKeyEx(cache) failed: %#08lx.", lErr);
+ hkCache=NULL;
+ goto end;
+ }
+
+ if (dwExisted != REG_CREATED_NEW_KEY)
+ {
+ TRACE_MSG(TF_ERROR, "RegCreateKeyEx(cache): key exists!");
+ goto end;
+ }
+
+ bRet = RegCopy(hkCache, hkDrv, REG_OPTION_VOLATILE, 100);
+
+ if (bRet)
+ {
+ // Specifically delete all things which are per-device-instance
+ RegDeleteValue(hkCache, c_szFriendlyName);
+ RegDeleteValue(hkCache, c_szID);
+ }
+
+ if (bRet)
+ {
+ DWORD dwData;
+ lErr = RegSetValueEx(
+ hkCache,
+ szCACHEOK,
+ 0,
+ REG_DWORD,
+ (LPBYTE)&dwData,
+ sizeof(dwData)
+ );
+ bRet = (lErr==ERROR_SUCCESS);
+ }
+end:
+ if (hkCache) {RegCloseKey(hkCache); hkCache=NULL;}
+ if (!bRet) {RegDeleteKeyNT(HKEY_LOCAL_MACHINE, szREGCACHE);}
+
+ return bRet;
+}
+
+BOOL GetStuffFromCache(HKEY hkDrv)
+{
+ LONG lErr;
+ DWORD dwExisted;
+ BOOL bRet = FALSE;
+ HKEY hkCache;
+
+ lErr=RegOpenKeyEx(
+ HKEY_LOCAL_MACHINE, // handle of open key
+ szREGCACHE, // address of name of subkey to open
+ 0, // reserved
+ KEY_READ, // desired security access
+ &hkCache // address of buffer for opened handle
+ );
+ if (lErr!=ERROR_SUCCESS) {hkCache=0; goto end;}
+
+ bRet = RegCopy(hkDrv, hkCache, REG_OPTION_NON_VOLATILE, 100);
+
+ if (bRet)
+ {
+ DWORD dwData;
+ DWORD cbData=sizeof(dwData);
+ lErr = RegQueryValueEx(
+ hkDrv,
+ szCACHEOK,
+ NULL,
+ NULL,
+ (PBYTE)&dwData,
+ &cbData
+ );
+ bRet = (lErr==ERROR_SUCCESS);
+ if(bRet)
+ {
+ RegDeleteValue(hkDrv, szCACHEOK);
+ }
+
+ // Specifically Verify that the friendly name doesn't exist.
+ // This check should always work.
+ // Note that if it exists we nuke it -- that's OK.
+ bRet = (RegDeleteValue(hkDrv, c_szFriendlyName)!=ERROR_SUCCESS);
+ ASSERT(bRet);
+ }
+
+end:
+ if (hkCache) {RegCloseKey(hkCache); hkCache=NULL;}
+ return bRet;
+}
diff --git a/private/unimodem/cpl/cpl.c b/private/unimodem/cpl/cpl.c
new file mode 100644
index 000000000..a88b21a4e
--- /dev/null
+++ b/private/unimodem/cpl/cpl.c
@@ -0,0 +1,2179 @@
+/*
+ * Control Panel routines for modems including the listbox dialog
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1995
+ * All rights reserved
+ *
+ */
+
+#include "proj.h"
+#include <cpl.h>
+
+#define INITGUID
+#include <initguid.h>
+#include <devguid.h>
+
+// Column subitems
+#define ICOL_MODEM 0
+#define ICOL_PORT 1
+
+#define LV_APPEND 0x7fffffff
+
+
+// Global flags. See cpl\modem.h for their values.
+int g_iCPLFlags = 0;
+
+int g_CurrentSubItemToSort = ICOL_MODEM;
+
+// Map driver type values to imagelist index
+struct
+ {
+ BYTE nDeviceType; // DT_ value
+ UINT idi; // icon resource ID
+ int index; // imagelist index
+ } g_rgmapdt[] = {
+ { DT_NULL_MODEM, IDI_NULL_MODEM, 0 },
+ { DT_EXTERNAL_MODEM, IDI_EXTERNAL_MODEM, 0 },
+ { DT_INTERNAL_MODEM, IDI_INTERNAL_MODEM, 0 },
+ { DT_PCMCIA_MODEM, IDI_PCMCIA_MODEM, 0 },
+ { DT_PARALLEL_PORT, IDI_NULL_MODEM, 0 },
+ { DT_PARALLEL_MODEM, IDI_EXTERNAL_MODEM, 0 } };
+
+
+// This structure is private data for the main modem dialog
+typedef struct tagMODEMDLG
+ {
+ HDEVINFO hdi;
+ int cSel;
+ } MODEMDLG, FAR * LPMODEMDLG;
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+
+void
+HandleDeviceChange(
+ IN DWORD dwDeviceFlags,
+ IN HWND hWnd );
+
+BOOL
+RestartComputerDlg(
+ IN HWND hwndOwner );
+
+BOOL
+RestartComputer();
+
+
+#endif // INSTANT_DEVICE_ACTIVATION
+
+// This structure is used to represent each modem item
+// in the listview
+typedef struct tagMODEMITEM
+ {
+ SP_DEVINFO_DATA devData;
+ MODEM_PRIV_PROP mpp;
+ } MODEMITEM, FAR * PMODEMITEM;
+
+// Special-case alphanumeric stringcmp.
+int my_lstrcmp_an(LPTSTR lptsz1, LPTSTR lptsz2);
+
+
+HIMAGELIST g_himl;
+
+#pragma data_seg(DATASEG_READONLY)
+
+TCHAR const FAR c_szWinHelpFile[] = TEXT("windows.hlp");
+
+TCHAR const FAR c_szFriendlyName[] = REGSTR_VAL_FRIENDLYNAME;
+TCHAR const FAR c_szHardwareID[] = REGSTR_VAL_HARDWAREID;
+
+// Strings for invoking the modem cpl
+TCHAR const FAR c_szRunOnce[] = TEXT("RunOnce");
+TCHAR const FAR c_szRunWizard[] = TEXT("add");
+TCHAR const FAR c_szAddCables[] = TEXT("addcables");
+TCHAR const FAR c_szNoUI[] = TEXT("noui");
+TCHAR const FAR c_szOnePort[] = TEXT("port");
+TCHAR const FAR c_szInfName[] = TEXT("inf");
+TCHAR const FAR c_szInfSection[] = TEXT("sect");
+
+// Hardcoded hardware IDs for cable connection
+TCHAR const FAR c_szHardwareIDSerial[] = TEXT("PNPC031");
+TCHAR const FAR c_szHardwareIDParallel[] = TEXT("PNPC032");
+TCHAR const FAR c_szInfSerial[] = TEXT("M2700");
+TCHAR const FAR c_szInfParallel[] = TEXT("M2701");
+
+// File names
+#ifdef WINNT
+TCHAR const FAR c_szTapiDLL[] = TEXT("TAPI32.DLL");
+#else
+TCHAR const FAR c_szTapiDLL[] = TEXT("TAPI.DLL");
+#endif
+
+LPGUID g_pguidModem = (LPGUID)&GUID_DEVCLASS_MODEM;
+
+#pragma data_seg()
+
+BOOL CALLBACK ModemCplDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+void
+PRIVATE
+ModemCpl_SortColumn(
+ IN HWND hwndCtl,
+ IN int icol);
+
+
+/*----------------------------------------------------------
+Purpose: Runs the device installer wizard
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+DoWizard(
+ IN HWND hwnd,
+ IN HDEVINFO hdi)
+ {
+ BOOL bRet;
+ SP_INSTALLWIZARD_DATA iwd;
+
+ DBG_ENTER(DoWizard);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+
+ ZeroInit(&iwd);
+ CplInitClassInstallHeader(&iwd, DIF_INSTALLWIZARD);
+ iwd.hwndWizardDlg = hwnd;
+
+ bRet = CplDiSetClassInstallParams(hdi, NULL, PCIPOfPtr(&iwd), sizeof(iwd));
+ if (bRet)
+ {
+ // Invoke the wizard
+ CplDiCallClassInstaller(DIF_INSTALLWIZARD, hdi, NULL);
+
+ // Clean up
+ CplDiCallClassInstaller(DIF_DESTROYWIZARDDATA, hdi, NULL);
+ }
+ DBG_EXIT(DoWizard);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Show the Modem dialog
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+DoModem(
+ IN HWND hwnd,
+ IN OUT HDEVINFO * phdi)
+ {
+ PROPSHEETHEADER psh;
+ PROPSHEETPAGE rgpsp[2];
+ MODEMDLG md;
+
+ DBG_ENTER(DoModem);
+
+ md.hdi = *phdi;
+ md.cSel = 0;
+
+ // Property page header
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_PROPTITLE | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;
+ psh.hwndParent = hwnd;
+ psh.hInstance = g_hinst;
+ psh.pszCaption = MAKEINTRESOURCE(IDS_CPLNAME);
+#ifdef DIAGNOSTIC
+ psh.nPages = 2;
+#else
+ psh.nPages = 1;
+#endif //DIAGNOSTIC
+ psh.nStartPage = 0;
+ psh.ppsp = rgpsp;
+
+ // Pages
+ rgpsp[0].dwSize = sizeof(PROPSHEETPAGE);
+ rgpsp[0].dwFlags = PSP_DEFAULT;
+ rgpsp[0].hInstance = g_hinst;
+ rgpsp[0].pszTemplate = MAKEINTRESOURCE(IDD_MODEM);
+ rgpsp[0].pfnDlgProc = ModemCplDlgProc;
+ rgpsp[0].lParam = (LPARAM)&md;
+
+#ifdef DIAGNOSTIC
+ rgpsp[1].dwSize = sizeof(PROPSHEETPAGE);
+ rgpsp[1].dwFlags = PSP_DEFAULT;
+ rgpsp[1].hInstance = g_hinst;
+ rgpsp[1].pszTemplate = MAKEINTRESOURCE(IDD_MODEMTEST);
+ rgpsp[1].pfnDlgProc = MdmDiagDlgProc;
+ rgpsp[1].lParam = (LPARAM)&md;
+#endif //DIAGNOSTIC
+
+ PropertySheet(&psh);
+
+ *phdi = md.hdi;
+
+ DBG_EXIT(DoModem);
+
+ }
+
+/*----------------------------------------------------------
+Purpose: Gets the index to the appropriate image in the modem imagelist
+WITHOUT searching the registry.
+
+Returns: --
+Cond: --
+*/
+void PUBLIC GetModemImageIndex(
+ BYTE nDeviceType,
+ int FAR * pindex)
+ {
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(g_rgmapdt); i++)
+ {
+ if (nDeviceType == g_rgmapdt[i].nDeviceType)
+ {
+ *pindex = g_rgmapdt[i].index;
+ return;
+ }
+ }
+ ASSERT(0); // We should never get here
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the modem image list
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL NEAR PASCAL GetModemImageList(
+ HIMAGELIST FAR * phiml)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(phiml);
+
+ if (NULL == g_himl)
+ {
+ g_himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
+ GetSystemMetrics(SM_CYSMICON),
+ ILC_MASK, 1, 1);
+ if (NULL != g_himl)
+ {
+ // The MODEMUI.DLL contains the icons from which we derive the list
+ HINSTANCE hinst = LoadLibrary(TEXT("MODEMUI.DLL"));
+
+ ImageList_SetBkColor(g_himl, GetSysColor(COLOR_WINDOW));
+
+ if (ISVALIDHINSTANCE(hinst))
+ {
+ HICON hicon;
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(g_rgmapdt); i++)
+ {
+ hicon = LoadIcon(hinst, MAKEINTRESOURCE(g_rgmapdt[i].idi));
+ g_rgmapdt[i].index = ImageList_AddIcon(g_himl, hicon);
+ }
+ FreeLibrary(hinst);
+
+ *phiml = g_himl;
+ bRet = TRUE;
+ }
+ }
+ }
+ else
+ {
+ *phiml = g_himl;
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Determine if user is an admin, and records this in
+ a global g_iCPLFlags.
+
+Returns: --
+Cond: --
+*/
+VOID NEAR PASCAL CheckIfAdminUser()
+{
+ HKEY hkey;
+
+ if(IsAdminUser())
+ {
+ g_iCPLFlags |= FLAG_USER_IS_ADMIN;
+ }
+ else
+ {
+ g_iCPLFlags &= (~FLAG_USER_IS_ADMIN);
+ }
+}
+
+
+/*----------------------------------------------------------
+Purpose: Invokes the modem control panel.
+
+ fWizard=TRUE ==> run wizard, even if there are alreay devices installed
+ fWizard=FALSE ==> run wizard only if there are no devices installed.
+ fCpl=TRUE ==> run CPL
+ fCpl=FALSE ==> don't run CPL
+Returns: --
+Cond: --
+*/
+void NEAR PASCAL InvokeControlPanel(HWND hwnd, BOOL fCpl, BOOL fWizard)
+{
+ HDEVINFO hdi=NULL;
+ BOOL bInstalled;
+ SP_DEVINFO_DATA devData;
+
+ if (!CplDiGetModemDevs(&hdi, hwnd, DIGCF_PRESENT, &bInstalled))
+ {
+ hdi=NULL;
+ goto end;
+ }
+
+ // Are there any modems installed? (or we are we asked to invoke
+ // the wizard)
+ if ( !bInstalled || fWizard)
+ {
+ // If the user isn't an admin, there's nothing else
+ // they can do. If they are, run the installation wizard.
+ if (!USER_IS_ADMIN())
+ {
+ LPTSTR lptsz = MAKEINTRESOURCE(
+ (bInstalled)
+ ? IDS_ERR_NOT_ADMIN
+ : IDS_ERR_NOMODEM_NOT_ADMIN
+ );
+ MsgBox( g_hinst,
+ hwnd,
+ lptsz,
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONERROR );
+ goto end;
+ }
+ DoWizard(hwnd, hdi);
+ }
+
+
+ if (fCpl)
+ {
+ // Check again
+ devData.cbSize = sizeof(devData);
+ if (CplDiEnumDeviceInfo(hdi, 0, &devData))
+ {
+ // Yes; start up the cpl
+ DoModem(hwnd, &hdi);
+ }
+
+ }
+ // fall through
+
+ end:
+ if (hdi)
+ {
+ CplDiDestroyDeviceInfoList(hdi);
+ }
+ return;
+}
+
+
+/*----------------------------------------------------------
+Purpose: Fetch the value of a command line parameter. Also
+ writes a '\0' over the '=' that precedes the value.
+
+Returns: NULL if there was no "=" in the string, otherwise
+ a pointer to the character following the next '='.
+
+Cond: --
+*/
+LPTSTR
+PRIVATE
+GetValuePtr(LPTSTR lpsz)
+{
+ LPTSTR lpszEqual;
+
+ if ((lpszEqual = AnsiChr(lpsz, '=')) != NULL)
+ {
+ lpsz = CharNext(lpszEqual);
+ lstrcpy(lpszEqual, TEXT("\0"));
+ }
+
+ return(lpszEqual ? lpsz : NULL);
+}
+
+
+/*----------------------------------------------------------
+Purpose: Parse the command line. Set flags and collect
+ parameters based on its contents.
+
+Returns: --
+Cond: --
+*/
+VOID
+PRIVATE
+ParseCmdLine(LPTSTR szCmdLine, LPINSTALLPARAMS lpip)
+{
+ LPTSTR lpszParam, lpszSpace, lpszValue;
+
+ ZeroMemory(lpip, sizeof(INSTALLPARAMS));
+
+ while (szCmdLine && (!IsSzEqual(szCmdLine, TEXT("\0"))))
+ {
+ lpszParam = szCmdLine;
+ if ((lpszSpace = AnsiChr(szCmdLine, ' ')) != NULL)
+ {
+ szCmdLine = CharNext(lpszSpace);
+ lstrcpy(lpszSpace, TEXT("\0"));
+ }
+ else szCmdLine = NULL;
+
+ // interpret any "directive" parameters
+ if (IsSzEqual(lpszParam, c_szNoUI))
+ {
+ g_iCPLFlags |= FLAG_INSTALL_NOUI;
+ }
+ else if (lpszValue = GetValuePtr(lpszParam))
+ {
+ // interpret any "value" parameters (have a value following '=')
+ if (IsSzEqual(lpszParam, c_szOnePort))
+ {
+ if (lstrlen(lpszValue) < sizeof(lpip->szPort))
+ lstrcpy(lpip->szPort, CharUpper(lpszValue));
+ }
+ else if (IsSzEqual(lpszParam, c_szInfName))
+ {
+ if (lstrlen(lpszValue) < sizeof(lpip->szInfName))
+ lstrcpy(lpip->szInfName, lpszValue);
+ }
+ else if (IsSzEqual(lpszParam, c_szInfSection))
+ {
+ if (lstrlen(lpszValue) < sizeof(lpip->szInfSect))
+ lstrcpy(lpip->szInfSect, lpszValue);
+ }
+ }
+ else
+ {
+ // ignore any parameter that wasn't recognized & skip to the next
+ // parameter if there is one
+ if (szCmdLine)
+ {
+ if ((szCmdLine = AnsiChr(szCmdLine, ' ')) != NULL)
+ szCmdLine = CharNext(szCmdLine);
+ }
+ }
+ }
+}
+
+
+/*----------------------------------------------------------
+Purpose: Entry-point for control panel applet
+
+Returns: varies
+Cond: --
+*/
+LONG
+CALLBACK
+CPlApplet(
+ HWND hwnd,
+ UINT Msg,
+ LPARAM lParam1,
+ LPARAM lParam2 )
+ {
+ LPNEWCPLINFO lpCPlInfo;
+ LPCPLINFO lpOldCPlInfo;
+ LPTSTR lpszParam;
+ HDEVINFO hdi;
+ BOOL bRet;
+ BOOL bInstalled;
+ INSTALLPARAMS InstallParams;
+
+ switch (Msg)
+ {
+ case CPL_INIT:
+ CheckIfAdminUser();
+ gDeviceFlags =0;
+ return TRUE;
+
+ case CPL_GETCOUNT:
+ return 1;
+
+ case CPL_INQUIRE:
+ lpOldCPlInfo = (LPCPLINFO)lParam2;
+ lpOldCPlInfo->idIcon = IDI_MODEM;
+ lpOldCPlInfo->idName = IDS_CPLNAME;
+ lpOldCPlInfo->idInfo = IDS_CPLINFO;
+ lpOldCPlInfo->lData = 1;
+ break;
+
+ case CPL_SELECT:
+ // Applet has been selected, do nothing.
+ break;
+
+ case CPL_NEWINQUIRE:
+ lpCPlInfo = (LPNEWCPLINFO)lParam2;
+
+ lpCPlInfo->hIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_MODEM));
+
+ LoadString(g_hinst, IDS_CPLNAME, lpCPlInfo->szName, SIZECHARS(lpCPlInfo->szName));
+ LoadString(g_hinst, IDS_CPLINFO, lpCPlInfo->szInfo, SIZECHARS(lpCPlInfo->szInfo));
+
+ lpCPlInfo->dwSize = sizeof(NEWCPLINFO);
+ lpCPlInfo->lData = 1;
+ break;
+
+ case CPL_STARTWPARMS:
+ lpszParam = (LPTSTR)lParam2;
+
+ ParseCmdLine((LPTSTR)lParam2, &InstallParams);
+
+ if (INSTALL_NOUI())
+ {
+ UnattendedInstall(hwnd, &InstallParams);
+ }
+ else
+ if (IsSzEqual(lpszParam, c_szRunOnce))
+ {
+ // run-once
+ InvokeControlPanel(hwnd,FALSE,FALSE);
+ }
+ else if (IsSzEqual(lpszParam, c_szRunWizard))
+ {
+ // run wizard
+ InvokeControlPanel(hwnd,FALSE,TRUE);
+ }
+ else
+ {
+ InvokeControlPanel(hwnd,TRUE,FALSE);
+ }
+ break;
+
+ case CPL_DBLCLK:
+ InvokeControlPanel(hwnd, TRUE, FALSE);
+ break;
+
+ case CPL_STOP:
+ // Sent once for each applet prior to the CPL_EXIT msg.
+ // Perform applet specific cleanup.
+ break;
+
+ case CPL_EXIT:
+ // Last message, sent once only, before the shell calls
+ break;
+
+ default:
+ break;
+ }
+ return TRUE;
+ }
+
+
+//****************************************************************************
+//
+//****************************************************************************
+
+#define KERNEL_SUPPORT
+
+#if !defined(KERNEL_SUPPORT)
+
+#undef CommConfigDialog
+#undef GetDefaultCommConfig
+#undef SetDefaultCommConfig
+#define CommConfigDialog MyCommConfigDialog
+#define GetDefaultCommConfig MyGetDefaultCommConfig
+#define SetDefaultCommConfig MySetDefaultCommConfig
+
+typedef DWORD (WINAPI FAR * COMMCONFIGDIALOGPROC)(LPCTSTR pszName, HWND hwnd, LPCOMMCONFIG pcc);
+typedef DWORD (WINAPI FAR * GETDEFAULTCOMMCONFIGPROC)(LPCTSTR pszName, LPCOMMCONFIG pcc, LPDWORD pcbSize);
+typedef DWORD (WINAPI FAR * SETDEFAULTCOMMCONFIGPROC)(LPCTSTR pszName, LPCOMMCONFIG pcc, DWORD cbSize);
+
+#ifdef UNICODE
+#define DRV_COMMCFGDLG_FUNC "drvCommConfigDialogW"
+#define DRV_GETDEFCOMMCFG_FUNC "drvGetDefaultCommConfigW"
+#define DRV_SETDEFCOMMCFG_FUNC "drvSetDefaultCommConfigW"
+#else
+#define DRV_COMMCFGDLG_FUNC "drvCommConfigDialogA"
+#define DRV_GETDEFCOMMCFG_FUNC "drvGetDefaultCommConfigA"
+#define DRV_SETDEFCOMMCFG_FUNC "drvSetDefaultCommConfigA"
+#endif // UNICODE
+
+/*----------------------------------------------------------
+Purpose: Temporary function
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC MyCommConfigDialog(
+ LPTSTR pszName,
+ HWND hwndOwner,
+ LPCOMMCONFIG pcc)
+ {
+ BOOL bRet = FALSE;
+ HINSTANCE hinst;
+ COMMCONFIGDIALOGPROC pfn;
+
+ hinst = LoadLibrary(TEXT("MODEMUI.DLL"));
+ if (ISVALIDHINSTANCE(hinst))
+ {
+ pfn = (COMMCONFIGDIALOGPROC)GetProcAddress(hinst, DRV_COMMCFGDLG_FUNC);
+ if (pfn)
+ {
+ bRet = (NO_ERROR == pfn(pszName, hwndOwner, pcc));
+ }
+ FreeLibrary(hinst);
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Temporary function
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC MyGetDefaultCommConfig(
+ LPTSTR pszName,
+ LPCOMMCONFIG pcc,
+ LPDWORD pcbSize)
+ {
+ BOOL bRet = FALSE;
+ HINSTANCE hinst;
+ GETDEFAULTCOMMCONFIGPROC pfn;
+
+ hinst = LoadLibrary(TEXT("MODEMUI.DLL"));
+ if (ISVALIDHINSTANCE(hinst))
+ {
+ pfn = (GETDEFAULTCOMMCONFIGPROC)GetProcAddress(hinst, DRV_GETDEFCOMMCFG_FUNC);
+ if (pfn)
+ {
+ bRet = (NO_ERROR == pfn(pszName, pcc, pcbSize));
+ }
+ FreeLibrary(hinst);
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Temporary function
+
+Returns:
+Cond: --
+*/
+BOOL PUBLIC MySetDefaultCommConfig(
+ LPTSTR pszName,
+ LPCOMMCONFIG pcc,
+ DWORD cbSize)
+ {
+ BOOL bRet = FALSE;
+ HINSTANCE hinst;
+ SETDEFAULTCOMMCONFIGPROC pfn;
+
+ hinst = LoadLibrary(TEXT("MODEMUI.DLL"));
+ if (ISVALIDHINSTANCE(hinst))
+ {
+ pfn = (SETDEFAULTCOMMCONFIGPROC)GetProcAddress(hinst, DRV_SETDEFCOMMCFG_FUNC);
+ if (pfn)
+ {
+ bRet = (NO_ERROR == pfn(pszName, pcc, cbSize));
+ }
+ FreeLibrary(hinst);
+ }
+
+ return bRet;
+ }
+
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Brings up the property sheet for the modem
+
+Returns: IDOK or IDCANCEL
+Cond: --
+*/
+int
+PRIVATE
+DoModemProperties(
+ IN HWND hDlg,
+ IN HDEVINFO hdi)
+ {
+ int idRet = IDCANCEL;
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_MODEMLV);
+ LV_ITEM lvi;
+ int iSel;
+
+ iSel = ListView_GetNextItem(hwndCtl, -1, LVNI_SELECTED);
+ if (-1 != iSel)
+ {
+ COMMCONFIG ccDummy;
+ COMMCONFIG * pcc;
+ DWORD dwSize;
+ HCURSOR hcur = SetCursor(LoadCursor(NULL, IDC_WAIT));
+ PMODEMITEM pitem;
+
+ // Get the selection
+ lvi.mask = LVIF_PARAM;
+ lvi.iItem = iSel;
+ lvi.iSubItem = 0;
+ ListView_GetItem(hwndCtl, &lvi);
+
+ pitem = (PMODEMITEM)lvi.lParam;
+
+ ccDummy.dwProviderSubType = PST_MODEM;
+ dwSize = sizeof(COMMCONFIG);
+ GetDefaultCommConfig(pitem->mpp.szFriendlyName, &ccDummy, &dwSize);
+
+ pcc = (COMMCONFIG *)LocalAlloc(LPTR, (UINT)dwSize);
+ if (pcc)
+ {
+ pcc->dwProviderSubType = PST_MODEM;
+ if (GetDefaultCommConfig(pitem->mpp.szFriendlyName, pcc, &dwSize))
+ {
+ COMMCONFIG *pccOld =
+ (COMMCONFIG *)LocalAlloc(LPTR, (UINT)dwSize);
+ if (pccOld) {CopyMemory(pccOld, pcc, dwSize);}
+
+ SetCursor(hcur);
+ hcur = NULL;
+
+ if (CommConfigDialog(pitem->mpp.szFriendlyName, hDlg, pcc))
+ {
+ SetDefaultCommConfig(pitem->mpp.szFriendlyName, pcc, dwSize);
+
+ // Notify TSP only if a setting has changed.
+ if (pccOld)
+ {
+ if (memcmp(pccOld, pcc, dwSize))
+ {
+ NotifyTSP_NewCommConfig(pitem->mpp.szFriendlyName);
+ }
+ }
+
+ idRet = IDOK;
+
+ // Update our item data (the port may have changed)
+ CplDiGetPrivateProperties(hdi, &pitem->devData, &pitem->mpp);
+ ListView_Update(hwndCtl, iSel);
+ }
+
+ if (pccOld)
+ {
+ LocalFree(pccOld);
+ pccOld=NULL;
+ }
+ }
+ else
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_ERR_PROPERTIES),
+ MAKEINTRESOURCE(IDS_CAP_MODEM),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION);
+ }
+
+ LocalFree((HLOCAL)pcc);
+ }
+
+ if (hcur)
+ SetCursor(hcur);
+ }
+ return idRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Free resources associated with the modem list
+Returns:
+Cond: --
+*/
+void
+PRIVATE
+FreeModemListData(
+ IN HWND hLV)
+ {
+ LV_ITEM lvi;
+ DWORD iIndex, cItems;
+ PMODEMITEM pitem;
+
+ // Get the modem count
+ cItems = ListView_GetItemCount(hLV);
+ for (iIndex = 0; iIndex < cItems; iIndex++)
+ {
+ lvi.mask = LVIF_PARAM;
+ lvi.iItem = iIndex;
+ lvi.iSubItem = 0;
+ ListView_GetItem(hLV, &lvi);
+
+ if(NULL != (pitem = (PMODEMITEM)lvi.lParam))
+ {
+ LocalFree(pitem);
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the lisbox with the list of modems
+Returns:
+Cond: --
+*/
+VOID
+PRIVATE
+FillModemLB(
+ IN HWND hDlg,
+ IN HDEVINFO hdi,
+ IN int iSel, // preferred item to select
+ IN int iSubItemToSort // preferred sorting order. (ICOL_*)
+ )
+ {
+ SP_DEVINFO_DATA devData;
+ PMODEMITEM pitem;
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_MODEMLV);
+ LV_ITEM lviItem;
+ DWORD iIndex;
+ int iCount;
+
+ SetWindowRedraw(hwndCtl, FALSE);
+
+ // Remove all the old items and associated resources
+ FreeModemListData(hwndCtl);
+ ListView_DeleteAllItems(hwndCtl);
+
+ // Re-enumerate the modems
+ iIndex = 0;
+
+ devData.cbSize = sizeof(devData);
+ while (CplDiEnumDeviceInfo(hdi, iIndex++, &devData))
+ {
+ // We have a modem, allocate the SP_DEVICEINFO_DATA struct for it
+ pitem = (PMODEMITEM)LocalAlloc(LPTR, sizeof(*pitem));
+ if (pitem)
+ {
+ BOOL bShow = !CplDiIsLocalConnection(hdi, &devData, NULL);
+
+ // Get the device information
+ BltByte(&pitem->devData, &devData, sizeof(devData));
+
+ // Get the private properties of the modem
+ pitem->mpp.cbSize = sizeof(pitem->mpp);
+ pitem->mpp.dwMask = (MPPM_FRIENDLY_NAME | MPPM_DEVICE_TYPE | MPPM_PORT);
+
+ if (bShow &&
+ CplDiGetPrivateProperties(hdi, &devData, &pitem->mpp) &&
+ IsFlagSet(pitem->mpp.dwMask, MPPM_FRIENDLY_NAME | MPPM_DEVICE_TYPE | MPPM_PORT))
+ {
+ int index;
+
+ GetModemImageIndex(LOBYTE(LOWORD(pitem->mpp.nDeviceType)), &index);
+
+ // Insert the modem name
+ lviItem.mask = LVIF_ALL;
+ lviItem.iItem = LV_APPEND;
+ lviItem.iSubItem = ICOL_MODEM;
+ lviItem.state = 0;
+ lviItem.stateMask = 0;
+ lviItem.iImage = index;
+ lviItem.pszText = LPSTR_TEXTCALLBACK;
+ lviItem.lParam = (LPARAM)pitem;
+
+ // (Reuse the index variable)
+ index = ListView_InsertItem(hwndCtl, &lviItem);
+
+ // Set the port column value
+ lviItem.mask = LVIF_TEXT;
+ lviItem.iItem = index;
+ lviItem.iSubItem = ICOL_PORT;
+ lviItem.pszText = LPSTR_TEXTCALLBACK;
+
+ ListView_SetItem(hwndCtl, &lviItem);
+ }
+ else
+ {
+ LocalFree(LOCALOF(pitem));
+ }
+ }
+ }
+
+ // Sort by the requested default
+ ASSERT(iSubItemToSort==ICOL_PORT || iSubItemToSort==ICOL_MODEM);
+ ModemCpl_SortColumn(hwndCtl, iSubItemToSort);
+
+ // Select the requested one
+ iCount = ListView_GetItemCount(hwndCtl);
+
+ if (0 < iCount)
+ {
+ if (iSel>=iCount) iSel = iCount-1;
+ if (iSel<0) iSel = 0;
+ lviItem.mask = LVIF_STATE;
+ lviItem.iItem = iSel;
+ lviItem.iSubItem = 0;
+ lviItem.state = LVIS_SELECTED|LVIS_FOCUSED;
+ lviItem.stateMask = LVIS_SELECTED|LVIS_FOCUSED;
+ ListView_SetItem(hwndCtl, &lviItem);
+ ListView_EnsureVisible(hwndCtl, iSel, FALSE);
+ }
+
+ SetWindowRedraw(hwndCtl, TRUE);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Clone a modem
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+CloneModem(
+ IN HWND hDlg,
+ IN LPMODEMDLG lpmd)
+ {
+ int iSel;
+ PMODEMITEM pitem;
+ LV_ITEM lvi;
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_MODEMLV);
+
+ iSel = ListView_GetNextItem(hwndCtl, -1, LVNI_SELECTED);
+ if (-1 != iSel)
+ {
+ HDEVINFO hdi = lpmd->hdi;
+ LPSETUPINFO psi;
+
+ lvi.mask = LVIF_PARAM;
+ lvi.iItem = iSel;
+ lvi.iSubItem = 0;
+ ListView_GetItem(hwndCtl, &lvi);
+
+ pitem = (PMODEMITEM)lvi.lParam;
+
+ if (NO_ERROR != SetupInfo_Create(&psi, hdi, &pitem->devData, NULL, NULL))
+ {
+ // Out of memory
+ MsgBox(g_hinst, hDlg,
+ MAKEINTRESOURCE(IDS_OOM_CLONE),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONERROR);
+ }
+ else
+ {
+ if (IDOK == DialogBoxParam(g_hinst,
+ MAKEINTRESOURCE(IDD_CLONE),
+ hDlg,
+ CloneDlgProc,
+ (LPARAM)psi))
+ {
+ BOOL bRet;
+ HCURSOR hcurSav = SetCursor(LoadCursor(NULL, IDC_WAIT));
+ LPCTSTR pszPort;
+
+ // Clone this modem for all the ports in the port list
+ ASSERT(psi->pszPortList);
+
+ bRet = CplDiBuildModemDriverList(hdi, &pitem->devData);
+
+ SetCursor(hcurSav);
+
+ if (bRet)
+ {
+ // Install a device for each port in the port list
+ CplDiInstallModemFromDriver(hdi, hDlg,
+ &psi->pszPortList,
+ IMF_DEFAULT);
+ }
+
+ FillModemLB(hDlg, hdi, 0, ICOL_MODEM);
+ }
+ SetupInfo_Destroy(psi);
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Removes a modem from the modem list
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+RemoveModem(
+ IN HWND hDlg,
+ IN LPMODEMDLG lpmd)
+ {
+ int iSel;
+ PMODEMITEM pitem;
+ LV_ITEM lvi;
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_MODEMLV);
+
+ iSel = ListView_GetNextItem(hwndCtl, -1, LVNI_SELECTED);
+ if (-1 != iSel)
+ {
+ HDEVINFO hdi = lpmd->hdi;
+ HCURSOR hcurSav;
+
+ lvi.mask = LVIF_PARAM;
+ lvi.iItem = iSel;
+ lvi.iSubItem = 0;
+ ListView_GetItem(hwndCtl, &lvi);
+
+ hcurSav = SetCursor(LoadCursor(NULL, IDC_WAIT));
+
+ pitem = (PMODEMITEM)lvi.lParam;
+
+ // Ask the user first
+ if (IDYES == MsgBox(g_hinst, hDlg,
+ MAKEINTRESOURCE(IDS_WRN_CONFIRMDELETE),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_YESNO | MB_QUESTION,
+ pitem->mpp.szFriendlyName))
+ {
+ // Get the name of the common driver key for this driver, in
+ // preparation for calling DeleteCommonDriverKeyByName() after the
+ // device is successfully removed.
+ HKEY hkey = NULL;
+ TCHAR szComDrv[MAX_REG_KEY_LEN];
+
+ hkey = CplDiOpenDevRegKey(hdi, &pitem->devData,
+ DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_READ);
+
+ if (hkey == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiOpenDevRegKey() returned error %#08lx", GetLastError());
+ }
+
+ if (!FindCommonDriverKeyName(hkey, sizeof(szComDrv), szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "GetCommonDriverKeyName() FAILED.");
+ szComDrv[0] = 0;
+ }
+
+ if (hkey)
+ RegCloseKey(hkey);
+
+ if (!CplDiRemoveDevice(hdi, &pitem->devData))
+ {
+ MsgBox(g_hinst, hDlg,
+ MAKEINTRESOURCE(IDS_ERR_CANT_DEL_MODEM),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ERROR,
+ pitem->mpp.szFriendlyName, pitem->mpp.szPort);
+ }
+ else
+ {
+ gDeviceFlags |= fDF_DEVICE_REMOVED;
+
+ if (szComDrv[0] != 0)
+ {
+ if (!DeleteCommonDriverKeyByName(szComDrv))
+ {
+ TRACE_MSG(TF_ERROR, "DeleteCommonDriverKey() FAILED.");
+ }
+ }
+ }
+
+ FillModemLB(hDlg, hdi, iSel, g_CurrentSubItemToSort);
+ }
+
+ SetCursor(hcurSav);
+ }
+ }
+
+
+#ifdef TAPI_WORKS
+
+#define LOCATION_GROW 4
+
+#define TAPI_API_VERSION 0x00010004 // Per BernieM
+
+/*----------------------------------------------------------
+Purpose: Gets the appropriately sized translate caps structure
+ from TAPI. Return TRUE if successful
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PRIVATE
+GetTranslateCaps(
+ OUT LPLINETRANSLATECAPS FAR * pptc)
+ {
+ LONG lineErr;
+ LPLINETRANSLATECAPS ptc;
+ DWORD cbSize;
+
+ cbSize = sizeof(*ptc) * LOCATION_GROW;
+ ptc = (LPLINETRANSLATECAPS)GlobalAllocPtr(GPTR, cbSize);
+ if (ptc)
+ {
+ // Get the translate devcaps
+ ptc->dwTotalSize = cbSize;
+ lineErr = lineGetTranslateCaps(NULL, TAPI_API_VERSION, ptc);
+ if (LINEERR_STRUCTURETOOSMALL == lineErr ||
+ ptc->dwNeededSize > ptc->dwTotalSize)
+ {
+ // Provided structure was too small, resize and try again
+ cbSize = ptc->dwNeededSize;
+ GlobalFreePtr(ptc);
+ ptc = (LPLINETRANSLATECAPS)GlobalAllocPtr(GPTR, cbSize);
+ if (ptc)
+ {
+ ptc->dwTotalSize = cbSize;
+ lineErr = lineGetTranslateCaps(NULL, TAPI_API_VERSION, ptc);
+ if (0 != lineErr)
+ {
+ // Failure
+ GlobalFreePtr(ptc);
+ ptc = NULL;
+ }
+ }
+ }
+ else if (0 != lineErr)
+ {
+ // Failure
+ GlobalFreePtr(ptc);
+ ptc = NULL;
+ }
+ }
+
+ *pptc = ptc;
+
+ return NULL != *pptc;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the Dialing locations listbox
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+SetCurrentLocation(
+ IN HWND hdlg)
+ {
+ LPLINETRANSLATECAPS ptc;
+ HWND hwndLoc = GetDlgItem(hdlg, IDC_LOC);
+
+ if (GetTranslateCaps(&ptc))
+ {
+ DWORD i;
+ LPLINELOCATIONENTRY ple;
+ DWORD dwCurLocID = ptc->dwCurrentLocationID;
+
+ // Find the current location
+ ple = (LPLINELOCATIONENTRY)((LPBYTE)ptc + ptc->dwLocationListOffset);
+ for (i = 0; i < ptc->dwNumLocations; i++, ple++)
+ {
+ if (dwCurLocID == ple->dwPermanentLocationID)
+ {
+ LPTSTR pszName = (LPTSTR)((LPBYTE)ptc +
+ ple->dwLocationNameOffset);
+ SetWindowText(hwndLoc, pszName);
+ break;
+ }
+ }
+
+ GlobalFreePtr(ptc);
+ }
+ }
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG handler
+
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL
+PRIVATE
+ModemCpl_OnInitDialog(
+ IN HWND hDlg,
+ IN HWND hwndFocus,
+ IN LPARAM lParam)
+ {
+ HIMAGELIST himl;
+ LV_COLUMN lvcol;
+ LPMODEMDLG lpmd;
+ TCHAR sz[MAX_BUF];
+ HWND hwndCtl;
+
+ if (!USER_IS_ADMIN())
+ {
+ // Don't let the non-admin user add modems
+ HWND hwndAdd = GetDlgItem(hDlg, IDC_ADD);
+ Button_Enable(hwndAdd, FALSE);
+ }
+
+ SetWindowLong(hDlg, DWL_USER, ((LPPROPSHEETPAGE)lParam)->lParam);
+ lpmd = (LPMODEMDLG)((LPPROPSHEETPAGE)lParam)->lParam;
+ lpmd->cSel = 0;
+
+ hwndCtl = GetDlgItem(hDlg, IDC_MODEMLV);
+
+ // Use the "full line highlight" feature to highlight across all columns
+ SendMessage(hwndCtl, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
+
+ // Get the modem icon image list
+ if (GetModemImageList(&himl))
+ {
+ ListView_SetImageList(hwndCtl, himl, TRUE);
+ }
+ else
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_OPENCPL),
+ MAKEINTRESOURCE(IDS_CAP_MODEM),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION);
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_CANCEL);
+ }
+
+ // Insert the modem column. The widths are calculated in ModemFillLB.
+ lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
+ lvcol.fmt = LVCFMT_LEFT;
+ lvcol.cx = 0;
+ lvcol.iSubItem = ICOL_MODEM;
+ lvcol.pszText = SzFromIDS(g_hinst, IDS_MODEM, sz, sizeof(sz));
+ ListView_InsertColumn(hwndCtl, ICOL_MODEM, &lvcol);
+
+ // Insert the port column
+ lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
+ lvcol.fmt = LVCFMT_LEFT;
+ lvcol.cx = 0;
+ lvcol.iSubItem = ICOL_PORT;
+ lvcol.pszText = SzFromIDS(g_hinst, IDS_PORT, sz, sizeof(sz));
+ ListView_InsertColumn(hwndCtl, ICOL_PORT, &lvcol);
+
+ FillModemLB(hDlg, lpmd->hdi, 0, ICOL_MODEM);
+
+ // Set the column widths. Try to fit both columns on the
+ // control without requiring horizontal scrolling.
+ ListView_SetColumnWidth(hwndCtl, ICOL_MODEM, LVSCW_AUTOSIZE_USEHEADER);
+ ListView_SetColumnWidth(hwndCtl, ICOL_PORT, LVSCW_AUTOSIZE_USEHEADER);
+
+ PropSheet_CancelToClose(GetParent(hDlg));
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+ModemCpl_OnCommand(
+ IN HWND hDlg,
+ IN int id,
+ IN HWND hwndCtl,
+ IN UINT uNotifyCode)
+ {
+ LPMODEMDLG lpmd = (LPMODEMDLG)GetWindowLong(hDlg, DWL_USER);
+
+ switch (id)
+ {
+ case IDC_ADD:
+ // Kick off the modem wizard.
+ DoWizard(hDlg, lpmd->hdi);
+ FillModemLB(hDlg, lpmd->hdi, 0, ICOL_MODEM);
+ break;
+
+ case MIDM_REMOVE:
+ case IDC_REMOVE:
+ RemoveModem(hDlg, lpmd);
+ break;
+
+ case MIDM_PROPERTIES:
+ case IDC_PROPERTIES:
+ DoModemProperties(hDlg, lpmd->hdi);
+ break;
+
+ case MIDM_CLONE:
+ CloneModem(hDlg, lpmd);
+ break;
+
+#ifdef TAPI_WORKS
+ case IDC_DIALPROP:
+ DoDialingProperties(hDlg, FALSE, FALSE);
+ SetCurrentLocation(hDlg);
+ break;
+#endif
+ }
+
+ }
+
+
+// This structure is used by the ModemCpl_Compare function to
+// sort the listview columns
+typedef struct tagSORTPARAMS
+ {
+ int icol;
+ BOOL bAscending;
+ } SORTPARAMS, FAR* PSORTPARAMS;
+
+
+/*----------------------------------------------------------
+Purpose: Comparison function for sorting columns
+
+Returns:
+Cond: --
+*/
+int
+CALLBACK
+ModemCpl_Compare(
+ IN LPARAM lparam1,
+ IN LPARAM lparam2,
+ IN LPARAM lparamSort)
+ {
+ int iRet;
+ PMODEMITEM pitem1 = (PMODEMITEM)lparam1;
+ PMODEMITEM pitem2 = (PMODEMITEM)lparam2;
+ PSORTPARAMS pparams = (PSORTPARAMS)lparamSort;
+
+ switch (pparams->icol)
+ {
+ case ICOL_MODEM:
+ //iRet = lstrcmp(pitem1->mpp.szFriendlyName, pitem2->mpp.szFriendlyName);
+ iRet = my_lstrcmp_an(pitem1->mpp.szFriendlyName, pitem2->mpp.szFriendlyName);
+ break;
+
+ case ICOL_PORT:
+ // iRet = lstrcmp(pitem1->mpp.szPort, pitem2->mpp.szPort);
+ iRet = my_lstrcmp_an(pitem1->mpp.szPort, pitem2->mpp.szPort);
+ break;
+ }
+
+ return iRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sorts one of the listview columns
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+ModemCpl_SortColumn(
+ IN HWND hwndCtl,
+ IN int icol)
+ {
+ SORTPARAMS params;
+
+ params.icol = icol;
+ params.bAscending = TRUE;
+
+ ListView_SortItems(hwndCtl, ModemCpl_Compare, (LPARAM)&params);
+ g_CurrentSubItemToSort = icol;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Show the context menu
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+ModemCpl_DoContextMenu(
+ IN HWND hDlg,
+ IN LPPOINT ppt)
+ {
+ HMENU hmenu = LoadMenu(g_hinst, MAKEINTRESOURCE(POPUP_CONTEXT));
+
+ if (hmenu)
+ {
+ HMENU hmenuContext = GetSubMenu(hmenu, 0);
+ TrackPopupMenu(hmenuContext, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
+ ppt->x, ppt->y, 0, hDlg, NULL);
+
+ DestroyMenu(hmenu);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+
+Returns: varies
+Cond: --
+*/
+LRESULT
+PRIVATE
+ModemCpl_OnNotify(
+ IN HWND hDlg,
+ IN int idFrom,
+ IN NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+ LPMODEMDLG lpmd = (LPMODEMDLG)GetWindowLong(hDlg, DWL_USER);
+ HWND hwndFocus;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+#ifdef TAPI_WORKS
+ SetCurrentLocation(hDlg);
+#endif
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ break;
+
+ case NM_RCLICK:
+ if (IDC_MODEMLV == lpnmhdr->idFrom)
+ {
+ // Was an item clicked?
+ HWND hwndCtl = lpnmhdr->hwndFrom;
+ LV_HITTESTINFO ht;
+ POINT pt;
+
+ GetCursorPos(&pt);
+ ht.pt = pt;
+
+ ScreenToClient(hwndCtl, &ht.pt);
+ ListView_HitTest(hwndCtl, &ht);
+
+ if (ht.flags & LVHT_ONITEM)
+ {
+ // Yes: don't bring up the menu if it's a non-Admin user.
+ // They're not allowed to do any of these operations.
+ if (USER_IS_ADMIN())
+ ModemCpl_DoContextMenu(hDlg, &pt);
+ }
+ }
+ break;
+
+ case NM_RETURN:
+ SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_PROPERTIES, BN_CLICKED),
+ (LPARAM)GetDlgItem(hDlg, IDC_PROPERTIES));
+ break;
+
+ case LVN_KEYDOWN:
+ {
+ NM_LISTVIEW FAR * lpnm_lv = (NM_LISTVIEW FAR *)lpnmhdr;
+
+ switch (((LV_KEYDOWN FAR *)lpnm_lv)->wVKey)
+ {
+ case VK_DELETE:
+ RemoveModem(hDlg, lpmd);
+ break;
+
+ case VK_F10:
+ // Shift-F10 brings up the context menu
+
+ // Is the shift down?
+ if ( !(0x8000 & GetKeyState(VK_SHIFT)) )
+ {
+ // No; break
+ break;
+ }
+
+ // Yes; fall thru
+
+ case VK_APPS: { // Context menu
+ HWND hwndCtl = lpnmhdr->hwndFrom;
+ int iSel;
+
+ iSel = ListView_GetNextItem(hwndCtl, -1, LVNI_SELECTED);
+ if (-1 != iSel)
+ {
+ RECT rc;
+ POINT pt;
+
+ ListView_GetItemRect(hwndCtl, iSel, &rc, LVIR_ICON);
+ pt.x = rc.left + ((rc.right - rc.left) / 2);
+ pt.y = rc.top + ((rc.bottom - rc.top) / 2);
+ ClientToScreen(hwndCtl, &pt);
+
+ ModemCpl_DoContextMenu(hDlg, &pt);
+ }
+ }
+ break;
+ }
+ }
+ break;
+
+ case LVN_COLUMNCLICK:
+ {
+ NM_LISTVIEW FAR * lpnm_lv = (NM_LISTVIEW FAR *)lpnmhdr;
+
+ ModemCpl_SortColumn(lpnmhdr->hwndFrom, lpnm_lv->iSubItem);
+ }
+ break;
+
+ case LVN_GETDISPINFO:
+ {
+ LV_ITEM FAR * plvitem = &((LV_DISPINFO FAR *)lpnmhdr)->item;
+
+ // Getting the display text for the item?
+ if (IsFlagSet(plvitem->mask, LVIF_TEXT))
+ {
+ // Yes
+ PMODEMITEM pitem = (PMODEMITEM)plvitem->lParam;
+
+ if (ICOL_MODEM == plvitem->iSubItem)
+ {
+
+#ifdef UNDER_CONTRUCTION
+ TCHAR rgchDisplayName[MAX_BUF_REG];
+ // Add prefix spaces to get the list box sort order
+ // to work right (display COM2 before COM12, etc).
+ ASSERT(sizeof(rgchDisplayName)==sizeof(pitem->mpp.szFriendlyName));
+ FormatFriendlyNameForDisplay
+ (
+ pitem->mpp.szFriendlyName,
+ rgchDisplayName,
+ sizeof(rgchDisplayName)/sizeof(TCHAR)
+ );
+
+ lstrcpyn(plvitem->pszText, rgchDisplayName, plvitem->cchTextMax);
+#else //!UNDER_CONTRUCTION
+ lstrcpyn(plvitem->pszText, pitem->mpp.szFriendlyName, plvitem->cchTextMax);
+#endif //!UNDER_CONSTRUCTION
+ }
+ else if (ICOL_PORT == plvitem->iSubItem)
+ {
+#ifdef UNDER_CONTRUCTION
+ TCHAR rgchDisplayName[MAX_BUF_REG];
+ ASSERT(sizeof(rgchDisplayName)==sizeof(pitem->mpp.szPort));
+
+ // Add prefix spaces to get the list box sort order
+ // to work right (display COM2 before COM12, etc).
+ FormatPortForDisplay
+ (
+ pitem->mpp.szPort,
+ rgchDisplayName,
+ sizeof(rgchDisplayName)/sizeof(TCHAR)
+ );
+
+ lstrcpyn(plvitem->pszText, rgchDisplayName, plvitem->cchTextMax);
+#else //!UNDER_CONTRUCTION
+ lstrcpyn(plvitem->pszText, pitem->mpp.szPort, plvitem->cchTextMax);
+#endif //!UNDER_CONTRUCTION
+ }
+ }
+ }
+ break;
+
+ case LVN_ITEMCHANGED:
+ {
+ NM_LISTVIEW FAR * lpnm_lv = (NM_LISTVIEW FAR *)lpnmhdr;
+
+ if (IsFlagSet(lpnm_lv->uChanged, LVIF_STATE))
+ {
+ // Disable/enable buttons based on selection change
+ HWND hwndProp = GetDlgItem(hDlg, IDC_PROPERTIES);
+ HWND hwndDel = GetDlgItem(hDlg, IDC_REMOVE);
+
+ if (IsFlagClear(lpnm_lv->uOldState, LVIS_SELECTED) &&
+ IsFlagSet(lpnm_lv->uNewState, LVIS_SELECTED))
+ {
+ lpmd->cSel++;
+ }
+ else if (IsFlagSet(lpnm_lv->uOldState, LVIS_SELECTED) &&
+ IsFlagClear(lpnm_lv->uNewState, LVIS_SELECTED))
+ {
+ lpmd->cSel--;
+ }
+
+ // Avoid flash
+ if (0 == lpmd->cSel && TRUE == IsWindowEnabled(hwndProp))
+ {
+ hwndFocus = GetFocus();
+
+ Button_Enable(hwndProp, FALSE);
+ Button_Enable(hwndDel, FALSE);
+
+ if ( !hwndFocus || !IsWindowEnabled(hwndFocus) )
+ {
+ SetFocus(GetDlgItem(hDlg, IDC_ADD));
+ SendMessage(hDlg, DM_SETDEFID, IDC_ADD, 0);
+ }
+ }
+ else if (1 == lpmd->cSel && FALSE == IsWindowEnabled(hwndProp))
+ {
+ Button_Enable(hwndProp, USER_IS_ADMIN());
+ Button_Enable(hwndDel, USER_IS_ADMIN());
+ }
+ }
+ }
+ break;
+
+ case LVN_DELETEALLITEMS:
+ hwndFocus = GetFocus();
+
+ Button_Enable(GetDlgItem(hDlg, IDC_PROPERTIES), FALSE);
+ Button_Enable(GetDlgItem(hDlg, IDC_REMOVE), FALSE);
+ lpmd->cSel = 0;
+
+ if ( !hwndFocus || !IsWindowEnabled(hwndFocus) )
+ {
+ SetFocus(GetDlgItem(hDlg, IDC_ADD));
+ SendMessage(hDlg, DM_SETDEFID, IDC_ADD, 0);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DEVICECHANGE handler
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+ModemCpl_OnDeviceChange(
+ IN HWND hDlg,
+ IN UINT nDbt)
+ {
+#ifdef FULL_PNP
+ if (DBT_DEVNODES_CHANGED == uDbt)
+ {
+ // Refresh listview
+ CplDiDestroyDeviceInfoList(lpmd->hdi);
+
+ CplDiGetModemDevs(&lpmd->hdi, hDlg, DIGCF_PRESENT, NULL);
+ FillModemLB(hDlg, lpmd->hdi, 0, ICOL_MODEM);
+ }
+ return FALSE;
+#endif //FULL_PNP
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DESTROY handler
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+ModemCpl_OnDestroy(
+ IN HWND hDlg)
+ {
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+ if (DEVICE_CHANGED(gDeviceFlags))
+ {
+ HandleDeviceChange(gDeviceFlags, GetDesktopWindow() );
+ }
+#endif // INSTANT_DEVICE_ACTIVATION
+
+ // Need to free the device info structs for each modem
+ FreeModemListData((HWND)GetDlgItem(hDlg, IDC_MODEMLV));
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Dialog proc for main modem CPL dialog
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK ModemCplDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ (UINT)IDC_STATIC, IDH_MODEM_INSTALLED,
+ IDC_CLASSICON, IDH_MODEM_INSTALLED,
+ IDC_MODEMLV, IDH_MODEM_INSTALLED,
+ IDC_ADD, IDH_MODEM_ADD,
+ IDC_REMOVE, IDH_MODEM_REMOVE,
+ IDC_PROPERTIES, IDH_MODEM_PROPERTIES,
+ IDC_DIALPROP, IDH_MODEM_DIALING_PROPERTIES,
+ IDC_LOC, IDH_MODEM_DIALING_PROPERTIES,
+ 0, 0 };
+#pragma data_seg()
+
+ switch (message)
+ {
+ HANDLE_MSG(hDlg, WM_INITDIALOG, ModemCpl_OnInitDialog);
+ HANDLE_MSG(hDlg, WM_DESTROY, ModemCpl_OnDestroy);
+ HANDLE_MSG(hDlg, WM_COMMAND, ModemCpl_OnCommand);
+ HANDLE_MSG(hDlg, WM_NOTIFY, ModemCpl_OnNotify);
+
+ case WM_DEVICECHANGE:
+ ModemCpl_OnDeviceChange(hDlg, (UINT)wParam);
+ break;
+
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szWinHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ break;
+
+ case WM_CONTEXTMENU:
+ // Don't bring up help context menu on list view control - it
+ // already has a popup menu on the right mouse click.
+ if (GetWindowLong((HWND)wParam, GWL_ID) != IDC_MODEMLV)
+ WinHelp((HWND)wParam, c_szWinHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ break;
+ }
+
+ return FALSE;
+ }
+
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+
+BOOL IsRasInstalled(void);
+DWORD LaunchRasCpl(BOOL fInstall, HWND hWndOwner);
+
+void HandleDeviceChange(DWORD dwDeviceFlags, HWND hWndOwner)
+{
+ HDEVINFO hdi=NULL;
+ BOOL bInstalled=FALSE;
+
+ DBG_ENTER(HandleDeviceChange);
+
+ // BUG BUG -- if a device is added the class instaler (ci.c) will
+ // notify the TSP -- so if a device is both added and removed, the TSP
+ // will be notified twice. The tsp will probably enumerate the modems
+ // twice. This may be quite OK.
+ if (DEVICE_REMOVED(dwDeviceFlags))
+ {
+ NotifyTSP_ReEnum();
+ }
+
+ //
+ if (DEVICE_CHANGED(dwDeviceFlags) && IsRasInstalled())
+ {
+ TRACE_MSG(TF_GENERAL, "Ras is installed");
+ if (IDYES == MsgBox(g_hinst, hWndOwner,
+ MAKEINTRESOURCE(IDS_NT_CONFIG_RAS),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_YESNO | MB_QUESTION))
+ {
+ LaunchRasCpl(FALSE, hWndOwner);
+ }
+ }
+ DBG_EXIT(HandleDeviceChange);
+}
+
+/* Returns true if RAS is installed, false if not.
+*/
+BOOL IsRasInstalled(void)
+{
+ HKEY hkey;
+ BOOL fInstalled;
+
+ if (RegOpenKey( HKEY_LOCAL_MACHINE,
+ TEXT("SOFTWARE\\Microsoft\\RAS"), &hkey ) == 0)
+ {
+ RegCloseKey( hkey );
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+DWORD
+(* fNetSetupReviewBindings) (
+ HWND hwndParent,
+ DWORD Reserved
+);
+
+/* Runs the RAS install program.
+**
+** Returns 0 if successful, or an error code.
+*/
+DWORD LaunchRasCpl(BOOL fInstall, HWND hWndOwner)
+{
+ DWORD dwExitCode;
+ TCHAR szCmd[ (MAX_PATH * 2) + 50 + 1 ];
+ TCHAR szSysDir[ MAX_PATH + 1 ];
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ BOOL f;
+ char *apszArgs[3];
+ char *pszResult;
+ char buffer[32];
+ HMODULE hModule;
+
+ /* Determine if user is an admin so we know which menu to present.
+ */
+ {
+ // +++ Removed code --
+ }
+
+ szSysDir[ 0 ] = TEXT('\0');
+ GetSystemDirectory( szSysDir, MAX_PATH );
+
+ wsprintf( szCmd, TEXT("%s\\setup.exe /F /I %s\\oemnsvra.inf /W %d /T RAS_INSTALL_MODE = %s"),
+ szSysDir, szSysDir, hWndOwner,
+ (fInstall)?TEXT("Install"):TEXT("Configure"));
+
+ ZeroMemory( &si, sizeof(si) );
+ si.cb = sizeof(si);
+ si.lpTitle = NULL;
+
+ TRACE_MSG(TF_GENERAL, "InstallCmd=%s",szCmd);
+
+ f = CreateProcess(
+ NULL, szCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );
+
+ WaitForSingleObject( pi.hProcess, INFINITE );
+
+ if (f)
+ {
+ GetExitCodeProcess( pi.hProcess, &dwExitCode );
+ CloseHandle( pi.hThread );
+ CloseHandle( pi.hProcess );
+ }
+ else
+ dwExitCode = GetLastError();
+
+#if 1
+ if (dwExitCode == 1) {
+ hModule = LoadLibrary( TEXT("NETCFG.DLL") );
+ if( hModule == NULL )
+ {
+ dwExitCode = GetLastError();
+ return dwExitCode;
+ }
+
+ fNetSetupReviewBindings = (PVOID)GetProcAddress( hModule, "NetSetupReviewBindings" );
+ if( fNetSetupReviewBindings == NULL )
+ {
+ dwExitCode = GetLastError();
+ return dwExitCode;
+ }
+
+ TRACE_MSG(TF_GENERAL, "Install: Calling NetSetupReviewBindings");
+
+ if(( dwExitCode = (*fNetSetupReviewBindings)( hWndOwner, 0)) != ERROR_SUCCESS )
+ {
+ return dwExitCode;
+ }
+
+ TRACE_MSG(TF_GENERAL, "Install: Returned from NetSetupReviewBindings");
+
+ if (RestartComputerDlg( NULL ))
+ {
+ RestartComputer();
+ }
+ dwExitCode = 0;
+ }
+ TRACE_MSG(TF_GENERAL, "InstallCmd=%d", dwExitCode);
+#endif
+
+ return dwExitCode;
+}
+
+BOOL ConfigureModemSys(BOOL fModemsPresent)
+{
+ SC_HANDLE schModemSys=NULL;
+ SC_HANDLE schSCManager=NULL;
+ SERVICE_STATUS ServiceStatus;
+ BOOL fRet=FALSE;
+ LPQUERY_SERVICE_CONFIG lpQSC=NULL;
+ DWORD dwcbNeeded=0;
+ DWORD dwStartType=0;
+
+ schSCManager=OpenSCManager(
+ NULL,
+ NULL,
+ SC_MANAGER_ALL_ACCESS
+ );
+
+ if (!schSCManager)
+ {
+ TRACE_MSG(TF_GENERAL, "OpenSCManager() failed!");
+ goto end;
+ }
+
+ schModemSys=OpenService(
+ schSCManager,
+ TEXT("modem"),
+ SERVICE_CHANGE_CONFIG|
+ SERVICE_QUERY_CONFIG|
+ SERVICE_QUERY_STATUS
+ );
+
+ if (!schModemSys)
+ {
+ TRACE_MSG(TF_GENERAL, "OpenService() for modem.sys failed!");
+ goto end;
+ }
+
+ //fRet=QueryServiceStatus(
+ // schModemSys,
+ // &ServiceStatus
+ // );
+
+ fRet=QueryServiceConfig(
+ schModemSys,
+ NULL,
+ 0,
+ &dwcbNeeded
+ );
+ if ((!fRet && GetLastError()!=ERROR_INSUFFICIENT_BUFFER)||!dwcbNeeded)
+ {
+ TRACE_MSG(TF_GENERAL, "Totally wierd!");
+ goto end;
+ }
+
+ lpQSC = LocalAlloc(LPTR, dwcbNeeded);
+
+ if (!lpQSC)
+ {
+ goto end;
+ }
+
+ fRet=QueryServiceConfig(
+ schModemSys,
+ lpQSC,
+ dwcbNeeded,
+ &dwcbNeeded
+ );
+
+ if (!fRet)
+ {
+ TRACE_MSG(TF_GENERAL, "QueryServiceConfig failed 2nd time!");
+ goto end;
+ }
+
+ TRACE_MSG(TF_GENERAL, "Service: Type=%lx; Start=%lx; Err=%lx",
+ lpQSC->dwServiceType,
+ lpQSC->dwStartType,
+ lpQSC->dwErrorControl
+ );
+
+ if (fModemsPresent)
+ {
+ if (lpQSC->dwServiceType==SERVICE_KERNEL_DRIVER
+ || lpQSC->dwServiceType==SERVICE_FILE_SYSTEM_DRIVER)
+ {
+ TRACE_MSG(TF_GENERAL, "Service: Setting SystemStartup");
+ dwStartType = SERVICE_SYSTEM_START;
+ }
+ else
+ {
+ TRACE_MSG(TF_GENERAL, "Service: Setting Auto Startup");
+ dwStartType = SERVICE_AUTO_START;
+ }
+ }
+ else
+ {
+ dwStartType = SERVICE_DEMAND_START;
+ }
+
+ fRet=ChangeServiceConfig(
+ schModemSys,
+ SERVICE_NO_CHANGE,
+ dwStartType,
+ SERVICE_NO_CHANGE,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ lpQSC->lpDisplayName
+ );
+
+ if (!fRet)
+ {
+ TRACE_MSG(TF_GENERAL, "ServiceConfig returns err %08lx",
+ GetLastError());
+ }
+
+ // fall through...
+
+end:
+
+ if (schModemSys) CloseServiceHandle(schModemSys);
+ if (schSCManager) CloseServiceHandle(schSCManager);
+ if (lpQSC) LocalFree(lpQSC);
+
+ return fRet;
+
+}
+
+
+BOOL
+RestartComputerDlg(
+ IN HWND hwndOwner )
+
+ /* Popup that asks the user to restart. 'HwndOwner' is the owning window.
+ **
+ ** Returns true if user selects "Yes", false otherwise.
+ */
+{
+ int nStatus=FALSE;
+
+ TRACE_MSG(TF_GENERAL, "RestartComputerDlg");
+
+#if 0
+ nStatus =
+ (BOOL )DialogBoxParam(
+ g_hinst,
+ MAKEINTRESOURCE( DID_RC_Restart ),
+ hwndOwner,
+ RcDlgProc,
+ (LPARAM )NULL );
+
+ if (nStatus == -1)
+ nStatus = FALSE;
+#else // 0
+ // Ask the user first
+ if (IDYES == MsgBox(g_hinst, hwndOwner,
+ MAKEINTRESOURCE(IDS_ASK_REBOOTNOW),
+ MAKEINTRESOURCE(IDS_CAP_RASCONFIG),
+ NULL,
+ MB_YESNO | MB_ICONEXCLAMATION))
+ {
+ nStatus = TRUE;
+ }
+
+#endif // 0
+
+ return (BOOL )nStatus;
+}
+
+BOOL
+RestartComputer()
+
+ /* Called if user chooses to shut down the computer.
+ **
+ ** Return false if failure, true otherwise
+ */
+{
+ HANDLE hToken; /* handle to process token */
+ TOKEN_PRIVILEGES tkp; /* ptr. to token structure */
+ BOOL fResult; /* system shutdown flag */
+
+ TRACE_MSG(TF_GENERAL, "RestartComputer");
+
+ /* Enable the shutdown privilege */
+
+ if (!OpenProcessToken( GetCurrentProcess(),
+ TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
+ &hToken))
+ return FALSE;
+
+ /* Get the LUID for shutdown privilege. */
+
+ LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
+
+ tkp.PrivilegeCount = 1; /* one privilege to set */
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+
+ /* Get shutdown privilege for this process. */
+
+ AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
+
+ /* Cannot test the return value of AdjustTokenPrivileges. */
+
+ if (GetLastError() != ERROR_SUCCESS)
+ return FALSE;
+
+ if( !ExitWindowsEx(EWX_REBOOT, 0))
+ return FALSE;
+
+ /* Disable shutdown privilege. */
+
+ tkp.Privileges[0].Attributes = 0;
+ AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
+
+ if (GetLastError() != ERROR_SUCCESS)
+ return FALSE;
+
+ return TRUE;
+}
+#endif // INSTANT_DEVICE_ACTIVATION
+
+int my_atol(LPTSTR lptsz);
+
+// Special-case alphanumeric stringcmp.
+//
+// The function returns for various combinations of input are give below.
+// Note that it only does a numeric comparison for the tail end of the string.
+// So, for example, it claims "2a" > "12". It also claims "a2 > a01". Big deal.
+// The following data was actually generated by calling this function.
+//
+// fn("","")=0 fn("a","a")=0 fn("1","11")=-1 fn("a2","a12")=-990
+// fn("","1")=-1 fn("1","1")=0 fn("11","1")=1 fn("a12","a2")=990
+// fn("1","")=1 fn("a","1")=1 fn("1","12")=-1 fn("12a","2a")=-1
+// fn("","a")=-1 fn("1","a")=-1 fn("12","1")=1 fn("2a","12a")=1
+// fn("a","")=1 fn("a","b")=-1 fn("2","12")=-990 fn("a2","a01")=-879
+// fn("b","a")=1 fn("12","2")=990 fn("101","12")=879
+// fn("1","2")=-11 fn("2","1")=11
+//
+int my_lstrcmp_an(LPTSTR lptsz1, LPTSTR lptsz2)
+{
+ int i1, i2;
+
+ // Skip common prefix
+ while(*lptsz1 && *lptsz1==*lptsz2)
+ {
+ lptsz1++;
+ lptsz2++;
+ }
+ i1 = my_atol(lptsz1);
+ i2 = my_atol(lptsz2);
+
+ if (i1==MAXDWORD || i2==MAXDWORD) return lstrcmp(lptsz1, lptsz2);
+ else return i1-i2;
+}
+
+int my_atol(LPTSTR lptsz)
+{
+ int i = (int) *lptsz;
+ int iRet=1;
+
+ if (!i) goto bail;
+
+ do
+ {
+ if (i<'0' || i>'9') goto bail;
+ iRet*=10;
+ iRet+=i-'0';
+ i = (int) *lptsz++;
+ } while(i);
+
+ return iRet;
+
+bail:
+ return MAXDWORD;
+}
diff --git a/private/unimodem/cpl/detect.c b/private/unimodem/cpl/detect.c
new file mode 100644
index 000000000..8815b78fe
--- /dev/null
+++ b/private/unimodem/cpl/detect.c
@@ -0,0 +1,2390 @@
+/*
+ * Detection routines for modems.
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1994
+ * All rights reserved
+ *
+ */
+
+#include "proj.h"
+
+#include <stdarg.h>
+
+#define CR '\r'
+#define LF '\n'
+
+#define RESPONSE_RCV_DELAY 5000 // A long time (5 secs) because
+ // once we have acquired the modem
+ // we can afford the wait.
+
+#define MAX_QUERY_RESPONSE_LEN 100
+#define MAX_SHORT_RESPONSE_LEN 30 // echo of ATE0Q0V1<cr> and
+ // <cr><lf>ERROR<cr><lf> by a
+ // little margin
+
+#define ATI0_LEN 30 // amount of the ATI0 query that
+ // we will save
+
+#define ATI0 0 // we will use this result completely
+#define ATI4 4 // we will use this result completely,
+ // if it matches the Hayes format
+ // (check for 'a' at beginning)
+
+// Return values for the FindModem function
+//
+#define RESPONSE_USER_CANCEL (-4) // user requested cancel
+#define RESPONSE_UNRECOG (-3) // got some chars, but didn't
+ // understand them
+#define RESPONSE_NONE (-2) // didn't get any chars
+#define RESPONSE_FAILURE (-1) // internal error or port error
+#define RESPONSE_OK 0 // matched with index of <cr><lf>OK<cr><lf>
+#define RESPONSE_ERROR 1 // matched with index of <cr><lf>ERROR<cr><lf>
+
+#ifdef WIN32
+typedef HANDLE HPORT; // variable type used in FindModem
+#else
+typedef int HPORT; // variable type used in FindModem
+#endif
+
+#define IN_QUEUE_SIZE 8192
+#define OUT_QUEUE_SIZE 256
+
+#define RCV_DELAY 2000
+#define CHAR_DELAY 100
+
+#define CBR_HACK_115200 0xff00 // This is how we set 115,200 on
+ // Win 3.1 because of a stupid bug.
+
+
+
+#pragma data_seg(DATASEG_READONLY)
+
+TCHAR const FAR c_szPortPrefix[] = TEXT("\\\\.\\%s"); // "\\.\" in ASCII
+
+char const FAR c_szModemIdPrefix[] = "UNIMODEM";
+char const FAR c_szNoEcho[] = "ATE0Q0V1\r";
+char const FAR c_szReset[] = "ATZ\r";
+char const FAR c_szATPrefix[] = "AT";
+char const FAR c_szATSuffix[] = "\r";
+char const FAR c_szBlindOnCheck[] = "X3";
+char const FAR c_szBlindOnCheckAlternate[] = "X0";
+char const FAR c_szBlindOffCheck[] = "X4";
+
+// WARNING! If you change these, you will have to change ALL of your
+// CompatIDs!!!
+char const FAR *c_aszQueries[] = { "ATI0\r", "ATI1\r", "ATI2\r", "ATI3\r",
+ "ATI4\r", "ATI5\r", "ATI6\r", "ATI7\r",
+ "ATI8\r", "ATI9\r", "ATI10\r", "AT%V\r" };
+
+// these are mostly for #'s. If a numeric is adjoining one of these, it
+// will not be treated as special.
+// Warning: Change any of these and you have to redo all of the CRCs!!!!
+// Case insensitive compares
+char const FAR *c_aszIncludes[] = { "300",
+ "1200",
+ "2400", "2,400",
+ "9600", "96", "9.6", "9,600",
+ "12000", "120", "12.0", "12,000",
+ "14400", "144", "14.4", "14,400",
+ "16800", "168", "16.8", "16,800",
+ "19200", "192", "19.2", "19,200",
+ "21600", "216", "21.6", "21,600",
+ "24000", "240", "24.0", "24,000",
+ "26400", "264", "26.4", "26,400",
+ "28800", "288", "28.8", "28,800",
+ "31200", "312", "31.2", "31,200",
+ "33600", "336", "33.6", "33,600",
+ "36000", "360", "36.0", "36,000",
+ "38400", "384", "38.4", "38,400",
+ "9624", "32bis", "42bis", "V32",
+ "V.32", "V.FC", "FAST", "FAX",
+ "DATA", "VOICE", "" };
+
+// Matches will be case-insensitive
+char const FAR *c_aszExcludes[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
+ "JUL", "AUG", "SEP", "OCT", "NOV", "DEC",
+ "" };
+
+// case sensitive matching
+char const FAR *c_aszBails[] = { "CONNECT", "RING", "NO CARRIER",
+ "NO DIALTONE", "BUSY", "NO ANSWER", "=" };
+
+// start after CBR_9600
+UINT const FAR c_auiUpperBaudRates[] = { CBR_19200, CBR_38400, CBR_56000,
+ CBR_HACK_115200 };
+
+char const FAR *c_aszResponses[] = { "\r\nOK\r\n", "\r\nERROR\r\n" };
+
+// Some MultiTech's send 0<cr> in response to AT%V (they go
+// into numeric mode)
+char const FAR *c_aszNumericResponses[] = { "0\r", "4\r" };
+
+char const FAR c_szHex[] = "0123456789abcdef";
+
+struct DCE {
+ char pszStr[4];
+ DWORD dwDce;
+ DWORD dwAlternateDce;
+} DCE_Table[] = {
+ "384", 38400, 300, // Some PDI's will report 38400, and this won't work for them. Screw 'em.
+ "360", 36000, 300,
+ "336", 33600, 300,
+ "312", 31200, 300,
+ "288", 28800, 2400,
+ "264", 26400, 2400,
+ "240", 24000, 2400,
+ "216", 21600, 2400,
+ "192", 19200, 1200,
+ "168", 16800, 1200,
+ "14", 14400, 1200,
+ "120", 12000, 1200,
+ "9", 9600, 300,
+ "2", 2400, 300,
+ "1", 1200, 300,
+ "3", 300, 0
+};
+
+#pragma data_seg()
+
+
+
+// BUGBUG - WARNING: Not for DBCS usage - is not a real bugbug since modems aren't DBCS.
+//#define isupper(ch) (((ch) >= 'A' && (ch) <= 'Z') ? TRUE : FALSE)
+//#define islower(ch) (((ch) >= 'a' && (ch) <= 'z') ? TRUE : FALSE)
+//#define isalpha(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'Z') ? TRUE : FALSE)
+#define toupper(ch) (islower(ch) ? (ch) - 'a' + 'A' : (ch))
+#define ishex(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'F') ? TRUE : FALSE)
+#define isnum(num) ((num >= '0' && num <= '9') ? TRUE : FALSE)
+
+#define MAX_TEST_TRIES 4
+
+
+#define MAX_LOG_PRINTF_LEN 256
+void _cdecl LogPrintf(HANDLE hLog, UINT uResourceFmt, ...);
+
+DWORD NEAR PASCAL FindModem(PDETECTCALLBACK pdc, HPORT hPort);
+
+#ifdef DEBUG
+void HexDump( TCHAR *, LPBYTE lpBuf, DWORD cbLen);
+#define HEXDUMP(_a, _b, _c) HexDump(_a, _b, _c)
+#else // !DEBUG
+#define HEXDUMP(_a, _b, _c) ((void) 0)
+#endif
+
+DWORD
+PRIVATE
+IdentifyModem(
+ IN PDETECTCALLBACK pdc,
+ IN HPORT hPort,
+ OUT LPTSTR pszModemName,
+ IN HANDLE hLog,
+ OUT LPSTR lpszATI0Result);
+
+BOOL
+PRIVATE
+TestBaudRate(
+ IN HPORT hPort,
+ IN UINT uiBaudRate,
+ IN DWORD dwRcvDelay,
+ IN PDETECTCALLBACK pdc,
+ OUT BOOL FAR *lpfCancel);
+
+DWORD
+NEAR PASCAL
+SetPortBaudRate(
+ HPORT hPort,
+ UINT BaudRate);
+int
+NEAR PASCAL
+ReadResponse(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ BOOL fMulti,
+ DWORD dwRcvDelay,
+ PDETECTCALLBACK pdc);
+UINT
+NEAR PASCAL
+ReadPort(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ DWORD dwRcvDelay,
+ int FAR *lpiError,
+ PDETECTCALLBACK pdc,
+ BOOL FAR *lpfCancel);
+
+DWORD
+PRIVATE
+ConstructGenericInf(
+ PDETECTCALLBACK pdc,
+ HPORT hPort,
+ LPCSTR lpszATI0Result,
+ HANDLE hLog,
+ PMODEM_DETECT_SIG pmds);
+
+DWORD NEAR PASCAL CBR_To_Decimal(UINT uiCBR);
+LPSTR NEAR ConvertToPrintable(LPCSTR pszIn, LPSTR pszOut, UINT uOut);
+
+// Does a printf to a log, using a resource string as the format.
+// WARNING: Do not try to print large strings.
+void _cdecl LogPrintf(HANDLE hLog, UINT uResourceFmt, ...)
+{
+ char pFmt[MAX_LOG_PRINTF_LEN];
+ char pOutput[MAX_LOG_PRINTF_LEN];
+ UINT uCount, uWritten;
+ va_list vArgs;
+
+ if (hLog != INVALID_HANDLE_VALUE)
+ {
+ if (LoadStringA(g_hinst, uResourceFmt, pFmt, MAX_LOG_PRINTF_LEN))
+ {
+ va_start(vArgs, uResourceFmt);
+ uCount = wvsprintfA(pOutput, pFmt, vArgs);
+ va_end(vArgs);
+
+ WriteFile(hLog, (LPCVOID)pOutput, uCount, &uWritten, NULL);
+ }
+ }
+}
+
+int FAR PASCAL mylstrncmp(LPCSTR pchSrc, LPCSTR pchDest, int count)
+{
+ for ( ; count && *pchSrc == *pchDest; pchSrc++, pchDest++, count--) {
+ if (*pchSrc == '\0')
+ return 0;
+ }
+ return count;
+}
+
+int FAR PASCAL mylstrncmpi(LPCSTR pchSrc, LPCSTR pchDest, int count)
+{
+ for ( ; count && toupper(*pchSrc) == toupper(*pchDest); pchSrc++, pchDest++, count--) {
+ if (*pchSrc == '\0')
+ return 0;
+ }
+ return count;
+}
+
+#ifdef WIN32
+
+DWORD
+PRIVATE
+MyWriteComm(
+ HANDLE hPort,
+ LPBYTE lpBuf,
+ DWORD cbLen)
+{
+ COMMTIMEOUTS cto;
+ DWORD cbLenRet;
+
+ HEXDUMP (TEXT("Write"), lpBuf, cbLen);
+ // Set comm timeout
+ if (!GetCommTimeouts(hPort, &cto))
+ {
+ ZeroMemory(&cto, sizeof(cto));
+ };
+
+ // Allow a constant write timeout
+ cto.WriteTotalTimeoutMultiplier = 0;
+ cto.WriteTotalTimeoutConstant = 1000; // 1 second
+ SetCommTimeouts(hPort, &cto);
+
+ // Synchronous write
+ WriteFile(hPort, lpBuf, cbLen, &cbLenRet, NULL);
+ return cbLenRet;
+}
+
+#define MyFlushComm PurgeComm
+#define MyCloseComm CloseHandle
+
+#else // WIN32
+
+#define MyWriteComm WriteComm
+#define MyCloseComm CloseComm
+
+#ifndef PURGE_TXCLEAR
+#define PURGE_TXCLEAR 0x00000001
+#endif
+#ifndef PURGE_RXCLEAR
+#define PURGE_RXCLEAR 0x00000002
+#endif
+
+BOOL
+PRIVATE
+MyFlushComm(
+ HANDLE hport,
+ DWORD dwAction)
+ {
+ if (IsFlagSet(dwAction, PURGE_TXCLEAR))
+ {
+ FlushComm((int)hport, 0);
+ }
+
+ if (IsFlagSet(dwAction, PURGE_RXCLEAR))
+ {
+ FlushComm((int)hport, 1);
+ }
+
+ return TRUE;
+ }
+
+#endif // WIN32
+
+
+/*----------------------------------------------------------
+Purpose: Open the modem detection log.
+
+Returns: handle to the open file
+ NULL if the file could not be opened
+Cond: --
+*/
+HANDLE
+PUBLIC
+OpenDetectionLog()
+ {
+ TCHAR szLogPath[MAX_PATH];
+ UINT cch;
+ HANDLE hLog;
+
+ // open the log file
+ cch = GetWindowsDirectory(szLogPath, SIZECHARS(szLogPath));
+ if (0 == cch)
+ {
+ hLog = INVALID_HANDLE_VALUE;
+ }
+ else
+ {
+ if (*CharPrev(szLogPath, szLogPath + cch) != TEXT('\\'))
+ {
+ szLogPath[cch++] = (TCHAR)'\\';
+ }
+ LoadString(g_hinst, IDS_DET_LOG_NAME, &szLogPath[cch],
+ SIZECHARS(szLogPath) - (cch - 1));
+
+ // error return will be HFILE_ERROR, so no need to check since
+ // we will handle that during writes
+ TRACE_MSG(TF_DETECT, "Opening detection log file '%s'", (LPTSTR)szLogPath);
+
+ hLog = CreateFile(szLogPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+
+ if (hLog == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "Modem CreateFile() failed!");
+ }
+ }
+
+ return hLog;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Closes the detection log file.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+CloseDetectionLog(
+ IN HANDLE hLog)
+ {
+ if (INVALID_HANDLE_VALUE != hLog)
+ {
+ TRACE_MSG(TF_DETECT, "Closing detection log");
+ CloseHandle(hLog);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the current port we're updating in the progress
+ bar.
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+DetectSetPort(
+ PDETECTCALLBACK pdc,
+ LPCTSTR lpcszName)
+ {
+ if (pdc && pdc->pfnCallback)
+ {
+ try
+ {
+ pdc->pfnCallback(DSPM_SETPORT, (LPARAM)lpcszName, pdc->lParam);
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ ;
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the current msg we're updating in the Detect wizard page.
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+DetectSetStatus(
+ PDETECTCALLBACK pdc,
+ DWORD nStatus)
+ {
+ if (pdc && pdc->pfnCallback)
+ {
+ try
+ {
+ pdc->pfnCallback(DSPM_SETSTATUS, (LPARAM)nStatus, pdc->lParam);
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ ;
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Query's whether we are supposed to cancel the detection. Also
+ yields.
+Returns: TRUE if we should cancel. FALSE otherwise.
+Cond: --
+*/
+BOOL
+PRIVATE
+DetectQueryCancel(
+ PDETECTCALLBACK pdc)
+ {
+ BOOL bRet = FALSE;
+
+ if (pdc && pdc->pfnCallback)
+ {
+ try
+ {
+ bRet = pdc->pfnCallback(DSPM_QUERYCANCEL, 0, pdc->lParam);
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ bRet = FALSE;
+ }
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function queries the given port to find a legacy
+ modem.
+
+ If a modem is detected and we recognize it (meaning
+ we have the hardware ID in our INF files), or if we
+ successfully create a generic hardware ID and
+ inf file, then this function also creates the phantom
+ device instance of this modem.
+
+ NOTE (scotth): in Win95, this function only detected
+ the modem and returned the hardware ID and device
+ description. For NT, this function also creates the
+ device instance. I made this change because it is
+ faster.
+
+Returns: NO_ERROR
+ ERROR_PORT_INACCESSIBLE
+ ERROR_NO_MODEM
+ ERROR_ACCESS_DENIED
+ ERROR_CANCELLED
+
+Cond: --
+*/
+DWORD
+PUBLIC
+DetectModemOnPort(
+ IN HDEVINFO hdi,
+ IN PDETECTCALLBACK pdc,
+ IN HANDLE hLog,
+ IN LPCTSTR pszPort,
+ OUT PMODEM_DETECT_SIG pmds,
+ OUT PSP_DEVINFO_DATA pdevDataOut)
+{
+ DWORD dwRet;
+ HPORT hPort;
+ HCURSOR hCursor;
+ DWORD cbLen;
+ char szATI0Result[ATI0_LEN];
+ char szASCIIPort[LINE_LEN];
+ TCHAR szLocalHardwareID[MAX_MODEM_ID_LEN+1];
+
+#if defined(WIN32)
+ TCHAR szPrefixedPort[MAX_BUF + sizeof(c_szPortPrefix)];
+#endif
+
+ DBG_ENTER(DetectModemOnPort);
+
+ ASSERT(pszPort);
+ ASSERT(pmds);
+
+ *szLocalHardwareID=0;
+
+#ifdef UNICODE
+ // Convert the port name to ASCII
+ WideCharToMultiByte(CP_ACP, 0, pszPort, -1, szASCIIPort, SIZECHARS(szASCIIPort),
+ NULL, NULL);
+#else
+ lstrcpyA(szASCIIPort, pszPort);
+#endif // UNICODE
+
+
+#ifdef SKIP_MOUSE_PORT
+ // Is this port used by a serial mouse?
+ if (0 == lstrcmpi(g_szMouseComPort, pszPort))
+ {
+ // Yes; skip it
+ TRACE_MSG(TF_ERROR, "Serial mouse on this port, skipping");
+ dwRet = ERROR_NO_MODEM;
+ goto Cleanup;
+ }
+#endif
+
+ // Open the port
+
+ DetectSetPort(pdc, pszPort);
+
+#if !defined(WIN32)
+ hPort = OpenComm(pszPort, IN_QUEUE_SIZE, OUT_QUEUE_SIZE);
+#else
+ wsprintf(szPrefixedPort, c_szPortPrefix, pszPort);
+ hPort = CreateFile(szPrefixedPort,
+ GENERIC_WRITE | GENERIC_READ,
+ 0, NULL,
+ OPEN_EXISTING, 0, NULL);
+#endif
+
+ if (hPort == INVALID_HANDLE_VALUE) {
+ dwRet = GetLastError();
+ if (dwRet == ERROR_ACCESS_DENIED) {
+ TRACE_MSG(TF_ERROR, "Port is in use by another app");
+ LogPrintf(hLog, IDS_DET_INUSE, szASCIIPort);
+ }
+ else {
+ TRACE_MSG(TF_ERROR, "Couldn't open port");
+ LogPrintf(hLog, IDS_DET_COULDNT_OPEN, szASCIIPort);
+ }
+ }
+ else {
+ SetupComm (hPort, IN_QUEUE_SIZE, OUT_QUEUE_SIZE);
+
+ TRACE_MSG(TF_DETECT, "Opened Port");
+
+ // Check for a modem on the port
+
+ hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
+
+ dwRet = FindModem(pdc, hPort);
+
+ if (dwRet == NO_ERROR)
+ {
+ // We have a modem. No matter what, we must return
+ // NO_ERROR (unless the user cancels).
+ LogPrintf(hLog, IDS_DET_FOUND, szASCIIPort);
+
+ // Initialize the detection signature
+ DetectSig_Init(pmds, 0, NULL, pszPort);
+
+ // Could we identify the modem?
+ dwRet = IdentifyModem(pdc, hPort, szLocalHardwareID, hLog, szATI0Result);
+ if (NO_ERROR != dwRet)
+ {
+ if (ERROR_CANCELLED != dwRet)
+ {
+ // No; attempt to construct a generic INF
+ TRACE_MSG(TF_DETECT, "Couldn't identify modem due to some kind of error. Will build one.");
+ goto DoConstructGenericInf; // save a little code space
+ }
+ }
+ else
+ {
+ // Yes; we now have the hardware ID for this modem.
+ // Copy it into pmds, truncating it to 16characters (including
+ // null)
+ lstrcpyn(
+ pmds->szHardwareID,
+ szLocalHardwareID,
+ sizeof(pmds->szHardwareID)/sizeof(TCHAR)
+ );
+ SetFlag(pmds->dwMask, MDSM_HARDWAREID);
+
+ DetectSetStatus(pdc, DSS_CHECK_FOR_COMPATIBLE);
+
+ // Is there a device that is compatible with this
+ // hardware ID? If there is, this function will also
+ // create a phantom device instance with a working
+ // set of compatible drivers.
+ if (CplDiCreateCompatibleDeviceInfo(hdi,
+ szLocalHardwareID,
+ NULL,
+ pmds->szDeviceDesc,
+ SIZECHARS(pmds->szDeviceDesc),
+ pdevDataOut))
+ {
+ // Yes; a device instance was created!
+ SetFlag(pmds->dwMask, MDSM_DEVICEDESC);
+ }
+ else
+ {
+ // Doh! No matching inf for this compat id. Must create a generic one...
+ TRACE_MSG(TF_DETECT, "No compatible infs found. Will build one.");
+
+DoConstructGenericInf:
+ dwRet = ConstructGenericInf(pdc, hPort, szATI0Result, hLog, pmds);
+
+ if (NO_ERROR == dwRet)
+ {
+ LoadString(g_hinst, IDS_GENERIC_DESC, pmds->szDeviceDesc, SIZECHARS(pmds->szDeviceDesc));
+ SetFlag(pmds->dwMask, MDSM_DEVICEDESC);
+
+ DetectSetStatus(pdc, DSS_CHECK_FOR_COMPATIBLE);
+
+ // Try creating a device that is compatible with
+ // the generic modem
+ if ( !CplDiCreateCompatibleDeviceInfo(hdi,
+ pmds->szHardwareID,
+ pmds->szDeviceDesc,
+ NULL, 0,
+ pdevDataOut) )
+ {
+ // This still failed. Give up.
+ dwRet = GetLastError();
+ ASSERT(NO_ERROR != dwRet);
+ // BUG BUG: we should do this or set this to some
+ // other error (and clean up the detected modem instance!)
+ //dwRet = ERROR_CANCELLED;
+ }
+ }
+ }
+
+ if (DetectQueryCancel(pdc))
+ {
+ TRACE_MSG(TF_DETECT, "User pressed cancel.");
+ dwRet = ERROR_CANCELLED;
+ }
+ }
+
+ // Reset
+ cbLen = lstrlenA(c_szReset);
+ if (MyWriteComm(hPort, (LPBYTE)c_szReset, cbLen) == cbLen &&
+ ERROR_CANCELLED != dwRet)
+ {
+ // Now read the result of the write and ignore it
+ if (RESPONSE_OK != ReadResponse(hPort, NULL,
+ MAX_SHORT_RESPONSE_LEN,
+ FALSE, 0, pdc))
+ {
+ TRACE_MSG(TF_ERROR, "Reset result failed");
+ }
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "Couldn't write Reset string");
+ }
+ }
+ else
+ {
+ if (ERROR_CANCELLED != dwRet)
+ {
+ LogPrintf(hLog, IDS_DET_NOT_FOUND, szASCIIPort);
+ }
+ }
+
+ SetCursor(hCursor);
+
+ // Flush before closing becuase if there are characters stuck in the queue,
+ // serial.386 will take 30 seconds to time out.
+
+ MyFlushComm(hPort, PURGE_RXCLEAR | PURGE_TXCLEAR);
+ EscapeCommFunction(hPort, CLRDTR);
+ MyCloseComm(hPort);
+
+ } // hPort < 0
+
+#ifdef SKIP_MOUSE_PORT
+Cleanup:
+#endif
+ DBG_EXIT_DWORD(DetectModemOnPort, dwRet);
+ return dwRet;
+}
+
+#define HAYES_COMMAND_LEN 40
+
+// Try sending the requested command and return whether it works or not
+// Try MAX_TEST_TRIES
+// Returns: TRUE on SUCCESS
+// FALSE on failure (including user cancels)
+BOOL
+NEAR PASCAL
+TestCommand(
+ HPORT hPort,
+ PDETECTCALLBACK pdc,
+ BOOL FAR *lpfCancel,
+ LPCSTR szCommand)
+{
+ DWORD cbLen;
+ int iTries = MAX_TEST_TRIES;
+ char szFullCommand[HAYES_COMMAND_LEN + 1];
+
+ lstrcpyA(szFullCommand, c_szATPrefix);
+ lstrcatA(szFullCommand, szCommand);
+ lstrcatA(szFullCommand, c_szATSuffix);
+ cbLen = lstrlenA(szFullCommand);
+
+ TRACE_MSG(TF_DETECT, "Testing '%s'", (LPTSTR)szFullCommand);
+
+ *lpfCancel = FALSE;
+
+ while (iTries--)
+ {
+
+ // clear the read queue, there shouldn't be anything there
+ MyFlushComm(hPort, PURGE_RXCLEAR);
+
+ if (MyWriteComm(hPort, szFullCommand, cbLen) == cbLen)
+ {
+ switch(ReadResponse(hPort, NULL, MAX_SHORT_RESPONSE_LEN, FALSE, RESPONSE_RCV_DELAY, pdc))
+ {
+ case RESPONSE_OK:
+ TRACE_MSG(TF_DETECT, "Command returned OK!");
+ return TRUE;
+
+ case RESPONSE_ERROR:
+ TRACE_MSG(TF_DETECT, "Command returned ERROR!");
+ return FALSE;
+
+ case RESPONSE_USER_CANCEL:
+ *lpfCancel = TRUE;
+ return FALSE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+// Checks various AT commands to see if they work. Updates the modem
+// detection signature (*pms) as necessary.
+// Returns FALSE on error or user cancel
+BOOL
+PRIVATE
+CheckCommands(
+ IN HPORT hPort,
+ IN PDETECTCALLBACK pdc,
+ OUT BOOL FAR *lpfCancel,
+ OUT PMODEM_DETECT_SIG pmds)
+{
+ // assume failures
+ pmds->szBlindOn[0] = 0;
+ pmds->szBlindOff[0] = 0;
+
+ //
+ // Blind On/Off - check blind off last so that the modem is in a state we prefer.
+ //
+
+ // test X3
+ if (TestCommand(hPort, pdc, lpfCancel, c_szBlindOnCheck))
+ {
+ ASSERT(SIZECHARS(pmds->szBlindOn) > lstrlenA(c_szBlindOnCheck)); // '>' accounts for null
+ lstrcpynA(pmds->szBlindOn, c_szBlindOnCheck, SIZECHARS(pmds->szBlindOn));
+ }
+ else
+ {
+ if (*lpfCancel)
+ {
+ return FALSE;
+ }
+
+ // X3 failed so try X0
+ if (TestCommand(hPort, pdc, lpfCancel, c_szBlindOnCheckAlternate))
+ {
+ ASSERT(SIZECHARS(pmds->szBlindOn) > lstrlenA(c_szBlindOnCheckAlternate)); // '>' accounts for null
+ lstrcpynA(pmds->szBlindOn, c_szBlindOnCheckAlternate, SIZECHARS(pmds->szBlindOn));
+ }
+ else
+ {
+ if (*lpfCancel)
+ {
+ return FALSE;
+ }
+ }
+ }
+
+ // test X4
+ if (TestCommand(hPort, pdc, lpfCancel, c_szBlindOffCheck))
+ {
+ ASSERT(SIZECHARS(pmds->szBlindOff) > lstrlenA(c_szBlindOffCheck)); // '>' accounts for null
+ lstrcpynA(pmds->szBlindOff, c_szBlindOffCheck, SIZECHARS(pmds->szBlindOff));
+ }
+ else
+ {
+ if (*lpfCancel)
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+// Returns the max dte for this modem in numeric form (ie. 57600, NOT CBR_56000)
+// Returns 0 on error or user cancel
+DWORD
+PRIVATE
+FindMaxDTE(
+ HPORT hPort,
+ PDETECTCALLBACK pdc,
+ BOOL FAR *lpfCancel)
+{
+ UINT uiWorkingBaudRate, uiMaxBaudRate;
+ int iBaudRateIndex;
+ DCB DCB;
+
+ *lpfCancel = FALSE;
+
+ // Get current baud rate
+ if (GetCommState(hPort, &DCB) < 0)
+ {
+ TRACE_MSG(TF_ERROR, "GetCommState failed");
+ return 0;
+ }
+ uiWorkingBaudRate = uiMaxBaudRate = DCB.BaudRate;
+
+ // Should we try even faster (are we at 9600 now?)?
+ if (uiWorkingBaudRate == CBR_9600)
+ {
+ for (iBaudRateIndex = 0; iBaudRateIndex < ARRAYSIZE(c_auiUpperBaudRates); iBaudRateIndex++)
+ {
+ // if baud rate works then break out and use it!
+ if (TestBaudRate(hPort, c_auiUpperBaudRates[iBaudRateIndex], 0, pdc, lpfCancel))
+ {
+ uiMaxBaudRate = c_auiUpperBaudRates[iBaudRateIndex];
+ }
+ else
+ {
+ if (*lpfCancel)
+ {
+ return 0;
+ }
+ break;
+ }
+ }
+
+ // we now have our maximum baud rate and a good baud rate for interacting with the modem
+ // go back to our safe baud rate (safe w/respect to computer overruns)
+ if (!TestBaudRate(hPort, uiWorkingBaudRate, 0, pdc, lpfCancel))
+ {
+ if (*lpfCancel)
+ {
+ return 0;
+ }
+ TRACE_MSG(TF_ERROR, "return to safe baudrate failed!");
+ }
+
+ }
+ return CBR_To_Decimal(uiMaxBaudRate);
+}
+
+// Returns the max dce for this modem in numeric form (ie. 9600, NOT CBR_9600)
+// Returns 0 on error
+DWORD NEAR PASCAL FindMaxDCE(HPORT hPort, LPCSTR lpszATI0Result, DWORD dwMaxDTE)
+{
+ int i;
+ DWORD dwMaxDCE = 0;
+ char FAR *lpszPtr = (char FAR *)lpszATI0Result;
+
+ // First we try to deduce our max dce by examining the ATI0 result
+ while (*lpszPtr) // skip past <cr> and <lf> and any other non numeric chars
+ {
+ if (isnum(*lpszPtr))
+ {
+ break;
+ }
+ lpszPtr++;
+ }
+
+ // did we hit the null-terminator?
+ if (*lpszPtr)
+ {
+ // nope! let's rock and roll, uh I mean, do some comparisons...
+ TRACE_MSG(TF_DETECT, "Analyzing ATI0 result '%s'", (LPTSTR)lpszPtr);
+
+ for (i = 0; i < ARRAYSIZE(DCE_Table); i++)
+ {
+ // do we have a match?
+ if (!mylstrncmp(lpszPtr, DCE_Table[i].pszStr, lstrlenA(DCE_Table[i].pszStr)))
+ {
+ // yes. is there an alternate that is more feasible?
+ // since DTE shouldn't be lower than DCE, let's check that...
+ if (DCE_Table[i].dwAlternateDce && dwMaxDTE < DCE_Table[i].dwDce)
+ {
+ dwMaxDCE = DCE_Table[i].dwAlternateDce;
+ TRACE_MSG(TF_DETECT, "Using alternate dce of %ld", dwMaxDCE);
+ }
+ else
+ {
+ dwMaxDCE = DCE_Table[i].dwDce;
+ TRACE_MSG(TF_DETECT, "A.I. dce of %ld", dwMaxDCE);
+ }
+ break;
+ }
+ }
+ }
+
+ // If that fails, make a guess based on the MaxDTE.
+ if (!dwMaxDCE)
+ {
+ TRACE_MSG(TF_DETECT, "Guessing at DCE speed");
+ switch (dwMaxDTE)
+ {
+ case 300:
+ dwMaxDCE = 300;
+ break;
+ case 1200:
+ dwMaxDCE = 1200;
+ break;
+ case 2400:
+ dwMaxDCE = 2400;
+ break;
+ case 9600:
+ case 19200:
+ case 38400:
+ dwMaxDCE = 9600;
+ break;
+ case 57600:
+ dwMaxDCE = 14400;
+ break;
+ case 115200:
+ dwMaxDCE = 28800;
+ break;
+ default:
+ ASSERT(0);
+ TRACE_MSG(TF_WARNING, "Hit a default in FindMaxDCE");
+ break;
+ }
+ }
+
+ // Check the logic of the DTE and DCE. Verify that it makes sense.
+ if (dwMaxDCE > dwMaxDTE)
+ {
+ dwMaxDCE = dwMaxDTE;
+ TRACE_MSG(TF_DETECT, "Auto-correcting Max DCE to be %ld bps", dwMaxDCE);
+ }
+
+ ASSERT(dwMaxDCE);
+ return dwMaxDCE;
+}
+
+// When we get there, the modem is open and in the ATE0Q0V1 state.
+// Even if we can't talk to the modem, we have to return a generic inf.
+// We are only called when a modem is seen on a port. (it may be gone now)
+// Return NO_ERROR unles there was a user cancel (ERROR_CANCELLED)
+DWORD
+PRIVATE
+ConstructGenericInf(
+ IN PDETECTCALLBACK pdc,
+ IN HPORT hPort,
+ IN LPCSTR lpszATI0Result,
+ IN HANDLE hLog,
+ OUT PMODEM_DETECT_SIG pmds)
+{
+ DWORD dwMaxDTE;
+ DWORD dwMaxDCE;
+ BOOL fCancel;
+
+ ASSERT(pmds);
+
+ // our fallback
+ lstrcpy(pmds->szHardwareID, TEXT("MDMGEN"));
+
+ // Non-dte changing stuff first.
+ if (!CheckCommands(hPort, pdc, &fCancel, pmds))
+ {
+ if (fCancel)
+ {
+ return ERROR_CANCELLED;
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "CheckCommands failed");
+ return NO_ERROR;
+ }
+ }
+
+ if (!(dwMaxDTE = FindMaxDTE(hPort, pdc, &fCancel)))
+ {
+ if (fCancel)
+ {
+ return ERROR_CANCELLED;
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "FindMaxDTE failed");
+ return NO_ERROR;
+ }
+ }
+ TRACE_MSG(TF_DETECT, "Max DTE = %ld bps", dwMaxDTE);
+ LogPrintf(hLog, IDS_DET_DTE, dwMaxDTE);
+
+ if (!(dwMaxDCE = FindMaxDCE(hPort, lpszATI0Result, dwMaxDTE)))
+ {
+ TRACE_MSG(TF_ERROR, "FindMaxDCE failed");
+ return NO_ERROR;
+ }
+ TRACE_MSG(TF_DETECT, "Hypothesized Max DCE = %ld bps", dwMaxDCE);
+
+ SetFlag(pmds->dwFlags, MDSF_UPDATE_DEVCAPS);
+ pmds->dwMaxDTE = dwMaxDTE;
+ pmds->dwMaxDCE = dwMaxDCE;
+
+ return NO_ERROR;
+}
+
+
+// Switch to requested baud rate and try sending ATE0Q0V1 and return whether it works or not
+// Try MAX_TEST_TRIES
+// Returns: TRUE on SUCCESS
+// FALSE on failure (including user cancels)
+BOOL
+PRIVATE
+TestBaudRate(
+ IN HPORT hPort,
+ IN UINT uiBaudRate,
+ IN DWORD dwRcvDelay,
+ IN PDETECTCALLBACK pdc,
+ OUT BOOL FAR *lpfCancel)
+{
+ DWORD cbLen;
+ int iTries = MAX_TEST_TRIES;
+
+ DBG_ENTER(TestBaudRate);
+
+ *lpfCancel = FALSE;
+
+ while (iTries--)
+ {
+ // try new baud rate
+ if (SetPortBaudRate(hPort, uiBaudRate) == NO_ERROR)
+ {
+ cbLen = lstrlenA(c_szNoEcho); // Send an ATE0Q0V1<cr>
+
+ // clear the read queue, there shouldn't be anything there
+ PurgeComm(hPort, PURGE_RXCLEAR);
+ if (MyWriteComm(hPort, (LPBYTE)c_szNoEcho, cbLen) == cbLen)
+ {
+ switch(ReadResponse(hPort, NULL, MAX_SHORT_RESPONSE_LEN, FALSE, dwRcvDelay, pdc))
+ {
+ case RESPONSE_OK:
+ DBG_EXIT(TestBaudRate);
+ return TRUE;
+
+ case RESPONSE_USER_CANCEL:
+ *lpfCancel = TRUE;
+ DBG_EXIT(TestBaudRate);
+ return FALSE;
+ }
+ }
+ }
+ }
+ DBG_EXIT(TestBaudRate);
+ return FALSE;
+}
+
+
+// Tries to figure out if there is a modem on the port. If there is, it
+// will try to find a good speed to talk to it at (300,1200,2400,9600).
+// Modem will be set to echo off, result codes on, and verbose result codes. (E0Q0V1)
+DWORD
+PRIVATE
+FindModem(
+ PDETECTCALLBACK pdc,
+ HPORT hPort)
+{
+ UINT uGoodBaudRate;
+ BOOL fCancel = FALSE;
+
+ DBG_ENTER(FindModem);
+
+ Sleep(500); // Wait, give time for modem to spew junk if any.
+
+ DetectSetStatus(pdc, DSS_LOOKING);
+
+ if (TestBaudRate(hPort, CBR_9600, 500, pdc, &fCancel))
+ {
+ uGoodBaudRate = CBR_9600;
+ }
+ else
+ {
+ if (!fCancel && TestBaudRate(hPort, CBR_2400, 500, pdc, &fCancel))
+ {
+ uGoodBaudRate = CBR_2400;
+ }
+ else
+ {
+ if (!fCancel && TestBaudRate(hPort, CBR_1200, 500, pdc, &fCancel))
+ {
+ uGoodBaudRate = CBR_1200;
+ }
+ else
+ {
+ // Hayes Accura 288 needs this much at 300bps
+ if (!fCancel && TestBaudRate(hPort, CBR_300, 1000, pdc, &fCancel))
+ {
+ uGoodBaudRate = CBR_300;
+ }
+ else
+ {
+ uGoodBaudRate = 0;
+ }
+ }
+ }
+ }
+
+ if (fCancel)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ if (uGoodBaudRate)
+ {
+ DetectSetStatus(pdc, DSS_FOUND_MODEM);
+ DBG_EXIT(FindModem);
+ return NO_ERROR;
+ }
+ else
+ {
+ DetectSetStatus(pdc, DSS_FOUND_NO_MODEM);
+ DBG_EXIT(FindModem);
+ return ERROR_NO_MODEM;
+ }
+}
+
+DWORD NEAR PASCAL SetPortBaudRate(HPORT hPort, UINT BaudRate)
+{
+ DCB DCB;
+
+ DBG_ENTER_UL(SetPortBaudRate, CBR_To_Decimal(BaudRate));
+
+ // Get a Device Control Block with current port values
+
+ if (GetCommState(hPort, &DCB) < 0) {
+ TRACE_MSG(TF_ERROR, "GetCommState failed");
+ DBG_EXIT(SetPortBaudRate);
+ return ERROR_PORT_INACCESSIBLE;
+ }
+
+ DCB.BaudRate = BaudRate;
+ DCB.ByteSize = 8;
+ DCB.Parity = 0;
+ DCB.StopBits = 0;
+ DCB.fBinary = 1;
+ DCB.fParity = 0;
+// BUGBUG we should probably set flow control to off here.
+
+ if (SetCommState(hPort, &DCB) < 0) {
+ TRACE_MSG(TF_ERROR, "SetCommState failed");
+ DBG_EXIT(SetPortBaudRate);
+ return ERROR_PORT_INACCESSIBLE;
+ }
+ TRACE_MSG(TF_DETECT, "SetBaud rate to %lu", BaudRate);
+
+ DBG_EXIT(SetPortBaudRate);
+ return NO_ERROR;
+}
+
+#define MAX_RESPONSE_BURST_SIZE 8192
+#define MAX_NUM_RESPONSE_READ_TRIES 30 // digicom scout needs this much + some safety
+#define MAX_NUM_MULTI_TRIES 3 // Maximum number of 'q's to be sent when we aren't getting any response
+
+// Read in response. Handle multi-pagers. Return a null-terminated string.
+// Also returns response code.
+// If lpvBuf == NULL
+// cbRead indicates the max amount to read. Bail if more than this.
+// Else
+// cbRead indicates the size of lpvBuf
+// This can not be a state driven (ie. char by char) read because we
+// must look for responses from the end of a sequence of chars backwards.
+// This is because "ATI2" on some modems will return
+// "<cr><lf>OK<cr><lf><cr><lf>OK<cr><lf>" and we only want to pay attention
+// to the final OK. Yee haw!
+// Returns: RESPONSE_xxx
+int
+PRIVATE
+ReadResponse(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT cbRead,
+ BOOL fMulti,
+ DWORD dwRcvDelay,
+ PDETECTCALLBACK pdc)
+{
+ int iRet = RESPONSE_UNRECOG;
+ LPBYTE pszBuffer;
+ BOOL fDoCopy = TRUE;
+ UINT uBufferLen, uResponseLen;
+ UINT uReadTries = MAX_NUM_RESPONSE_READ_TRIES;
+ UINT i;
+ UINT uOutgoingBufferCount = 0;
+ UINT uAllocSize = lpvBuf ? MAX_RESPONSE_BURST_SIZE : cbRead;
+ UINT uTotalReads = 0;
+ UINT uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES;
+ int iError;
+ BOOL fCancel;
+ BOOL fHadACommError = FALSE;
+
+ ASSERT(cbRead);
+
+ // do we need to adjust cbRead?
+ if (lpvBuf)
+ {
+ cbRead--; // preserve room for terminator
+ }
+
+ // Allocate buffer
+ if (!(pszBuffer = (LPBYTE)LocalAlloc(LMEM_FIXED, uAllocSize)))
+ {
+ TRACE_MSG(TF_ERROR, "couldn't allocate memory.\n");
+ return RESPONSE_FAILURE;
+ }
+
+ while (uReadTries--)
+ {
+ // Read response into buffer
+ uBufferLen = ReadPort(hPort, pszBuffer, uAllocSize, dwRcvDelay, &iError, pdc, &fCancel);
+
+ // Did the user request a cancel?
+ if (fCancel)
+ {
+ iRet = RESPONSE_USER_CANCEL;
+ goto Exit;
+ }
+
+ // any errors?
+ if (iError)
+ {
+ // BUGBUG - Were screwed if we get an error during a multi-pager.
+ fHadACommError = TRUE;
+#ifdef DEBUG
+ if (iError & CE_RXOVER) TRACE_MSG(TF_DETECT, "CE_RXOVER");
+ if (iError & CE_OVERRUN) TRACE_MSG(TF_DETECT, "CE_OVERRUN");
+ if (iError & CE_RXPARITY) TRACE_MSG(TF_DETECT, "CE_RXPARITY");
+ if (iError & CE_FRAME) TRACE_MSG(TF_DETECT, "CE_FRAME");
+ if (iError & CE_BREAK) TRACE_MSG(TF_DETECT, "CE_BREAK");
+ //if (iError & CE_CTSTO) TRACE_MSG(TF_DETECT, "CE_CTSTO");
+ //if (iError & CE_DSRTO) TRACE_MSG(TF_DETECT, "CE_DSRTO");
+ //if (iError & CE_RLSDTO) TRACE_MSG(TF_DETECT, "CE_RLSDTO");
+ if (iError & CE_TXFULL) TRACE_MSG(TF_DETECT, "CE_TXFULL");
+ if (iError & CE_PTO) TRACE_MSG(TF_DETECT, "CE_PTO");
+ if (iError & CE_IOE) TRACE_MSG(TF_DETECT, "CE_IOE");
+ if (iError & CE_DNS) TRACE_MSG(TF_DETECT, "CE_DNS");
+ if (iError & CE_OOP) TRACE_MSG(TF_DETECT, "CE_OOP");
+ if (iError & CE_MODE) TRACE_MSG(TF_DETECT, "CE_MODE");
+#endif // DEBUG
+ }
+
+ // Did we not get any chars?
+ if (uBufferLen)
+ {
+ uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES; // reset num multi tries left, since we got some data
+ uTotalReads += uBufferLen;
+ HEXDUMP(TEXT("Read"), pszBuffer, uBufferLen);
+ if (lpvBuf)
+ {
+ // fill outgoing buffer if there is room
+ for (i = 0; i < uBufferLen; i++)
+ {
+ if (uOutgoingBufferCount < cbRead)
+ {
+ lpvBuf[uOutgoingBufferCount++] = pszBuffer[i];
+ }
+ else
+ {
+ break;
+ }
+ }
+ // null terminate what we have so far
+ lpvBuf[uOutgoingBufferCount] = 0;
+ }
+ else
+ {
+ if (uTotalReads >= cbRead)
+ {
+ TRACE_MSG(TF_WARNING, "Bailing ReadResponse because we exceeded our maximum read allotment.");
+ goto Exit;
+ }
+ }
+
+ // try to find a matching response (crude but quick)
+ for (i = 0; i < ARRAYSIZE(c_aszResponses); i++)
+ {
+ // Verbose responses
+ uResponseLen = lstrlenA(c_aszResponses[i]);
+
+ // enough read to match this response?
+ if (uBufferLen >= uResponseLen)
+ {
+ if (!mylstrncmp(c_aszResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen))
+ {
+ iRet = i;
+ goto Exit;
+ }
+ }
+
+ // Numeric responses, for cases like when a MultiTech interprets AT%V to mean "go into numeric response mode"
+ uResponseLen = lstrlenA(c_aszNumericResponses[i]);
+
+ // enough read to match this response?
+ if (uBufferLen >= uResponseLen)
+ {
+ if (!mylstrncmp(c_aszNumericResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen))
+ {
+ DCB DCB;
+
+ TRACE_MSG(TF_WARNING, "went into numeric response mode inadvertantly. Setting back to verbose.");
+
+ // Get current baud rate
+ if (GetCommState(hPort, &DCB) == 0)
+ {
+ // Put modem back into Verbose response mode
+ if (!TestBaudRate(hPort, DCB.BaudRate, 0, pdc, &fCancel))
+ {
+ if (fCancel)
+ {
+ iRet = RESPONSE_USER_CANCEL;
+ goto Exit;
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "couldn't recover contact with the modem.");
+ // don't return error on failure, we have good info
+ }
+ }
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "GetCommState failed");
+ // don't return error on failure, we have good info
+ }
+
+ iRet = i;
+ goto Exit;
+ }
+ }
+ }
+ }
+ else
+ {
+ // have we received any chars at all (ie. from this or any previous reads)?
+ if (uTotalReads)
+ {
+ if (fMulti && uNumMultiTriesLeft)
+ { // no match found, so assume it is a multi-pager, send a 'q'
+ // 'q' will catch those pagers that will think 'q' means quit.
+ // else, we will work with the pages that just need any ole' char.
+ uNumMultiTriesLeft--;
+ TRACE_MSG(TF_DETECT, "sending a 'q' because of a multi-pager.");
+ if (MyWriteComm(hPort, "q", 1) != 1)
+ {
+ TRACE_MSG(TF_ERROR, "WriteComm failed");
+ iRet = RESPONSE_FAILURE;
+ goto Exit;
+ }
+ continue;
+ }
+ else
+ { // we got a response, but we didn't recognize it
+ ASSERT(iRet == RESPONSE_UNRECOG); // check initial setting
+ goto Exit;
+ }
+ }
+ else
+ { // we didn't get any kind of response
+ iRet = RESPONSE_NONE;
+ goto Exit;
+ }
+ }
+ } // while
+
+Exit:
+ // Free local buffer
+ LocalFree((HLOCAL)pszBuffer);
+ if (fHadACommError && RESPONSE_USER_CANCEL != iRet)
+ {
+ iRet = RESPONSE_FAILURE;
+ }
+ return iRet;
+}
+
+
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// WARNING - DO NOT CHANGE THIS FUNCTION!!!!!! YOU WILL HAVE TO DO A LOT OF WORK IF YOU DO!!!
+// You will have to change all of the inf files if you change the CRC results.
+//
+// Traverse lpszIn and copy "pure" chars to lpszOut.
+// Remove any "impurities" such as:
+// - "bails" - find one of these and cancel the rest of the line
+// - numerics/hexadecimal on any line but ATI0 and possibly ATI4, and
+// not including the "includes". Includes are only used if they
+// aren't adjoining another #.
+//
+void NEAR CleanseResponse(int iQueryNumber, LPSTR lpszIn, LPSTR lpszOut)
+{
+ LPSTR lpszSrc = lpszIn;
+ LPSTR lpszDest = lpszOut;
+ LPSTR FAR *lppsz;
+ BOOL fBail = FALSE;
+ BOOL fInclude = FALSE;
+ BOOL fExclude = FALSE;
+ BOOL fInBody = FALSE;
+ BOOL fCopyAll;
+ int j, iLen;
+
+ // Is this query exempt?
+ fCopyAll = (iQueryNumber == ATI0) ? TRUE : FALSE;
+
+ while (*lpszSrc)
+ {
+ // use any CRs or LFs we get before non-CRs/no-LFs.
+ if (*lpszSrc == CR || *lpszSrc == LF)
+ {
+ if (fInBody)
+ {
+ break;
+ }
+ else
+ {
+ *lpszDest++ = *lpszSrc++;
+ continue;
+ }
+ }
+
+ // is this the first char of the body?
+ if (!fInBody)
+ {
+ fInBody = TRUE; // indicate that the next CR or LF means termination.
+ if (iQueryNumber == ATI4 && *lpszSrc == 'a') // Hayes format capabilities string
+ {
+ fCopyAll = TRUE;
+ *lpszDest++ = *lpszSrc++;
+ continue;
+ }
+ }
+
+ if (fCopyAll) // are we jammin? (happens for ATI0 and ATI4 when first char is 'a')
+ {
+ // Only do a verbatim copy of the first word of the ATI0 response.
+ if (iQueryNumber == ATI0 && *lpszSrc == ' ')
+ {
+ fCopyAll = FALSE;
+ }
+ else
+ {
+ *lpszDest++ = *lpszSrc++;
+ }
+ continue;
+ }
+
+ // Do Bails
+ for (j = 0; j < ARRAYSIZE(c_aszBails); j++)
+ {
+ if (!mylstrncmp(lpszSrc, c_aszBails[j], lstrlenA(c_aszBails[j])))
+ {
+ fBail = TRUE;
+ break;
+ }
+ }
+ if (fBail) // should we bail?
+ {
+ TRACE_MSG(TF_DETECT, "early bail due to Bail '%s'", (LPTSTR)c_aszBails[j]);
+ break;
+ }
+
+ // Do Includes
+ lppsz = (LPSTR FAR *)c_aszIncludes;
+ while (**lppsz)
+ {
+ iLen = lstrlenA(*lppsz);
+ if (!mylstrncmpi(lpszSrc, *lppsz, iLen))
+ {
+ // check before and after to make sure they aren't numbers.
+ // catches 33489600394, 9600 won't be exempted from certain death in this case
+ if (!isnum(lpszSrc[-1]) && !isnum(lpszSrc[iLen]))
+ {
+ fInclude = TRUE;
+ break;
+ }
+ else
+ {
+ TRACE_MSG(TF_DETECT, "skipped an include because it was adjoined by numbers.");
+ }
+ }
+ lppsz++;
+ }
+ if (fInclude) // should we do the include?
+ {
+ fInclude = FALSE;
+ TRACE_MSG(TF_DETECT, "include ('%s' len = %d)", (LPTSTR)*lppsz, iLen);
+ CopyMemory(lpszDest, lpszSrc, (DWORD) iLen);
+ lpszSrc += iLen;
+ lpszDest += iLen;
+ continue;
+ }
+
+ // Do Excludes
+ lppsz = (LPSTR FAR *)c_aszExcludes;
+ while (**lppsz)
+ {
+ iLen = lstrlenA(*lppsz);
+ if (!mylstrncmpi(lpszSrc, *lppsz, iLen))
+ {
+ fExclude = TRUE;
+ break;
+ }
+ lppsz++;
+ }
+ if (fExclude) // should we do the exclude?
+ {
+ fExclude = FALSE;
+ TRACE_MSG(TF_DETECT, "exclude ('%s' len = %d)", (LPTSTR)*lppsz, iLen);
+ lpszSrc += iLen;
+ continue;
+ }
+
+ // Remove numbers
+ if (isnum(*lpszSrc))
+ {
+ lpszSrc++;
+ continue;
+ }
+
+ // Remove hex digits (keep only if adjoining 1 or 2 non-hex letters)
+ if (ishex(*lpszSrc))
+ {
+ // we know there is a char or null ahead of us...
+ if ((lpszSrc[1] >= 'g' && lpszSrc[1] <= 'z') ||
+ (lpszSrc[1] >= 'G' && lpszSrc[1] <= 'Z'))
+ {
+ *lpszDest++ = *lpszSrc++;
+ continue;
+ }
+
+ // is there a char before us?
+ if (lpszSrc > lpszIn)
+ {
+ if ((lpszSrc[-1] >= 'g' && lpszSrc[-1] <= 'z') ||
+ (lpszSrc[-1] >= 'G' && lpszSrc[-1] <= 'Z'))
+ {
+ *lpszDest++ = *lpszSrc++;
+ continue;
+ }
+ }
+
+ // we get here if we don't want to copy the hex digit
+ lpszSrc++;
+ continue;
+ }
+
+ // Remove lone letters (ex. 4M4 - reject, 4MM - accept)
+ if (isalpha(*lpszSrc))
+ {
+ if (!isalpha(lpszSrc[-1]) && !isalpha(lpszSrc[1]))
+ {
+ lpszSrc++;
+ continue;
+ }
+ }
+
+ // Remove certain punctuation: periods, commas, and spaces
+ // Will protect against things like "1992, 1993." -> "1992, 1993, 1994"
+ if (*lpszSrc == '.' || *lpszSrc == ',' || *lpszSrc == ' ')
+ {
+ lpszSrc++;
+ continue;
+ }
+
+ // whatever's left is okay to copy
+ *lpszDest++ = *lpszSrc++;
+ }
+
+ *lpszSrc = 0; // for log comparison sake
+ *lpszDest = 0;
+}
+
+#define MAX_RESPONSE_FAILURES 5
+
+// When we get here, we have found a modem on the hPort. Our job is
+// to interogate the modem and return a hardware ID.
+
+// returns:
+// NO_ERROR and a PnP id in pszModemName
+// ERROR_PORT_INACCESSIBLE
+// result of ATI0 query in lpszATI0Result
+DWORD
+PRIVATE
+IdentifyModem(
+ IN PDETECTCALLBACK pdc,
+ IN HPORT hPort,
+ OUT LPTSTR pszModemName,
+ IN HANDLE hLog,
+ OUT LPSTR lpszATI0Result)
+{
+ DWORD cbLen;
+ char pszReadBuf[MAX_QUERY_RESPONSE_LEN];
+ char pszCRCBuf[MAX_QUERY_RESPONSE_LEN];
+ LPSTR lpszPtr;
+ char pszPrintableBuf[MAX_QUERY_RESPONSE_LEN];
+ int iRet, i, j;
+ int iCurQuery;
+ int iResponseFailureCount;
+ ULONG ulCrcTable[256], ulCrc;
+ char szASCIIModem[MAX_MODEM_ID_LEN+1];
+
+ ASSERT(pszModemName);
+ ASSERT(lpszATI0Result);
+ *lpszATI0Result = (TCHAR)0; // null-terminate in case we fail
+
+ DBG_ENTER(IdentifyModem);
+
+ // Build CRC table
+ for (i = 0; i < 256; i++)
+ {
+ ulCrc = i;
+ for (j = 8; j > 0; j--)
+ {
+ if (ulCrc & 1)
+ {
+ ulCrc = (ulCrc >> 1) ^ 0xEDB88320L;
+ }
+ else
+ {
+ ulCrc >>= 1;
+ }
+ }
+ ulCrcTable[i] = ulCrc;
+ }
+
+ // Init ulCrc
+ ulCrc = 0xFFFFFFFF;
+
+ // Do each query.
+ for (iCurQuery = 0, iResponseFailureCount = 0;
+ iCurQuery < ARRAYSIZE(c_aszQueries); iCurQuery++)
+ {
+ DetectSetStatus(pdc, DSS_QUERYING_RESPONSES);
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_DETECT, "sending query '%s'.",
+ ConvertToPrintable(c_aszQueries[iCurQuery],
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+#endif
+ cbLen = lstrlenA(c_aszQueries[iCurQuery]);
+ if (MyWriteComm(hPort, (LPBYTE)c_aszQueries[iCurQuery], cbLen) != cbLen)
+ {
+ TRACE_MSG(TF_ERROR, "WriteComm failed");
+ iRet = RESPONSE_FAILURE; // spoof ReadResponse return for following switch handler
+ }
+ else
+ {
+ // Read in response. Handle multi-pagers. Return a null-terminated
+ // string containing all or part of the response. Return response
+ // code.
+ iRet = ReadResponse(hPort, (LPBYTE)pszReadBuf, sizeof(pszReadBuf), TRUE,
+ RESPONSE_RCV_DELAY, pdc);
+#ifdef DEBUG
+ switch (iRet)
+ {
+ case RESPONSE_FAILURE:
+ TRACE_MSG(TF_DETECT, "ReadResponse returned RESPONSE_FAILURE");
+ break;
+ case RESPONSE_UNRECOG:
+ TRACE_MSG(TF_DETECT, "ReadResponse returned RESPONSE_UNRECOG");
+ break;
+ case RESPONSE_NONE:
+ TRACE_MSG(TF_DETECT, "ReadResponse returned RESPONSE_NONE");
+ break;
+ case RESPONSE_USER_CANCEL:
+ TRACE_MSG(TF_DETECT, "ReadResponse returned RESPONSE_USER_CANCEL");
+ break;
+ }
+#endif // DEBUG
+ }
+
+ switch (iRet)
+ {
+ case RESPONSE_USER_CANCEL:
+ return ERROR_CANCELLED;
+
+ case RESPONSE_FAILURE:
+ case RESPONSE_UNRECOG:
+ case RESPONSE_NONE:
+ iResponseFailureCount++;
+ if (iResponseFailureCount >= MAX_RESPONSE_FAILURES)
+ {
+ TRACE_MSG(TF_ERROR, "had %d failed responses, aborting IdentifyModem()", iResponseFailureCount);
+ return ERROR_PORT_INACCESSIBLE;
+ }
+ else
+ {
+ DCB DCB;
+ BOOL fCancel;
+
+ // Get current baud rate
+ if (GetCommState(hPort, &DCB) < 0)
+ {
+ TRACE_MSG(TF_ERROR, "GetCommState failed");
+ return ERROR_PORT_INACCESSIBLE;
+ }
+
+ if (!TestBaudRate(hPort, DCB.BaudRate, 0, pdc, &fCancel)) // attempt to recover friendship with the modem
+ {
+ if (fCancel)
+ {
+ return ERROR_CANCELLED;
+ }
+ else
+ {
+ TRACE_MSG(TF_ERROR, "couldn't recover contact with the modem.");
+ return ERROR_PORT_INACCESSIBLE;
+ }
+ }
+ iCurQuery--; // try the same query again
+ }
+ break;
+
+ case RESPONSE_OK:
+ case RESPONSE_ERROR:
+ CleanseResponse(iCurQuery, pszReadBuf, pszCRCBuf);
+
+ if (ATI0 == iCurQuery)
+ {
+ ASSERT(ATI0_LEN <= sizeof(pszCRCBuf)); // make sure we are doing a legal copy
+ CopyMemory(lpszATI0Result, pszCRCBuf, ATI0_LEN);
+ }
+
+ lpszPtr = (LPSTR) pszCRCBuf;
+
+ while (*lpszPtr)
+ {
+ ulCrc = ((ulCrc >> 8) & 0x00FFFFFF) ^ ulCrcTable[(ulCrc ^ *lpszPtr++) & 0xFF];
+ }
+
+
+ LogPrintf(hLog, IDS_DET_OK_1,
+ ConvertToPrintable(c_aszQueries[iCurQuery],
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+ LogPrintf(hLog, IDS_DET_OK_2,
+ ConvertToPrintable(pszReadBuf,
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_DETECT, "response (len=%d): %s", lstrlenA(pszReadBuf),
+ ConvertToPrintable(pszReadBuf,
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+#endif
+ LogPrintf(hLog, IDS_DET_OK_1,
+ ConvertToPrintable(c_aszQueries[iCurQuery],
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+ LogPrintf(hLog, IDS_DET_OK_2,
+ ConvertToPrintable(pszCRCBuf,
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_DETECT, "converted form : %s",
+ ConvertToPrintable(pszCRCBuf,
+ pszPrintableBuf,
+ sizeof(pszPrintableBuf)));
+#endif
+ iResponseFailureCount = 0; // reset count of failed responses to 0 for upcoming query
+ break;
+
+ default:
+ TRACE_MSG(TF_ERROR, "hit a default it shouldn't have hit.");
+ ASSERT(0);
+ return ERROR_PORT_INACCESSIBLE;
+ }
+ }
+
+ // Finish up CRC
+ ulCrc ^= 0xFFFFFFFF;
+
+ lstrcpyA(szASCIIModem, c_szModemIdPrefix);
+ j = lstrlenA(szASCIIModem);
+
+ // Convert CRC into hex text.
+ for (i = 0; i < 8; i++)
+ {
+ szASCIIModem[i+j] = "0123456789ABCDEF"[(ulCrc>>((7-i)<<2))&0xf];
+ }
+ szASCIIModem[i+j] = 0; // null-terminate
+
+ DBG_EXIT(IdentifyModem);
+ TRACE_MSG(TF_DETECT, "final CRC = 0x%8lx (ascii = %s)", ulCrc, szASCIIModem);
+
+ LogPrintf(hLog, IDS_DET_ID, szASCIIModem);
+
+#ifdef UNICODE
+ MultiByteToWideChar(CP_ACP, 0, szASCIIModem, -1, pszModemName, MAX_MODEM_ID_LEN+1);
+ // match lstrcpyn behaviour of always null-terminating the line.
+ pszModemName[MAX_MODEM_ID_LEN]=0;
+#else
+ lstrcpynA(pszModemName, szASCIIModem, MAX_MODEM_ID_LEN+1);
+#endif // UNICODE
+
+ return NO_ERROR;
+}
+
+// returns buffer full o' data and an int.
+// if dwRcvDelay is NULL, default RCV_DELAY will be used, else
+// dwRcvDelay (miliseconds) will be used
+// *lpfCancel will be true if we are exiting because of a user requested cancel.
+UINT
+PRIVATE
+ReadPort(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ DWORD dwRcvDelay,
+ int FAR *lpiError,
+ PDETECTCALLBACK pdc,
+ BOOL FAR *lpfCancel)
+{
+ DWORD cb, cbLenRet;
+ UINT uTotal = 0;
+ DWORD tStart;
+ DWORD dwDelay;
+ COMSTAT comstat;
+ COMMTIMEOUTS cto;
+ DWORD dwError;
+ DWORD cbLeft;
+#ifdef DEBUG
+ DWORD dwZeroCount = 0;
+#endif // DEBUG
+
+ ASSERT(lpvBuf);
+ ASSERT(uRead);
+ ASSERT(lpiError);
+
+ *lpiError = 0;
+ *lpfCancel = FALSE;
+
+ tStart = GetTickCount();
+ dwDelay = dwRcvDelay ? dwRcvDelay : RCV_DELAY;
+
+ // save space for terminator
+ uRead--;
+ cbLeft=uRead;
+
+
+ // Set comm timeout
+ if (!GetCommTimeouts(hPort, &cto))
+ {
+ ZeroMemory(&cto, sizeof(cto));
+ };
+ // Allow a constant write timeout
+ cto.ReadIntervalTimeout = 0;
+ cto.ReadTotalTimeoutMultiplier = 0;
+ cto.ReadTotalTimeoutConstant = 25;
+ SetCommTimeouts(hPort, &cto);
+
+ do
+ {
+ cb = 0;
+ while( cbLeft
+ && ReadFile(hPort, lpvBuf + uTotal + cb, 1, &cbLenRet, NULL)
+ && (cbLenRet))
+ {
+ ASSERT(cbLenRet==1);
+ cb ++;
+ cbLeft--;
+ };
+
+#ifdef DEBUG
+ if (cb)
+ {
+ // TRACE_MSG(TF_DETECT, "ReadComm returned %d (zero count = %d)", cb, dwZeroCount);
+ dwZeroCount = 0;
+ }
+ else
+ {
+ dwZeroCount++;
+ }
+#endif // DEBUG
+
+ {
+ MSG msg;
+
+ while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ DispatchMessage(&msg);
+ };
+ }
+
+ if (cb == 0) // possible error?
+ {
+ //*lpiError |= GetCommError(hPort, &comstat);
+ dwError = 0;
+ ClearCommError(hPort, &dwError, &comstat);
+ *lpiError |= dwError;
+#ifdef DEBUG
+ if (dwError)
+ {
+ TRACE_MSG(TF_DETECT, "ReadComm returned %d, comstat: status = %hx, in = %u, out = %u",
+ cb, dwError, comstat.cbInQue, comstat.cbOutQue);
+ };
+#endif // DEBUG
+ }
+
+ if (cb)
+ {
+ // successful read - add to total and reset delay
+ uTotal += cb;
+
+ if (uTotal >= uRead)
+ {
+ ASSERT(uTotal == uRead);
+ break;
+ }
+ tStart = GetTickCount();
+ dwDelay = CHAR_DELAY;
+ }
+ else
+ {
+ if (DetectQueryCancel(pdc))
+ {
+ TRACE_MSG(TF_DETECT, "User pressed cancel.");
+ *lpfCancel = TRUE;
+ break;
+ }
+ }
+
+ // While read is successful && time since last read < delay allowed)
+ } while (cbLeft && (GetTickCount() - tStart) < dwDelay);
+
+ *(lpvBuf+uTotal) = 0;
+
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_DETECT, "ReadPort returning %d", uTotal);
+#endif
+ return uTotal;
+}
+
+// Convert CBR format speeds to decimal. Returns 0 on error
+DWORD NEAR PASCAL CBR_To_Decimal(UINT uiCBR)
+{
+ DWORD dwBaudRate;
+
+ switch (uiCBR)
+ {
+ case CBR_300:
+ dwBaudRate = 300L;
+ break;
+ case CBR_1200:
+ dwBaudRate = 1200L;
+ break;
+ case CBR_2400:
+ dwBaudRate = 2400L;
+ break;
+ case CBR_9600:
+ dwBaudRate = 9600L;
+ break;
+ case CBR_19200:
+ dwBaudRate = 19200L;
+ break;
+ case CBR_38400:
+ dwBaudRate = 38400L;
+ break;
+ case CBR_56000:
+ dwBaudRate = 57600L;
+ break;
+ case CBR_HACK_115200:
+ dwBaudRate = 115200L;
+ break;
+// case CBR_110:
+// case CBR_600:
+// case CBR_4800:
+// case CBR_14400:
+// case CBR_128000:
+// case CBR_256000:
+ default:
+ TRACE_MSG(TF_ERROR, "An unsupported CBR_x value was used.");
+ dwBaudRate = 0;
+ break;
+ }
+ return dwBaudRate;
+}
+
+// Convert pszIn to a printable pszOut, not using more than cbOut bytes.
+// WARNING: Not a DBCS function.
+// Returns a pointer to the output buffer. Always successful.
+LPSTR NEAR ConvertToPrintable(LPCSTR lpszIn, LPSTR lpszOut, UINT uOut)
+{
+ LPSTR lpszReturn = lpszOut;
+
+ ASSERT(lpszOut);
+ ASSERT(lpszIn);
+ ASSERT(uOut);
+
+ uOut--; // save space for the null-terminator
+
+ while (*lpszIn)
+ {
+ // ascii printable chars are between 0x20 and 0x7e, inclusive
+ if (*lpszIn >= 0x20 && *lpszIn <= 0x7e)
+ {
+ // printable text
+ if (uOut)
+ {
+ uOut--;
+ *lpszOut++ = *lpszIn;
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ // binary
+ if (uOut >= 4)
+ {
+ uOut -= 4;
+ switch (*lpszIn)
+ {
+ case CR:
+ *lpszOut++ = '<'; *lpszOut++ = 'c'; *lpszOut++ = 'r'; *lpszOut++ = '>';
+ break;
+ case LF:
+ *lpszOut++ = '<'; *lpszOut++ = 'l'; *lpszOut++ = 'f'; *lpszOut++ = '>';
+ break;
+ default:
+ *lpszOut++ = '<';
+ *lpszOut++ = c_szHex[(*lpszIn>>4) & 0xf];
+ *lpszOut++ = c_szHex[*lpszIn & 0xf];
+ *lpszOut++ = '>';
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+ lpszIn++;
+ }
+
+ *lpszOut = 0; // make sure we are null-terminated
+
+ return lpszReturn;
+}
+
+
+//-----------------------------------------------------------------------------------
+// Detection Signature structure functions
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: This function initializes a MODEM_DETECT_SIG signature
+ structure.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+DetectSig_Init(
+ IN PMODEM_DETECT_SIG pmds,
+ IN DWORD dwFlags,
+ IN LPCTSTR pszHardwareID, OPTIONAL
+ IN LPCTSTR pszPort) OPTIONAL
+ {
+ BOOL bRet;
+
+ ASSERT(pmds);
+
+ if ( !pmds )
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ ZeroInit(pmds);
+ pmds->cbSize = sizeof(*pmds);
+ pmds->dwMask = 0;
+ pmds->dwFlags = dwFlags;
+
+ if (pszHardwareID)
+ {
+ SetFlag(pmds->dwMask, MDSM_HARDWAREID);
+ lstrcpyn(pmds->szHardwareID, pszHardwareID, SIZECHARS(pmds->szHardwareID));
+ }
+
+ if (pszPort)
+ {
+ SetFlag(pmds->dwMask, MDSM_PORT);
+ lstrcpyn(pmds->szPort, pszPort, SIZECHARS(pmds->szPort));
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function returns TRUE if the modem detection
+ signature is valid.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PUBLIC
+DetectSig_Validate(
+ IN PMODEM_DETECT_SIG pmds)
+ {
+ return (pmds &&
+ sizeof(*pmds) == pmds->cbSize &&
+ 0 == (pmds->dwMask & ~MDSM_ALL) &&
+ 0 == (pmds->dwFlags & ~MDSF_ALL));
+ }
+
+
+/*----------------------------------------------------------
+Purpose: If the detection signature's port field does not
+ match what the device's AttachedTo property says,
+ then update it.
+
+Returns: TRUE if the detection signature needs to be set
+ FALSE if the detection signature is okay as it is
+
+Cond: --
+*/
+BOOL
+PRIVATE
+UpdateAttachedPort(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN OUT PMODEM_DETECT_SIG pmds)
+ {
+ BOOL bRet;
+ MODEM_PRIV_PROP mpp;
+
+ // Get the attached port
+ mpp.cbSize = sizeof(mpp);
+ mpp.dwMask = MPPM_PORT;
+
+ bRet = CplDiGetPrivateProperties(hdi, pdevData, &mpp);
+ if (bRet)
+ {
+ // Assume that the signature does not need changing
+ bRet = FALSE;
+
+ if (IsFlagSet(mpp.dwMask, MPPM_PORT))
+ {
+ // Do we need to update the signature?
+ if (IsFlagClear(pmds->dwMask, MDSM_PORT) ||
+ IsFlagSet(pmds->dwMask, MDSM_PORT) &&
+ !IsSzEqual(pmds->szPort, mpp.szPort))
+ {
+ // Yes
+ SetFlag(pmds->dwMask, MDSM_PORT);
+ lstrcpyn(pmds->szPort, mpp.szPort, SIZECHARS(pmds->szPort));
+ bRet = TRUE;
+ }
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function compares two modem detection signatures
+ and determines if they are identical.
+
+Returns: NO_ERROR
+ ERROR_DUPLICATE_FOUND if the modem signatures match
+ other errors
+
+Cond: --
+*/
+DWORD
+CALLBACK
+DetectSig_Compare(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevDataNew,
+ IN PSP_DEVINFO_DATA pdevDataExisting,
+ IN PVOID lParam) OPTIONAL
+ {
+ DWORD dwRet;
+ PDETECTSIG_PARAMS pparams = (PDETECTSIG_PARAMS)lParam;
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevDataNew);
+ ASSERT(pdevDataExisting);
+
+ try
+ {
+ MODEM_DETECT_SIG mdsNew;
+ MODEM_DETECT_SIG mdsExisting;
+ DWORD dwComparedMask = 0;
+ DWORD dwMatchingMask = 0;
+
+ // Assume the signatures don't match
+ dwRet = NO_ERROR;
+
+ mdsNew.cbSize = sizeof(mdsNew);
+ mdsExisting.cbSize = sizeof(mdsExisting);
+
+ // Get the detection signatures for both device instances
+ if (CplDiGetDetectSignature(hdi, pdevDataNew, &mdsNew) &&
+ CplDiGetDetectSignature(hdi, pdevDataExisting, &mdsExisting))
+ {
+ // Do the sizes look like they are valid detection signatures?
+ if (sizeof(MODEM_DETECT_SIG) == mdsNew.cbSize &&
+ sizeof(MODEM_DETECT_SIG) == mdsExisting.cbSize)
+ {
+ // Yes; make sure the detection signature is up-to-date
+ DWORD cFieldsCompared = 0;
+ DWORD cMatches = 0;
+
+ // Since the user can attach the modem to any port
+ // after first installing it, let's go check what the
+ // existing modem is attached to currently.
+ if (UpdateAttachedPort(hdi, pdevDataExisting, &mdsExisting))
+ {
+ CplDiSetDetectSignature(hdi, pdevDataExisting, &mdsExisting);
+ }
+
+
+ // Compare each of the valid fields
+
+ // Count the number of fields that can be compared, and
+ // the number of matching fields. If these two numbers
+ // are the same and the number of fields that can be
+ // compared is not 0, then we have a duplicate device.
+
+ if (IsFlagSet(mdsNew.dwMask, MDSM_HARDWAREID) &&
+ IsFlagSet(mdsExisting.dwMask, MDSM_HARDWAREID))
+ {
+ SetFlag(dwComparedMask, MDSM_HARDWAREID);
+ cFieldsCompared++;
+
+ if (IsSzEqual(mdsNew.szHardwareID, mdsExisting.szHardwareID))
+ {
+ SetFlag(dwMatchingMask, MDSM_HARDWAREID);
+ cMatches++;
+ }
+ }
+
+ if (IsFlagSet(mdsNew.dwMask, MDSM_PORT) &&
+ IsFlagSet(mdsExisting.dwMask, MDSM_PORT))
+ {
+ SetFlag(dwComparedMask, MDSM_PORT);
+ cFieldsCompared++;
+
+ if (IsSzEqual(mdsNew.szPort, mdsExisting.szPort))
+ {
+ SetFlag(dwMatchingMask, MDSM_PORT);
+ cMatches++;
+ }
+ }
+
+ // There are some minimum requirements for two devices
+ // to be duplicates.
+ //
+ // 1) Both must have a matching hardware ID
+ // 2) Both must be on the same port
+ //
+ // Anything else is frosting on the cake.
+
+ // Did the hardware ID and port match?
+ if ( !(2 == cFieldsCompared && 2 == cMatches) )
+ {
+ // No; don't waste anymore of our time
+ goto Leave;
+ }
+
+ if (IsFlagSet(mdsNew.dwMask, MDSM_DEVICEDESC) &&
+ IsFlagSet(mdsExisting.dwMask, MDSM_DEVICEDESC))
+ {
+ SetFlag(dwComparedMask, MDSM_DEVICEDESC);
+ cFieldsCompared++;
+
+ if (IsSzEqual(mdsNew.szDeviceDesc, mdsExisting.szDeviceDesc))
+ {
+ SetFlag(dwMatchingMask, MDSM_DEVICEDESC);
+ cMatches++;
+ }
+ }
+
+
+ // Do we have a duplicate device?
+ if (0 < cFieldsCompared && cFieldsCompared == cMatches)
+ {
+ // Yes
+ dwRet = ERROR_DUPLICATE_FOUND;
+ }
+ }
+ }
+
+
+Leave:
+ // Return to the caller some information about which parts
+ // of the detection signature matched.
+ if (pparams)
+ {
+ pparams->dwComparedMask = dwComparedMask;
+ pparams->dwMatchingMask = dwMatchingMask;
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+
+ return dwRet;
+ }
+
+#ifdef DEBUG
+void HexDump(TCHAR *ptchHdr, LPBYTE lpBuf, DWORD cbLen)
+{
+ TCHAR rgch[10000];
+ TCHAR *pc = rgch;
+ TCHAR *pcMore = TEXT("");
+
+ if (DisplayDebug(TF_DETECT))
+ {
+ pc += wsprintf(pc, TEXT("HEX DUMP(%s,%lu): ["), ptchHdr, cbLen);
+ if (cbLen>1000) {pcMore = TEXT(", ..."); cbLen=1000;}
+
+ for(;cbLen--; lpBuf++)
+ {
+ pc += wsprintf(pc, TEXT(" %02lx"), (unsigned long) *lpBuf);
+ if (!((cbLen+1)%20))
+ {
+ pc += wsprintf(pc, TEXT("\r\n"));
+ }
+ }
+ pc += wsprintf(pc, TEXT("]\r\n"));
+
+ OutputDebugString(rgch);
+ }
+}
+#endif // DEBUG
diff --git a/private/unimodem/cpl/detect.h b/private/unimodem/cpl/detect.h
new file mode 100644
index 000000000..afbd93d43
--- /dev/null
+++ b/private/unimodem/cpl/detect.h
@@ -0,0 +1,112 @@
+//
+// detect.h
+//
+
+#ifndef __DETECT_H__
+#define __DETECT_H__
+
+
+#define MAX_MODEM_ID_LEN (8 + 8) // 8 digits in "UNIMODEM" and 8
+ // hex digits in a dword
+
+
+//-----------------------------------------------------------------------------------
+// Detection error values and structure
+//-----------------------------------------------------------------------------------
+
+// These are manifest constants that are roughly equivalent
+// to some Win32 errors. We use these errors privately.
+#define ERROR_PORT_INACCESSIBLE ERROR_UNKNOWN_PORT
+#define ERROR_NO_MODEM ERROR_SERIAL_NO_DEVICE
+
+
+// 6/13/96 JosephJ BUGBUG
+// NT-SUR BUG#18993 --
+// The detection signature and the comparison
+// mechanism should be changed so that it identifies the same modem even
+// if it has different rank0 IDs (it should include the file and inf section
+// perhaps.
+// Note: win95 and nt-sur have another bug in that they truncate
+// the hardware id by 1 char because the size was exactly MAX_MODEM_ID_LEN.
+// We didn't change it for nt-sur because we discovered the problem very late
+// and the benefit (not truncating the last char) is not justifiiable as a
+// release stopper.
+
+// This structure provides modem-specific detection signature
+// information.
+typedef struct tagMODEM_DETECT_SIG
+ {
+ DWORD cbSize;
+ DWORD dwMask; // MDSM_* bitfield
+ DWORD dwFlags; // MDSF_* bitfield
+ DWORD dwMaxDTE;
+ DWORD dwMaxDCE;
+ BYTE szBlindOn[3]; // Room for X0 or X3
+ BYTE chReserved1; // Padding
+ BYTE szBlindOff[3]; // Room for X4
+ BYTE chReserved2; // Padding
+ // JosephJ 6/13/96: following should
+ // be: szHardwareID[MAX_MODEM_ID_LEN+1];
+ TCHAR szHardwareID[MAX_MODEM_ID_LEN];
+ TCHAR szDeviceDesc[LINE_LEN];
+ TCHAR szPort[LINE_LEN];
+ } MODEM_DETECT_SIG, FAR * PMODEM_DETECT_SIG;
+
+// These are mask flags indicating which fields can be compared
+// when detecting duplicate devices
+#define MDSM_MAXDTEDCE 0x00000001
+#define MDSM_BLINDONOFF 0x00000002
+#define MDSM_HARDWAREID 0x00000004
+#define MDSM_PORT 0x00000008
+#define MDSM_DEVICEDESC 0x00000010
+#define MDSM_ALL 0x0000001F
+
+// These are flags for MODEM_DETECT_SIG
+#define MDSF_UPDATE_DEVCAPS 0x00000001
+#define MDSF_DETECTED 0x00000002
+#define MDSF_ALL 0x00000003
+
+BOOL
+PUBLIC
+DetectSig_Init(
+ IN PMODEM_DETECT_SIG pmds,
+ IN DWORD dwFlags,
+ IN LPCTSTR pszHardwareID,
+ IN LPCTSTR pszPort); OPTIONAL
+
+BOOL
+PUBLIC
+DetectSig_Validate(
+ IN PMODEM_DETECT_SIG pmds);
+
+// This structure is a context block for the DetectSig_Compare
+// function.
+typedef struct
+ {
+ DWORD dwComparedMask; // MDSM_ bit field of the fields that could
+ // be compared
+ DWORD dwMatchingMask; // MDSM_ bit field of the fields that matched
+ // in the modem detection signature
+ } DETECTSIG_PARAMS, FAR * PDETECTSIG_PARAMS;
+
+DWORD
+CALLBACK
+DetectSig_Compare(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevDataNew,
+ IN PSP_DEVINFO_DATA pdevDataExisting,
+ IN PVOID lParam); OPTIONAL
+
+
+
+HANDLE
+PUBLIC
+OpenDetectionLog();
+
+void
+PUBLIC
+CloseDetectionLog(
+ IN HANDLE hLog);
+
+
+#endif // __DETECT_H__
diff --git a/private/unimodem/cpl/dll.c b/private/unimodem/cpl/dll.c
new file mode 100644
index 000000000..f51871214
--- /dev/null
+++ b/private/unimodem/cpl/dll.c
@@ -0,0 +1,229 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// File: dll.c
+//
+// This file contains the library entry points
+//
+// History:
+// 12-23-93 ScottH Created
+// 9-22-95 ScottH Ported to NT
+// 9-29-95 ScottH Copied from MODEMUI
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h"
+#include <rovdbg.h> // debug assertion code
+
+// Global data
+//
+int g_cProcesses = 0;
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the DLL
+Returns:
+Cond: --
+*/
+BOOL PRIVATE Dll_Initialize(void)
+ {
+ BOOL bRet = TRUE;
+
+ InitCommonControls();
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Register window classes per process
+Returns:
+Cond: --
+*/
+BOOL PRIVATE InitWindowClasses(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Terminate DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_Terminate(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Unregister window classes per process
+Returns:
+Cond: --
+*/
+void PRIVATE TermWindowClasses(
+ HINSTANCE hinst)
+ {
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Attach a process to this DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessAttach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+
+ g_hinst = hDll;
+
+#ifdef DEBUG
+
+ // We do this simply to load the debug .ini flags
+ //
+ RovComm_ProcessIniFile();
+
+ TRACE_MSG(TF_GENERAL, "Process Attach [%d] (hDll = %lx)", g_cProcesses, hDll);
+ DEBUG_BREAK(BF_ONPROCESSATT);
+
+#endif
+
+ if (g_cProcesses++ == 0)
+ {
+ bSuccess = Dll_Initialize();
+ }
+
+ if (bSuccess)
+ {
+ // (Only do this if we succeeded above)
+ //
+ // Register the window classes again (they are per-process)
+ //
+ bSuccess = InitWindowClasses(hDll);
+ }
+
+ return bSuccess;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Detach a process from the DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessDetach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+ ASSERT(hDll == g_hinst);
+
+ DEBUG_CODE( TRACE_MSG(TF_GENERAL, "Process Detach [%d] (hDll = %lx)",
+ g_cProcesses-1, hDll); )
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONPROCESSDET); )
+
+ if (--g_cProcesses == 0)
+ {
+ bSuccess = Dll_Terminate(g_hinst);
+ }
+
+ TermWindowClasses(hDll);
+
+ return bSuccess;
+ }
+
+
+//
+// Per-instance data
+//
+#pragma data_seg(DATASEG_PERINSTANCE)
+
+HINSTANCE g_hinst = 0;
+
+#pragma data_seg()
+
+
+// **************************************************************************
+// WIN32 specific code
+// **************************************************************************
+
+#ifdef WIN32
+
+/*----------------------------------------------------------
+Purpose: Win32 Libmain
+Returns: --
+Cond: --
+*/
+BOOL APIENTRY LibMain(
+ HANDLE hDll,
+ DWORD dwReason,
+ LPVOID lpReserved)
+ {
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ Dll_ProcessAttach(hDll);
+ break;
+
+ case DLL_PROCESS_DETACH:
+ Dll_ProcessDetach(hDll);
+ break;
+
+ case DLL_THREAD_ATTACH:
+
+#ifdef DEBUG
+
+ DEBUG_BREAK(BF_ONTHREADATT);
+
+#endif
+
+ break;
+
+ case DLL_THREAD_DETACH:
+
+#ifdef DEBUG
+
+ DEBUG_BREAK(BF_ONTHREADDET);
+
+#endif
+
+ break;
+
+ default:
+ break;
+ }
+
+ return TRUE;
+ }
+
+
+#else // WIN32
+
+
+// **************************************************************************
+// WIN16 specific code
+// **************************************************************************
+
+
+BOOL CALLBACK LibMain(HINSTANCE hinst, UINT wDS, DWORD unused)
+ {
+ return Dll_ProcessAttach(hinst);
+ }
+
+BOOL CALLBACK WEP(BOOL fSystemExit)
+ {
+ return Dll_ProcessDetach(g_hinst);
+ }
+
+#endif // WIN32
+
+
+
+
diff --git a/private/unimodem/cpl/dll.h b/private/unimodem/cpl/dll.h
new file mode 100644
index 000000000..3eb12cbd7
--- /dev/null
+++ b/private/unimodem/cpl/dll.h
@@ -0,0 +1,42 @@
+//
+// dll.h
+//
+
+#ifndef __DLL_H__
+#define __DLL_H__
+
+extern HINSTANCE g_hinst;
+
+#ifdef WIN32
+
+// Notes:
+// 1. Never "return" from the critical section.
+// 2. Never "SendMessage" or "Yield" from the critical section.
+// 3. Never call USER API which may yield.
+// 4. Always make the critical section as small as possible.
+// 5. Critical sections in Win95 block across processes. In NT
+// they are per-process only, so use mutexes instead.
+//
+
+#define WIN32_CODE(x) x
+
+void PUBLIC Dll_EnterExclusive(void);
+void PUBLIC Dll_LeaveExclusive(void);
+extern BOOL g_bExclusive;
+
+#define ENTER_X() Dll_EnterExclusive();
+#define LEAVE_X() Dll_LeaveExclusive();
+#define ASSERT_X() ASSERT(g_bExclusive)
+
+#else // WIN32
+
+#define WIN32_CODE(x)
+
+#define ENTER_X()
+#define LEAVE_X()
+#define ASSERT_X()
+
+#endif // WIN32
+
+#endif //!__DLL_H__
+
diff --git a/private/unimodem/cpl/makefile b/private/unimodem/cpl/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/cpl/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/cpl/modem.bmp b/private/unimodem/cpl/modem.bmp
new file mode 100644
index 000000000..db62b4d95
--- /dev/null
+++ b/private/unimodem/cpl/modem.bmp
Binary files differ
diff --git a/private/unimodem/cpl/modem.def b/private/unimodem/cpl/modem.def
new file mode 100644
index 000000000..57589e8df
--- /dev/null
+++ b/private/unimodem/cpl/modem.def
@@ -0,0 +1,14 @@
+LIBRARY MODEM
+
+DESCRIPTION 'Windows Modem Control Panel'
+
+CODE MOVEABLE DISCARDABLE PRELOAD
+DATA MOVEABLE PRELOAD SINGLE
+
+HEAPSIZE 512
+
+EXPORTS
+ CPlApplet
+ ClassInstall32
+
+ \ No newline at end of file
diff --git a/private/unimodem/cpl/modem.h b/private/unimodem/cpl/modem.h
new file mode 100644
index 000000000..45e78d4c3
--- /dev/null
+++ b/private/unimodem/cpl/modem.h
@@ -0,0 +1,530 @@
+//
+// modem.h
+//
+
+#ifndef __MODEM_H__
+#define __MODEM_H__
+
+//****************************************************************************
+//
+//****************************************************************************
+
+// Maximum number of modems that can be installed (simultaneously). Used in
+// avoiding duplicate installations.
+#define MAX_INSTALLATIONS 4096
+
+
+// Global flags for the CPL, and their values:
+extern int g_iCPLFlags;
+
+#define FLAG_USER_IS_ADMIN 0x0001
+#define FLAG_INSTALL_NOUI 0x0002
+
+// Check for flag indicating that user is an admin
+#define USER_IS_ADMIN() (g_iCPLFlags & FLAG_USER_IS_ADMIN)
+
+#define INSTALL_NOUI() (g_iCPLFlags & FLAG_INSTALL_NOUI)
+
+
+#define MAX_REG_KEY_LEN 128
+
+
+// These should match the values in MODEMUI.DLL
+#define IDI_NULL_MODEM 700
+#define IDI_EXTERNAL_MODEM 701
+#define IDI_INTERNAL_MODEM 702
+#define IDI_PCMCIA_MODEM 703
+
+#define LVIF_ALL LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE
+
+// This dialog ID is a pre-arranged ID that is
+// defined in the TAPI DLL.
+#define IDD_WIZ_DIALINFO 400
+
+
+//-----------------------------------------------------------------------------------
+// Setup info values and structure
+//-----------------------------------------------------------------------------------
+
+// TAPI entry-points
+typedef LONG (WINAPI FAR* DIALINITEDPROC)(LPDWORD pdwInited);
+typedef LONG (WINAPI FAR* OPENDIALASSTPROC)(HWND hwnd, LPCSTR pszAddressIn, BOOL bSimple, BOOL bSilentInstall);
+
+
+// This structure contains the private data shared across the modem wizard
+// dialogs.
+typedef struct tagSETUPINFO
+ {
+ DWORD cbSize;
+ DWORD dwFlags; // SIF_* bitfield
+
+ HPORTMAP hportmap; // List of ports on system
+ TCHAR szPortQuery[MAX_BUF_SHORT]; // Single port to detect on
+ LPTSTR pszPortList; // List of ports to install on
+
+ HDEVINFO hdi; // DeviceInfoSet
+ PSP_DEVINFO_DATA pdevData; // May be NULL most of the time
+ PSP_INSTALLWIZARD_DATA piwd; // InstallWizard Data
+ SP_SELECTDEVICE_PARAMS selParams; // Cached select params
+ MODEM_INSTALL_WIZARD miw; // Saved optional parameters
+
+ // TAPI calls
+ HINSTANCE hinstTapi;
+ DIALINITEDPROC pfnDialInited;
+
+ } SETUPINFO, FAR * LPSETUPINFO;
+
+// Flags for SETUPINFO
+#define SIF_PORTS_GALORE 0x00000001 // There are > 4 ports on the system
+#define SIF_DETECTED_GENERIC 0x00000002 // Standard modem detected
+#define SIF_JUMPED_TO_SELECTPAGE 0x00000004 // Wizard proceeded to select modem page
+#define SIF_DETECTED_MODEM 0x00000008 // A modem was detected
+#define SIF_DETECTING 0x00000010 // Wizard is currently detecting
+#define SIF_DETECT_CANCEL 0x00000020 // Cancel pending during detection
+#define SIF_JUMP_PAST_DONE 0x00000040 // Skip the "you're done!" page
+#define SIF_RELEASE_IN_CALLBACK 0x00000080 // Release the private data in the prsht callback
+
+// Status callback for DIF_DETECT (modem specific)
+typedef BOOL (CALLBACK FAR* DETECTSTATUSPROC)(DWORD nMsg, LPARAM lParam1, LPARAM lParamUser);
+
+// Messages for DETECTSTATUSPROC
+#define DSPM_SETPORT 0L
+#define DSPM_SETSTATUS 1L
+#define DSPM_QUERYCANCEL 2L
+
+// lParam1 values for DSPM_SETSTATUS
+#define DSS_CLEAR 0L
+#define DSS_LOOKING 1L
+#define DSS_QUERYING_RESPONSES 2L
+#define DSS_CHECK_FOR_COMPATIBLE 3L
+#define DSS_FOUND_MODEM 4L
+#define DSS_FOUND_NO_MODEM 5L
+#define DSS_FINISHED 6L
+
+
+// This structure is used for DIF_DETECT. There is no
+// defined SETUPAPI structure for DIF_DETECT, so using this
+// is okay.
+typedef struct tagDETECT_DATA
+ {
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD dwFlags;
+ TCHAR szPortQuery[MAX_BUF_SHORT];
+ HWND hwndOutsideWizard;
+ DETECTSTATUSPROC pfnCallback;
+ LPARAM lParam; // User data for pfnCallback
+ } DETECT_DATA, FAR * PDETECT_DATA;
+
+// Flags for DETECT_DATA
+#define DDF_DEFAULT 0x00000000
+#define DDF_QUERY_SINGLE 0x00000001
+#define DDF_CONFIRM 0x00000002
+#define DDF_USECALLBACK 0x00000004
+
+
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+
+// Global flags which keep track of whether a device had been added/removed/etc.
+#define fDF_DEVICE_ADDED 0x1
+#define fDF_DEVICE_NEEDS_REBOOT 0x2
+#define fDF_DEVICE_REMOVED 0x4
+#define DEVICE_ADDED(_flg) (_flg&fDF_DEVICE_ADDED)
+#define DEVICE_REMOVED(_flg) (_flg&fDF_DEVICE_REMOVED)
+#define DEVICE_CHANGED(_flg) (_flg&(fDF_DEVICE_REMOVED|fDF_DEVICE_ADDED))
+
+extern DWORD gDeviceFlags;
+
+#endif // INSTANT_DEVICE_ACTIVATION
+
+//-----------------------------------------------------------------------------------
+// cpl.c
+//-----------------------------------------------------------------------------------
+
+// Constant strings
+extern TCHAR const FAR c_szAttachedTo[];
+extern TCHAR const FAR c_szDeviceType[];
+extern TCHAR const FAR c_szHardwareID[];
+extern TCHAR const FAR c_szFriendlyName[];
+extern TCHAR const FAR c_szManufacturer[];
+
+extern TCHAR const FAR c_szHardwareIDSerial[];
+extern TCHAR const FAR c_szHardwareIDParallel[];
+extern TCHAR const FAR c_szInfSerial[];
+extern TCHAR const FAR c_szInfParallel[];
+
+extern TCHAR const FAR c_szRunOnce[];
+
+extern TCHAR const FAR c_szTapiDLL[];
+
+extern TCHAR const FAR c_szResponses[];
+extern TCHAR const FAR c_szRefCount[];
+
+extern LPGUID g_pguidModem;
+
+//-----------------------------------------------------------------------------------
+// ci.c
+//-----------------------------------------------------------------------------------
+
+// This value is the amount of ports needed on the system
+// before we will consider doing a multi-modem detection
+// installation.
+#define MIN_MULTIPORT 4
+
+
+// Used by the class installer and detection engine
+typedef struct tagDETECTCALLBACK
+ {
+ DETECTSTATUSPROC pfnCallback;
+ LPARAM lParam; // User data for pfnCallback
+ } DETECTCALLBACK, * PDETECTCALLBACK;
+
+DWORD
+PUBLIC
+DetectModemOnPort(
+ IN HDEVINFO hdi,
+ IN PDETECTCALLBACK pdc,
+ IN HANDLE hLog,
+ IN LPCTSTR pszPort,
+ OUT PMODEM_DETECT_SIG pmds,
+ OUT PSP_DEVINFO_DATA pdevDataOut);
+
+void
+PUBLIC
+DetectSetStatus(
+ PDETECTCALLBACK pdc,
+ DWORD nStatus);
+
+
+//-----------------------------------------------------------------------------------
+// ui.c
+//-----------------------------------------------------------------------------------
+
+BOOL CALLBACK SelPrevPageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK IntroDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK SelQueryPortDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK PortDetectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK DetectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK FoundDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK NoModemDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK PortManualDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK DialInfoDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK InstallDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK DoneDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+BOOL
+CALLBACK
+CloneDlgProc(
+ IN HWND hDlg,
+ IN UINT message,
+ IN WPARAM wParam,
+ IN LPARAM lParam);
+
+void PUBLIC Detect_SetStatus(HWND hdlg, UINT idResource);
+void PUBLIC Detect_SetPort(HWND hdlg,LPCTSTR lpc_szName);
+BOOL PUBLIC Detect_QueryCancel(HWND hdlg);
+void PUBLIC Install_SetStatus(HWND hdlg, LPCTSTR lpctszStatus);
+
+
+//-----------------------------------------------------------------------------------
+// util.c
+//-----------------------------------------------------------------------------------
+
+#ifdef WIN95
+LPCTSTR
+PUBLIC
+StrFindInstanceName(
+ IN LPCTSTR pszPath);
+#endif
+
+void
+PUBLIC
+EnterInsideWizard(
+ IN HWND hDlg);
+
+void
+PUBLIC
+LeaveInsideWizard(
+ IN HWND hDlg);
+
+void
+PUBLIC
+MakeUniqueName(
+ OUT LPTSTR pszBuf,
+ IN LPCTSTR pszBase,
+ IN UINT nCount);
+
+void
+PUBLIC
+DoRunOnce(
+ IN HKEY hkeyDrv);
+
+void
+PUBLIC
+DoDialingProperties(
+ IN HWND hwndOwner,
+ IN BOOL bMiniDlg,
+ IN BOOL bSilentInstall);
+
+DWORD
+PUBLIC
+SetupInfo_Create(
+ OUT LPSETUPINFO FAR * ppsi,
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_INSTALLWIZARD_DATA piwd, OPTIONAL
+ IN PMODEM_INSTALL_WIZARD pmiw); OPTIONAL
+
+DWORD
+PUBLIC
+SetupInfo_Destroy(
+ IN LPSETUPINFO psi);
+
+BOOL
+PUBLIC
+UnattendedInstall(
+ HWND hwnd,
+ LPINSTALLPARAMS lpip);
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+void NotifyTSP_ReEnum(void);
+void NotifyTSP_NewCommConfig(LPCTSTR lpctszFriendlyName);
+#endif // INSTANT_DEVICE_ACTIVATION
+
+#ifdef DEBUG
+
+LPCTSTR PUBLIC Dbg_GetDifName(DI_FUNCTION dif);
+
+// DBG_ENTER_DIF(fn, dif) -- Generates a function entry debug spew for
+// a function that accepts an InstallFunction as
+// one of its parameters.
+//
+#define DBG_ENTER_DIF(fn, dif) \
+ TRACE_MSG(TF_FUNC, " > " #fn "(..., %s,...)", Dbg_GetDifName(dif))
+
+// DBG_EXIT_BOOL_ERR(fn, b) -- Generates a function exit debug spew for
+// functions that return a boolean. It also
+// prints the GetLastError().
+//
+#define DBG_EXIT_BOOL_ERR(fn, b) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %s (%#08lx)", (b) ? (LPTSTR)TEXT("TRUE") : (LPTSTR)TEXT("FALSE"), GetLastError())
+
+// Trace functions when writing registry values
+//
+#define TRACE_DEV_SZ(szName, szValue) TRACE_MSG(TF_REG, "Set dev value %s to %s", (LPTSTR)(szName), (LPTSTR)(szValue))
+
+#define TRACE_DRV_SZ(szName, szValue) TRACE_MSG(TF_REG, "Set drv value %s to %s", (LPTSTR)(szName), (LPTSTR)(szValue))
+#define TRACE_DRV_DWORD(szName, dw) TRACE_MSG(TF_REG, "Set drv value %s to %#08lx", (LPTSTR)(szName), (DWORD)(dw))
+
+#else // DEBUG
+
+#define DBG_ENTER_DIF(fn, dif)
+#define DBG_EXIT_BOOL_ERR(fn, b)
+
+#define TRACE_DEV_SZ(szName, szValue)
+#define TRACE_DRV_SZ(szName, szValue)
+#define TRACE_DRV_DWORD(szName, dw)
+
+#endif // DEBUG
+
+#ifdef WINNT
+
+#define MyYield()
+#define CM_Lock(x)
+#define CM_Unlock(x)
+
+#endif // WINNT
+
+
+//-----------------------------------------------------------------------------------
+// Wrappers to insulate us a little bit if we need it. We need it.
+//-----------------------------------------------------------------------------------
+
+
+// This macro returns the ClassInstallHeader given a ClassInstallParams
+// pointer.
+
+#define PCIPOfPtr(p) ((PSP_CLASSINSTALL_HEADER)(p))
+
+// This macro initializes the ClassInstallHeader of a ClassInstallParams
+// structure.
+
+#define CplInitClassInstallHeader(p, dif) \
+ (PCIPOfPtr(p)->cbSize = sizeof(SP_CLASSINSTALL_HEADER), \
+ PCIPOfPtr(p)->InstallFunction = (dif))
+
+BOOL
+PUBLIC
+CplDiIsLocalConnection(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT LPBYTE pnPortSubclass); OPTIONAL
+
+BOOL
+PUBLIC
+CplDiInstallModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN BOOL bLocalOnly);
+
+BOOL
+PUBLIC
+CplDiRegisterAndInstallModem(
+ IN HDEVINFO hdi,
+ IN HWND hwndOwner, OPTIONAL
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN LPCTSTR pszPort,
+ IN DWORD dwFlags);
+
+BOOL
+APIENTRY
+CplDiInstallModemFromDriver(
+ IN HDEVINFO hdi,
+ IN HWND hwndOwner, OPTIONAL
+ IN OUT LPTSTR FAR * ppszPortList, // Multi-string
+ IN DWORD dwFlags); // IMF_ bit field
+
+// Flags for CplDiInstallModemFromDriver
+#define IMF_DEFAULT 0x00000000
+#define IMF_QUIET_INSTALL 0x00000001
+#define IMF_CONFIRM 0x00000002
+#define IMF_MASS_INSTALL 0x00000004
+#define IMF_REGSAVECOPY 0x00000008
+#define IMF_REGUSECOPY 0x00000010
+
+
+BOOL
+PUBLIC
+CplDiGetModemDevs(
+ OUT HDEVINFO FAR * phdi,
+ IN HWND hwnd,
+ IN DWORD dwFlags, // DIGCF_ bit field
+ OUT BOOL FAR * pbInstalled);
+
+BOOL
+PUBLIC
+CplDiIsModemMarked(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN DWORD dwMarkFlags); // MARKF_*
+
+void
+PUBLIC
+CplDiMarkModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN DWORD dwMarkFlags); // MARKF_*
+
+// Mark flags
+#define MARKF_DETECTED 0x00000001
+#define MARKF_INSTALL 0x00000002
+#define MARKF_MASS_INSTALL 0x00000004
+#define MARKF_REGSAVECOPY 0x00000008
+#define MARKF_REGUSECOPY 0x00000010
+
+
+BOOL
+PUBLIC
+CplDiGetDetectSignature(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT PMODEM_DETECT_SIG pmds);
+
+BOOL
+PUBLIC
+CplDiSetDetectSignature(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PMODEM_DETECT_SIG pmds);
+
+BOOL
+PUBLIC
+CplDiCopyScrubbedHardwareID(
+ OUT LPTSTR pszBuf,
+ IN LPCTSTR pszIDList, // Multi string
+ IN DWORD cbSize);
+
+BOOL
+PUBLIC
+CplDiGetHardwareID(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ OUT LPTSTR pszHardwareIDBuf,
+ IN DWORD cbSize,
+ OUT LPDWORD pcbSizeOut); OPTIONAL
+
+BOOL
+PUBLIC
+CplDiBuildModemDriverList(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData);
+
+BOOL
+PUBLIC
+CplDiCreateCompatibleDeviceInfo(
+ IN HDEVINFO hdi,
+ IN LPCTSTR pszHardwareID,
+ IN LPCTSTR pszDeviceDesc, OPTIONAL
+ OUT LPTSTR pszDeviceDescBuf, OPTIONAL
+ IN DWORD cchBuf, OPTIONAL
+ OUT PSP_DEVINFO_DATA pdevDataOut);
+
+BOOL
+PUBLIC
+CplDiRegisterModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PMODEM_DETECT_SIG pmds, OPTIONAL
+ IN BOOL bFindDups,
+ OUT PDETECTSIG_PARAMS pparams); OPTIONAL
+
+BOOL
+APIENTRY
+CplDiDetectModem(
+ IN HDEVINFO hdi,
+ IN PDETECT_DATA pdetectdata, OPTIONAL
+ IN HWND hwndOwner, OPTIONAL
+ IN OUT LPDWORD pdwFlags); // DMF_ bit field
+
+// Flags for CplDiDetectModem
+#define DMF_DEFAULT 0x00000000
+#define DMF_CANCELLED 0x00000001
+#define DMF_DETECTED_MODEM 0x00000002
+#define DMF_QUIET 0x00000004
+#define DMF_GOTO_NEXT_PAGE 0x00000008
+#define DMF_ONE_PORT_INSTALL 0x00000010
+
+BOOL ReallyNeedsReboot
+(
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DEVINSTALL_PARAMS pdevParams
+);
+
+
+#ifdef UNDER_CONSTRUCTION
+// Must pass in valid pointers. cch is the size, in TCHAR, of the buffer,
+// including space for the final null char.
+void FormatFriendlyNameForDisplay
+(
+ IN TCHAR szFriendly[],
+ OUT TCHAR rgchDisplayName[],
+ IN UINT cch
+);
+#endif UNDER_CONSTRUCTION
+
+
+// Must pass in valid pointers. cch is the size, in TCHAR, of the buffer,
+// including space for the final null char.
+void FormatPortForDisplay
+(
+ IN TCHAR szPort[],
+ OUT TCHAR rgchPortDisplayName[],
+ IN UINT cch
+);
+
+void UnformatAfterDisplay
+(
+ IN OUT TCHAR *psz
+);
+#endif // __MODEM_H__
diff --git a/private/unimodem/cpl/modem.rc b/private/unimodem/cpl/modem.rc
new file mode 100644
index 000000000..08f8c6f9a
--- /dev/null
+++ b/private/unimodem/cpl/modem.rc
@@ -0,0 +1,375 @@
+//{{NO_DEPENDENCIES}}
+//Microsoft App Studio generated resource script.
+//
+
+#include "resource.h"
+#include "modem.rcv"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#include <prsht.h>
+#include <commctrl.h>
+//#ifdef WIN95
+//#include <setupx.h>
+//#else
+#include <setupapi.h>
+//#endif
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_MODEM BITMAP DISCARDABLE "MODEM.BMP"
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+IDI_MODEM ICON DISCARDABLE "..\\RESOURCE\\MODEM.ICO"
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_MODEM DIALOG DISCARDABLE 0, 0, 212, 207
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "General"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ ICON IDI_MODEM,IDC_CLASSICON,7,7,21,20
+ LTEXT "The following modems are set up on this computer:",
+ IDC_STATIC,40,13,168,9
+ CONTROL "",IDC_MODEMLV,WC_LISTVIEW,LVS_REPORT |
+ LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS |
+ LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,36,197,61
+ PUSHBUTTON "&Add...",IDC_ADD,7,102,62,14
+ PUSHBUTTON "&Remove",IDC_REMOVE,74,102,63,14
+ PUSHBUTTON "&Properties",IDC_PROPERTIES,142,102,62,14
+ GROUPBOX "Dialing Preferences",IDC_STATIC,7,125,197,76
+ LTEXT "Dialing from:",IDC_STATIC,20,142,43,9
+ LTEXT "",IDC_LOC,64,142,94,8
+ LTEXT "Use Dialing Properties to modify how your calls are dialed.",
+ IDC_STATIC,20,161,163,16
+ PUSHBUTTON "&Dialing Properties",IDC_DIALPROP,64,178,96,14
+END
+
+IDD_WIZ_INTRO DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "Windows NT will now try to detect your modem. Before continuing, you should:",
+ IDC_STATIC,92,0,174,22
+ LTEXT "1. If the modem is attached to your\n computer, make sure it is turned on.",
+ IDC_STATIC,104,25,164,17
+ LTEXT "2. Quit any programs that may be using the\n modem.",
+ IDC_ST_CLOSEAPPS,104,46,164,18
+ LTEXT "Click Next when you are ready to continue.",IDC_STATIC,
+ 92,71,174,11
+ CONTROL "&Don't detect my modem; I will select it from a list.",
+ IDC_SKIPDETECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,
+ 90,172,10
+END
+
+IDD_WIZ_SELQUERYPORT DIALOG DISCARDABLE 0, 0, 276, 140
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL 101,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,80,140
+ LTEXT "",IDC_NAME,92,0,174,26
+ LTEXT "You may then choose to install the detected modem on multiple ports.",
+ IDC_STATIC,92,28,174,18
+ LTEXT "On which port do you want to run detection?",IDC_STATIC,
+ 92,62,174,10
+ LISTBOX IDC_PORTS,92,75,163,64,LBS_SORT | WS_VSCROLL |
+ WS_TABSTOP
+END
+
+IDD_WIZ_PORTDETECT DIALOG DISCARDABLE 0, 0, 276, 140
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL 101,-1,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,0,
+ 0,80,140
+ LTEXT "On which ports do you want to install this modem?",
+ -1,92,0,174,17
+ CONTROL "&All ports",IDC_ALL,"Button",BS_AUTORADIOBUTTON,101,22,
+ 59,10
+ CONTROL "&Selected ports",IDC_SELECTED,"Button",
+ BS_AUTORADIOBUTTON,101,35,61,10
+ LISTBOX IDC_PORTS,92,52,163,76,LBS_SORT | LBS_MULTIPLESEL |
+ WS_VSCROLL | WS_GROUP | WS_TABSTOP
+END
+
+IDD_WIZ_DETECT DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "Please wait while Windows NT attempts to detect your modem. This may take several minutes.",
+ IDC_STATIC,92,0,170,19
+ LTEXT "Checking:",IDC_ST_CHECKING_PORT,92,28,36,9
+ LTEXT "",IDC_CHECKING_PORT,132,27,118,12,NOT WS_GROUP |
+ SS_SUNKEN | SS_CENTERIMAGE
+ LTEXT "Status:",IDC_STATIC,92,54,36,9
+ LTEXT "",IDC_DETECT_STATUS,132,52,118,12,NOT WS_GROUP |
+ SS_SUNKEN | SS_CENTERIMAGE
+ LTEXT "Click Next when you are ready to continue.",IDC_ST_NEXT,
+ 92,75,169,11,NOT WS_VISIBLE
+END
+
+IDD_WIZ_FOUND DIALOG DISCARDABLE 0, 0, 276, 140
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE | SS_SUNKEN,0,
+ 0,80,140
+ LTEXT "",IDC_ST_PORT,92,7,178,19
+ EDITTEXT IDC_NAME,92,38,179,14,ES_AUTOHSCROLL | ES_READONLY
+ LTEXT "If this modem type is not correct, click Change to select a different type from a list.",
+ IDC_ST_INSTRUCT,92,62,178,20
+ PUSHBUTTON "&Change...",IDC_CHANGE,217,87,54,14
+END
+
+IDD_WIZ_NOMODEM DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "Windows NT did not find any new modems attached to your computer.",
+ IDC_STATIC,92,0,175,19
+ LTEXT "To select your modem from a list, click Next.",
+ IDC_STATIC,92,25,174,11
+END
+
+IDD_WIZ_NOP DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+END
+
+IDD_WIZ_PORTMANUAL DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "You have selected the following modem:",IDC_STATIC,92,0,
+ 166,8
+ EDITTEXT IDC_NAME,92,10,163,14,ES_AUTOHSCROLL | ES_READONLY | NOT
+ WS_TABSTOP
+ LTEXT "On which ports do you want to install it?",IDC_STATIC,
+ 92,35,160,9
+ CONTROL "&All ports",IDC_ALL,"Button",BS_AUTORADIOBUTTON,101,47,
+ 59,10
+ CONTROL "&Selected ports",IDC_SELECTED,"Button",
+ BS_AUTORADIOBUTTON,101,60,61,10
+ LISTBOX IDC_PORTS,92,77,163,62,LBS_SORT | LBS_MULTIPLESEL |
+ WS_VSCROLL | WS_GROUP | WS_TABSTOP
+END
+
+IDD_WIZ_INSTALL DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "Please wait while Windows NT installs your modem.",
+ IDC_ST_INSTALLING,92,0,175,19
+END
+
+IDD_WIZ_DONE DIALOG DISCARDABLE 0, 0, WIZ_CXDLG, WIZ_CYDLG
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Install New Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL IDB_MODEM,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE |
+ SS_SUNKEN,0,0,WIZ_CXBMP,WIZ_CYDLG
+ LTEXT "Your modem has been set up successfully.",
+ IDC_STATIC,92,0,176,22
+ LTEXT "If you want to change these settings, double-click the Modems icon in Control Panel, select this modem, and click Properties.",
+ IDC_STATIC,92,25,165,32
+END
+
+IDD_CLONE DIALOG DISCARDABLE 0, 0, 187, 149
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Duplicate Modem"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "",IDC_NAME,9,8,174,17
+ LTEXT "On which ports do you want to duplicate this modem?",-1,
+ 9,29,174,10
+ CONTROL "&All ports",IDC_ALL,"Button",BS_AUTORADIOBUTTON,18,41,
+ 61,10
+ CONTROL "&Selected ports",IDC_SELECTED,"Button",
+ BS_AUTORADIOBUTTON,18,54,61,10
+ LISTBOX IDC_PORTS,9,69,168,53,LBS_SORT | LBS_MULTIPLESEL |
+ WS_VSCROLL | WS_GROUP | WS_TABSTOP
+ DEFPUSHBUTTON "OK",IDOK,71,128,50,14,WS_GROUP
+ PUSHBUTTON "Cancel",IDCANCEL,127,128,50,14
+END
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_CPLNAME "Modems"
+ IDS_CPLINFO "Installs a new modem and changes modem properties."
+ IDS_CPLDIAGNAME "Test"
+
+ IDS_MODEM "Modem"
+ IDS_PORT "Attached To"
+
+ // Window captions
+ IDS_CAP_MODEMSETUP "Modem Setup"
+ IDS_CAP_MODEMWIZARD "Install New Modem"
+ IDS_CAP_MODEM "Properties for Modems"
+ IDS_CAP_RASCONFIG "Network Settings Change"
+
+ // Detection status strings
+ IDS_DETECT_CHECKFORMODEM "Looking for a modem..."
+ IDS_DETECT_FOUNDAMODEM "Found a modem."
+ IDS_DETECT_NOMODEM "No modem found."
+ IDS_DETECT_QUERYING "Querying modem..."
+ IDS_DETECT_MATCHING "Checking modem..."
+ IDS_DETECT_COMPLETE "Detection complete."
+
+ IDS_GENERIC_DESC "Standard Modem"
+
+ IDS_SELECTTODUP "You have selected to duplicate '%1'."
+ IDS_LOTSAPORTS "Windows NT has detected that your system has %1!d! ports. Rather than checking each port, Windows NT will check only one port for a modem."
+
+ // Format string used to make unique friendly names
+ IDS_DUP_TEMPLATE "%s #%u"
+ IDS_PARALLEL_TEMPLATE "Parallel cable on %s"
+ IDS_SERIAL_TEMPLATE "Serial cable on %s"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ // These are message displayed in the wizards.
+ IDS_ST_MODEMFOUND "The following modem was found on %1:"
+ IDS_ST_NOTDETECTED "Windows NT was unable to detect your modem. As an alternative, the following standard modem was set up on %1:"
+ IDS_ST_MODEMCHANGED "You have selected the following modem on %1:"
+ IDS_ST_FOUND_INSTRUCT "If this modem type is not correct, click Change to select a different type from a list."
+ IDS_ST_GENERIC_INSTRUCT "If you know the manufacturer and model of your modem, click Change to select it from a list."
+ IDS_ST_SELECT_INSTRUCT "Click the manufacturer and model of your modem. If your modem is not listed, or if you have an installation disk, click Have Disk."
+ IDS_ST_MODELS "Mode&ls"
+ IDS_CPLDIAGINFO "Display Information and Test Modem Setup"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_ERR_CANT_OPEN_INF_FILE "Windows NT failed to open the unattended install file '%1'."
+ IDS_ERR_DETECTION_FAILED "Windows NT failed to detect your modem(s)."
+ IDS_ERR_TOO_MANY_PORTS "Windows NT has detected that your system has %1!d! ports.\n\nYou must restrict detection to a single port or specify modems in the Setup Information File."
+ IDS_ERR_CANT_ADD_MODEM "Windows NT was unable to add the modem '%1' to %2."
+ IDS_ERR_CANT_FIND_MODEM "Windows NT was unable to add the modem to %1.\n\n'%2' is not a valid modem description. Correct this problem in your Setup Information File."
+ IDS_ERR_CANT_COPY_FILES "Windows NT was unable to add the modem '%1' to %2 because some files for the modem could not be copied."
+ IDS_ERR_CANT_ADD_MODEM2 "Windows NT was unable to add the modem."
+ IDS_ERR_CANT_DEL_MODEM "Windows NT was unable to remove the modem '%1' from %2."
+ IDS_ERR_NO_INF "Windows NT detected a modem but was unable to add it because the Setup Information file is corrupt or cannot be found."
+ IDS_ERR_PROPERTIES "The modem properties cannot be displayed because the modem is not available.\n\nRestart the system and try again."
+ IDS_ERR_REGISTER_FAILED "Windows NT was unable to register the modem '%1' on %2."
+ IDS_ERR_DET_REGISTER_FAILED "Windows NT detected the modem '%1' on %2 but was unable to register it."
+ IDS_ERR_NOT_ADMIN "You must be a System Administrator to install a modem."
+ IDS_ERR_NOMODEM_NOT_ADMIN "No modems are installed. You must be a System Administrator to install a modem."
+ IDS_OOM_CLONE "There is not enough memory to duplicate this modem.\n\nClose some programs and try again."
+ IDS_OOM_OPENCPL "There is not enough memory to open the modem control panel.\n\nClose some programs and try again."
+ IDS_WRN_REBOOT "You will need to restart the system before you can use the modem '%1'."
+ IDS_WRN_REBOOT2 "You will need to restart the system before you can use this modem on the ports on which it was installed."
+ IDS_WRN_DUPLICATE_MODEM "There is already a modem like '%1' on %2.\n\nDo you still want to install this modem?"
+ IDS_WRN_CONFIRMDELETE "Are you sure you want to remove the modem '%1' from your system?"
+ IDS_WRN_SKIPPED_PORTS "Windows NT skipped installing this modem on the ports that already have modems installed."
+
+ IDS_NT_BETA_1 "Note: In this beta version of Microsoft Windows NT, you may need to reboot before any modems you installed become available. Also for this beta, if you are trying to configure modems for use by RAS, use the Network option in Control Panel."
+ IDS_NT_CONFIG_RAS "Dial-up Networking needs to be configured because the list of installed modems has changed.\nWould you like to do this now?"
+ IDS_ASK_REBOOTNOW "You must shut down and restart your computer before the new settings will take effect.\n\nDo you want to restart your computer now?"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_ERR_UNATTEND_INF_NOPORT "Unattended install failure: No port specified.\n\nPlease verify your Setup Information File."
+ IDS_ERR_UNATTEND_INF_NOSUCHPORT "Unattended install failure: Specified port does not exist.\n\nPlease verify your Setup Information File."
+ IDS_ERR_UNATTEND_INF_NODESCRIPTION "Unattended install failure: Could not read modem name from the Setup Information File."
+ IDS_ERR_UNATTEND_DRIVERLIST "Unattended install failure: Could not build a list of drivers.\n\nPlease verify your Setup Information File."
+ IDS_ERR_UNATTEND_CANT_INSTALL "Unattended install failure: A modem was found but could not be installed."
+ IDS_ERR_UNATTEND_NOPORTS "Unattended install failure: No ports were detected on your system."
+ IDS_ERR_UNATTEND_GENERAL_FAILURE "Unattended installation of modems has failed.\n\nPlease verify your Setup Information File."
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_DET_LOG_NAME "ModemDet.txt"
+ IDS_DET_INUSE "%s was in use by another program.\r\n"
+ IDS_DET_COULDNT_OPEN "%s couldn't be opened.\r\n"
+ IDS_DET_FOUND "A modem was found on %s:\r\n"
+ IDS_DET_NOT_FOUND "A modem was not found on %s.\r\n"
+ IDS_DET_ID "Modem ID = %s.\r\n"
+ IDS_DET_OK_1 "%s " // ex. "ATI0<cr> "
+ IDS_DET_OK_2 "= %s\r\n" // "= <cr><lf>14400<cr><lf>\r\n"
+ IDS_DET_DTE "Maximum DTE = %ld bps\r\n"
+ IDS_INSTALL_STATUS "Installing modem on %s..."
+END
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+
+POPUP_CONTEXT MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "&Duplicate...", MIDM_CLONE
+ MENUITEM "R&emove", MIDM_REMOVE
+ MENUITEM SEPARATOR
+ MENUITEM "P&roperties", MIDM_PROPERTIES
+ END
+END
+
+#ifndef APSTUDIO_INVOKED
+////////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/private/unimodem/cpl/modem.rcv b/private/unimodem/cpl/modem.rcv
new file mode 100644
index 000000000..b78bc4e50
--- /dev/null
+++ b/private/unimodem/cpl/modem.rcv
@@ -0,0 +1,22 @@
+/********************************************************************/
+/* MODEM.RCV */
+/* Version control data generated from layouts.dat */
+/********************************************************************/
+#ifdef WINNT
+#include <winver.h>
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Modem Control Panel"
+#define VER_INTERNALNAME_STR "MODEM.CPL"
+#define VER_LEGALCOPYRIGHT_YEARS "1992-1995"
+#define VER_ORIGINALFILENAME_STR "MODEM.CPL"
+
+
+
+#include <common.ver>
diff --git a/private/unimodem/cpl/proj.h b/private/unimodem/cpl/proj.h
new file mode 100644
index 000000000..dc7e28f2e
--- /dev/null
+++ b/private/unimodem/cpl/proj.h
@@ -0,0 +1,95 @@
+//
+// proj.h: Includes all files that are to be part of the precompiled
+// header.
+//
+
+#ifndef __PROJ_H__
+#define __PROJ_H__
+
+#define STRICT
+
+//
+// Private defines
+//
+
+#define TAPI_WORKS // TAPI dialing properties works
+//#define SKIP_MOUSE_PORT // Win95 only: skip COM port that mouse is attached to
+#define INSTANT_DEVICE_ACTIVATION // Devices can be installed w/o a reboot
+//#define FULL_PNP // Win95 or after SUR: full PnP is supported in system
+//#define PROFILE_MASSINSTALL // Profile the mass modem install case
+
+
+
+#if DBG > 0 && !defined(DEBUG)
+#define DEBUG
+#endif
+#if DBG > 0 && !defined(FULL_DEBUG)
+#define FULL_DEBUG
+#endif
+
+#define UNICODE
+
+// Defines for rovcomm.h
+
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NOPATH
+#define NOSYNC
+#ifndef DEBUG
+#define NOPROFILE
+#endif
+
+#define SZ_MODULEA "MODEM"
+#define SZ_MODULEW TEXT("MODEM")
+
+#ifdef DEBUG
+#define SZ_DEBUGSECTION TEXT("MODEM")
+#define SZ_DEBUGINI TEXT("unimdm.ini")
+#endif // DEBUG
+
+// Includes
+
+#include <windows.h>
+#include <windowsx.h>
+
+#include <winerror.h>
+#include <commctrl.h> // needed by shlobj.h and our progress bar
+#include <prsht.h> // Property sheet stuff
+#include <rovcomm.h>
+#ifdef WIN95
+#include <setupx.h> // PnP setup/installer services
+#else
+#include <setupapi.h> // PnP setup/installer services
+#include <cfgmgr32.h>
+#endif
+#include <tapi.h>
+#include <unimdmp.h>
+#include <modemp.h>
+#include <regstr.h>
+
+// local includes
+//
+#include "dll.h"
+#include "detect.h"
+#include "modem.h"
+#include "resource.h"
+
+//****************************************************************************
+//
+//****************************************************************************
+
+// Dump flags
+#define DF_DCB 0x00000001
+#define DF_MODEMSETTINGS 0x00000002
+#define DF_DEVCAPS 0x00000004
+
+// Trace flags
+#define TF_DETECT 0x00010000
+#define TF_REG 0x00020000
+
+
+#endif //!__PROJ_H__
+
diff --git a/private/unimodem/cpl/resource.h b/private/unimodem/cpl/resource.h
new file mode 100644
index 000000000..12fbbb688
--- /dev/null
+++ b/private/unimodem/cpl/resource.h
@@ -0,0 +1,186 @@
+//{{NO_DEPENDENCIES}}
+// App Studio generated include file.
+// Used by TEMPLATE.RC
+//
+#define IDB_MODEM 101
+#define IDB_DIALINFO 102
+#define IDB_REGISTER 103
+#define IDC_PROPERTIES 109
+#define IDC_ADD 110
+#define IDC_REMOVE 112
+#define IDC_MODEMLV 113
+#define IDC_DETECT_STATUS 1000
+#define IDC_SKIPDETECT 1001
+#define IDC_CHECKING_PORT 1001
+#define IDC_ST_NEXT 1002
+#define IDC_ST_PORT 1003
+#define IDC_CHANGE 1004
+#define IDC_NAME 1005
+#define IDC_PORTS 1006
+#define IDC_COUNTRY 1007
+#define IDC_AREACODE 1008
+#define IDC_PREFIX 1009
+#define IDC_ST_INSTRUCT 1010
+#define IDC_ST_CLOSEAPPS 1012
+#define IDC_ST_CHECKING_PORT 1016
+#define IDC_PULSE 1022
+#define IDC_TONE 1023
+#define IDC_DISPINFOLV 1023
+#define IDC_DIAGHELP 1024
+#define IDC_MOREINFO 1025
+#define IDC_COMM_DRIVER 1026
+#define IDC_ST_DIAG_PORT 1027
+#define IDC_ST_DIAG_INT 1028
+#define IDC_ST_DIAG_ADDRESS 1029
+#define IDC_ST_DIAG_UART 1030
+#define IDC_ST_DIAG_RHS 1031
+#define IDC_DIAG_PORT 1032
+#define IDC_DIAG_INT 1033
+#define IDC_DIAG_ADDRESS 1034
+#define IDC_DIAG_UART 1035
+#define IDC_DIAG_RHS 1036
+#define IDC_ST_DIAG_ID 1037
+#define IDC_ST_DIAG_CLASS 1038
+#define IDC_DIAG_ID 1039
+#define IDC_DIAG_CLASS 1040
+#define IDC_MOREINFOLV 1041
+#define IDC_DIAG_DETECT 1042
+#define IDC_DIAG_CLASS2 1042
+#define IDC_DIAG_CLASS3 1043
+#define IDC_DIAG_DATE_TIME 1044
+#define IDC_DIAG_SIZE 1045
+#define IDC_ST_MODEM_GRP 1047
+#define IDC_MODEM_COMM 1048
+#define IDC_RB_YES 1048
+#define IDC_RB_PCMCIA 1048
+#define IDC_BACK 1048
+#define IDC_LOC_LIST 1049
+#define IDC_RB_NO 1049
+#define IDC_RB_OTHER 1049
+#define IDC_DIALPROP 1050
+#define IDC_LOC 1051
+#define IDC_CLASSICON 1057
+#define IDC_ALL 1058
+#define IDC_SELECTED 1059
+#define IDC_ST_INSTALLING 1060
+
+#define IDS_PORT 2006
+
+#define IDS_CAP_MODEMSETUP 3000
+#define IDS_ERR_UNATTENDED_FAILED 3008
+#define IDS_ERR_CANT_OPEN_INF_FILE 3009
+#define IDS_ERR_DETECTION_FAILED 3010
+#define IDS_ERR_TOO_MANY_PORTS 3011
+#define IDS_ERR_CANT_ADD_MODEM 3012
+#define IDS_ERR_CANT_FIND_MODEM 3013
+#define IDS_CPLNAME 3018
+#define IDS_CPLINFO 3019
+#define IDS_DETECT_CHECKFORMODEM 3021
+#define IDS_DETECT_FOUNDAMODEM 3022
+#define IDS_DETECT_NOMODEM 3023
+#define IDS_DETECT_QUERYING 3024
+#define IDS_CPLDIAGNAME 3025
+#define IDS_ST_MODEMFOUND 3026
+#define IDS_ST_NOTDETECTED 3027
+#define IDS_ST_FOUND_INSTRUCT 3028
+#define IDS_ST_GENERIC_INSTRUCT 3029
+#define IDS_CPLDIAGINFO 3030
+#define IDS_DETECT_COMPLETE 3031
+#define IDS_ST_MODEMCHANGED 3032
+#define IDS_DUP_TEMPLATE 3033
+#define IDS_PARALLEL_TEMPLATE 3036
+#define IDS_SERIAL_TEMPLATE 3037
+#define IDS_DET_LOG_NAME 3038
+#define IDS_DET_INUSE 3039
+#define IDS_DET_COULDNT_OPEN 3040
+#define IDS_DET_FOUND 3041
+#define IDS_DET_NOT_FOUND 3042
+#define IDS_DET_ID 3043
+#define IDS_DET_OK_1 3044
+#define IDS_DET_OK_2 3045
+#define IDS_CAP_MODEMWIZARD 3046
+#define IDS_ST_SELECT_INSTRUCT 3047
+#define IDS_ST_MODELS 3048
+#define IDS_DET_DTE 3049
+#define IDS_ERR_NO_INF 3051
+#define IDS_GENERIC_DESC 3052
+#define IDS_ERR_PROPERTIES 3053
+#define IDS_CAP_MODEM 3054
+#define IDS_WRN_REBOOT 3055
+#define IDS_WRN_DUPLICATE_MODEM 3056
+#define IDS_ERR_REGISTER_FAILED 3057
+#define IDS_ERR_DET_REGISTER_FAILED 3058
+#define IDS_DETECT_MATCHING 3059
+#define IDS_WRN_CONFIRMDELETE 3060
+#define IDS_ERR_CANT_DEL_MODEM 3061
+#define IDS_MODEM 3062
+#define IDS_OOM_CLONE 3063
+#define IDS_ERR_CANT_CLONE_MODEM 3064
+#define IDS_SELECTTODUP 3065
+#define IDS_WRN_SKIPPED_PORTS 3066
+#define IDS_LOTSAPORTS 3067
+#define IDS_ERR_CANT_ADD_MODEM2 3068
+#define IDS_OOM_OPENCPL 3069
+#define IDS_WRN_REBOOT2 3070
+#define IDS_ERR_CANT_COPY_FILES 3071
+#define IDS_NT_BETA_1 3072
+#define IDS_ERR_NOT_ADMIN 3073
+#define IDS_ERR_NOMODEM_NOT_ADMIN 3074
+#define IDS_NT_CONFIG_RAS 3075
+#define IDS_ASK_REBOOTNOW 3076
+#define IDS_CAP_RASCONFIG 3077
+#define IDS_INSTALL_STATUS 3078
+
+
+#define IDS_ERR_UNATTEND_CANT_INSTALL 3100
+#define IDS_ERR_UNATTEND_GENERAL_FAILURE 3101
+#define IDS_ERR_UNATTEND_INF_NODESCRIPTION 3102
+#define IDS_ERR_UNATTEND_INF_NOPORT 3103
+#define IDS_ERR_UNATTEND_INF_NOSUCHPORT 3104
+#define IDS_ERR_UNATTEND_DRIVERLIST 3105
+#define IDS_ERR_UNATTEND_NOPORTS 3106
+
+// context sensitive help ids (as assigned in windows.hlp)
+#define IDH_MODEM_INSTALLED 5000
+#define IDH_MODEM_ADD 5001
+#define IDH_MODEM_REMOVE 5002
+#define IDH_MODEM_PROPERTIES 5003
+#define IDH_MODEM_DIALING_PROPERTIES 5004
+
+#define IDI_MODEM 5100
+
+// IDs 10000 thru 10012 are reserved by the SETUPAPI.
+
+#define IDD_WIZ_INTRO IDD_DYNAWIZ_FIRSTPAGE
+#define IDD_WIZ_SELQUERYPORT 20001
+#define IDD_WIZ_PORTDETECT 20002
+#define IDD_WIZ_NOP IDD_DYNAWIZ_SELECT_PREVPAGE
+#define IDD_WIZ_PORTMANUAL IDD_DYNAWIZ_SELECT_NEXTPAGE
+#define IDD_WIZ_DETECT 20005
+#define IDD_WIZ_NOMODEM 20006
+#define IDD_WIZ_FOUND 20007
+#define IDD_WIZ_INSTALL 20008
+#define IDD_WIZ_DONE 20009
+#define IDD_CLONE 20010
+#define IDD_MODEM 20011
+
+#define IDC_STATIC -1
+
+#define POPUP_CONTEXT 100
+
+#define MIDM_FIRST 0x0000
+#define MIDM_CLONE (MIDM_FIRST + 0x0000)
+#define MIDM_REMOVE (MIDM_FIRST + 0x0001)
+#define MIDM_PROPERTIES (MIDM_FIRST + 0x0002)
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 113
+#define _APS_NEXT_COMMAND_VALUE 101
+#define _APS_NEXT_CONTROL_VALUE 1052
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/private/unimodem/cpl/sources b/private/unimodem/cpl/sources
new file mode 100644
index 000000000..d531a7698
--- /dev/null
+++ b/private/unimodem/cpl/sources
@@ -0,0 +1,77 @@
+!IF 0
+
+Copyright (c) 1994 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+
+Author:
+
+ Steve Cathcart (stevecat) 15-Nov-1994
+
+NOTE: Commented description of this file is in \nt\bak\bin\sources.tpl
+
+Use the following line when this is UNICODE ported
+
+NOT_UNICODE=1
+
+
+ $(BASEDIR)\public\sdk\lib\*\mpr.lib \
+
+!ENDIF
+
+MAJORCOMP=unimodem
+MINORCOMP=cpl
+
+TARGETNAME=modem
+TARGETPATH=..\lib
+TARGETTYPE=DYNLINK
+TARGETEXT=cpl
+TARGETLIBS=$(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib \
+ $(BASEDIR)\public\sdk\lib\*\comctl32.lib \
+ $(BASEDIR)\public\sdk\lib\*\shell32.lib \
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\libc.lib \
+ $(BASEDIR)\public\sdk\lib\*\uuid.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\setupapi.lib \
+ $(BASEDIR)\public\sdk\lib\*\cfgmgr32.lib \
+ $(BASEDIR)\public\sdk\lib\*\tapi32.lib \
+ ..\lib\*\rovcomm.lib
+
+DLLENTRY= LibMain
+
+NOT_LEAN_AND_MEAN=1
+
+INCLUDES=.;..\inc;..\..\inc;$(BASEDIR)\private\windows\inc
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+UMTYPE=windows
+EXPECTED_WINVER=4.0
+
+SOURCES= modem.rc \
+ dll.c \
+ cpl.c \
+ ci.c \
+ ui.c \
+ detect.c \
+ util.c
+
+PRECOMPILED_INCLUDE=proj.h
+PRECOMPILED_PCH=proj.pch
+PRECOMPILED_OBJ=proj.obj
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/cpl/ui.c b/private/unimodem/cpl/ui.c
new file mode 100644
index 000000000..f2660968b
--- /dev/null
+++ b/private/unimodem/cpl/ui.c
@@ -0,0 +1,1898 @@
+/*
+ * UI.C -- Contains all UI code for modem setup.
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1994
+ * All rights reserved
+ *
+ */
+
+#include "proj.h"
+
+// Instance data structure for the Port_Add callback
+typedef struct tagPORTINFO
+ {
+ HWND hwndLB;
+ DWORD dwFlags; // FP_*
+ TCHAR szPortExclude[MAX_BUF_REG];
+ } PORTINFO, FAR * LPPORTINFO;
+
+// Flags for PORTINFO
+#define FP_PARALLEL 0x00000001
+#define FP_SERIAL 0x00000002
+#define FP_MODEM 0x00000004
+
+#define Wiz_SetPtr(hDlg, lParam) SetWindowLong(hDlg, DWL_USER, ((LPPROPSHEETPAGE)lParam)->lParam)
+#define SetDlgFocus(hDlg, idc) SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hDlg, idc), 1L)
+
+
+#define WM_STARTDETECT (WM_USER + 0x0700)
+#define WM_STARTINSTALL (WM_USER + 0x0701)
+#define WM_PRESSFINISH (WM_USER + 0x0702)
+
+
+#ifdef PROFILE_MASSINSTALL
+extern DWORD g_dwTimeBegin;
+DWORD g_dwTimeAtStartInstall;
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: This function retrieves the wizard page shared
+ instance data. This is a SETUPINFO structure.
+
+Returns:
+Cond: --
+*/
+LPSETUPINFO
+PRIVATE
+Wiz_GetPtr(
+ HWND hDlg)
+ {
+ LPSETUPINFO psi = (LPSETUPINFO)GetWindowLong(hDlg, DWL_USER);
+
+ return psi;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function does the right things to leave the
+ wizard when something goes wrong.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Wiz_Bail(
+ IN HWND hDlg,
+ IN LPSETUPINFO psi)
+ {
+ ASSERT(psi);
+
+ LeaveInsideWizard(hDlg);
+
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_CANCEL);
+
+ // Don't say the user cancelled. If this wizard is inside another,
+ // we want the calling wizard to continue.
+ psi->miw.ExitButton = PSBTN_NEXT;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sets the custom modem select param strings
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Wiz_SetSelectParams(
+ LPSETUPINFO psi)
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+
+ // Get the DeviceInstallParams
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(psi->hdi, psi->pdevData, &devParams))
+ {
+ PSP_CLASSINSTALL_HEADER pclassInstallParams = PCIPOfPtr(&psi->selParams);
+
+ // The SelectParams are already set and stored in the
+ // SETUPINFO instance data.
+ SetFlag(devParams.Flags, DI_USECI_SELECTSTRINGS | DI_SHOWOEM);
+
+ // Specify using our GUID to make things a little faster.
+ SetFlag(devParams.FlagsEx, DI_FLAGSEX_USECLASSFORCOMPAT);
+
+ // Set the Select Device parameters
+ CplDiSetDeviceInstallParams(psi->hdi, psi->pdevData, &devParams);
+ CplDiSetClassInstallParams(psi->hdi, psi->pdevData, pclassInstallParams,
+ sizeof(psi->selParams));
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the TAPI dial info page should be shown
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PRIVATE
+Wiz_InitDialInfo(
+ IN LPSETUPINFO psi)
+ {
+ BOOL bRet = FALSE;
+
+ ASSERT(psi);
+
+ try
+ {
+ if (psi->pfnDialInited)
+ {
+ // Did the function succeed?
+ DWORD dwInited;
+ if (0 == psi->pfnDialInited(&dwInited))
+ {
+ // Yes
+ bRet = (0 == dwInited);
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ ASSERT(0); // Uh oh
+ bRet = FALSE;
+ psi->pfnDialInited = NULL;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Select previous page junction dialog
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+SelPrevPageDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ // This dialog has no UI. It is simply used as a junction
+ // to the intro page or the "no modem found" page.
+ SetDlgMsgResult(hDlg, message,
+ IsFlagSet(psi->dwFlags, SIF_JUMPED_TO_SELECTPAGE) ?
+ IDD_WIZ_INTRO :
+ IDD_WIZ_NOMODEM);
+ return TRUE;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ case PSN_WIZBACK:
+ case PSN_WIZNEXT:
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Intro dialog
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+IntroDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ psi = Wiz_GetPtr(hDlg);
+
+ // Restore the cursor from startup hourglass
+ SetCursor(LoadCursor(NULL, IDC_ARROW));
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE: {
+ DWORD dwFlags = PSWIZB_NEXT;
+
+ // Is this wizard inside another wizard?
+ if (IsFlagSet(psi->miw.Flags, MIWF_INSET_WIZARD))
+ {
+ // Yes; hide the outside wizard
+ EnterInsideWizard(hDlg);
+
+ // Show the Back button on the first page
+ SetFlag(dwFlags, PSWIZB_BACK);
+ }
+
+ PropSheet_SetWizButtons(GetParent(hDlg), dwFlags);
+
+ // Is this wizard being entered thru the last page?
+ if (IsFlagSet(psi->miw.Flags, MIWF_BACKDOOR))
+ {
+ // Yes; skip to the last page
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT);
+ }
+ }
+ break;
+
+ case PSN_KILLACTIVE:
+ break;
+
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+ if (IsFlagSet(psi->miw.Flags, MIWF_INSET_WIZARD))
+ {
+ PostMessage(hDlg, WM_PRESSFINISH, 0, 0);
+ }
+ break;
+
+ case PSN_WIZNEXT: {
+ ULONG uNextDlg;
+
+ // Go to the last page?
+ if (IsFlagSet(psi->miw.Flags, MIWF_BACKDOOR))
+ {
+ // Yes
+ uNextDlg = IDD_WIZ_DONE;
+ }
+
+ // Skip the rest of the detection dialogs?
+ else if (IsDlgButtonChecked(hDlg, IDC_SKIPDETECT))
+ {
+ // Yes; go to Select Device page
+ SetFlag(psi->dwFlags, SIF_JUMPED_TO_SELECTPAGE);
+
+ Wiz_SetSelectParams(psi);
+
+ uNextDlg = IDD_DYNAWIZ_SELECTDEV_PAGE;
+ }
+ else
+ {
+ // No; go to detection page
+ ClearFlag(psi->dwFlags, SIF_JUMPED_TO_SELECTPAGE);
+
+ // Are there enough ports on the system to indicate
+ // we should treat this like a multi-modem install?
+ if (IsFlagSet(psi->dwFlags, SIF_PORTS_GALORE))
+ {
+ // Yes
+ uNextDlg = IDD_WIZ_SELQUERYPORT;
+ }
+ else
+ {
+ // No
+ uNextDlg = IDD_WIZ_DETECT;
+ }
+ }
+
+ SetDlgMsgResult(hDlg, message, uNextDlg);
+ break;
+ }
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_PRESSFINISH:
+ ASSERT(IsFlagSet(psi->miw.Flags, MIWF_INSET_WIZARD));
+
+ psi->miw.ExitButton = PSBTN_BACK;
+
+ LeaveInsideWizard(hDlg);
+
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_FINISH);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Status callback used during detection
+
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+Detect_StatusCallback(
+ IN DWORD nMsg,
+ IN LPARAM lParam,
+ IN LPARAM lParamUser) OPTIONAL
+ {
+ HWND hDlg = (HWND)lParamUser;
+ LPSETUPINFO psi;
+ TCHAR sz[MAX_BUF];
+
+#pragma data_seg(DATASEG_READONLY)
+ static UINT s_mpstatus[] =
+ {
+ 0, IDS_DETECT_CHECKFORMODEM, IDS_DETECT_QUERYING, IDS_DETECT_MATCHING,
+ IDS_DETECT_FOUNDAMODEM, IDS_DETECT_NOMODEM, IDS_DETECT_COMPLETE,
+ };
+#pragma data_seg()
+
+ switch (nMsg)
+ {
+ case DSPM_SETPORT:
+ psi = Wiz_GetPtr(hDlg);
+
+ if (psi && sizeof(*psi) == psi->cbSize)
+ {
+ LPTSTR pszName = (LPTSTR)lParam;
+
+ // Is there a friendly name?
+ if ( !PortMap_GetFriendly(psi->hportmap, pszName, sz, SIZECHARS(sz)) )
+ {
+ // No; use port name
+ lstrcpy(sz, pszName);
+ }
+
+ SetDlgItemText(hDlg, IDC_CHECKING_PORT, sz);
+ }
+ break;
+
+ case DSPM_SETSTATUS:
+ if (ARRAYSIZE(s_mpstatus) > lParam)
+ {
+ TCHAR szbuf[128];
+ UINT ids = s_mpstatus[lParam];
+
+ if (0 < ids)
+ LoadString(g_hinst, ids, szbuf, SIZECHARS(szbuf));
+ else
+ *szbuf = (TCHAR)0;
+ SetDlgItemText(hDlg, IDC_DETECT_STATUS, szbuf);
+ }
+ break;
+
+ case DSPM_QUERYCANCEL:
+ psi = Wiz_GetPtr(hDlg);
+
+ MyYield();
+
+ if (psi && sizeof(*psi) == psi->cbSize)
+ {
+ return IsFlagSet(psi->dwFlags, SIF_DETECT_CANCEL);
+ }
+ return FALSE;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_STARTDETECT handler
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Detect_OnStartDetect(
+ HWND hDlg,
+ LPSETUPINFO psi)
+ {
+ HDEVINFO hdi;
+ DWORD dwFlags;
+ DETECT_DATA dd;
+
+ // Cause the page to be painted right away before we start detection
+ InvalidateRect(hDlg, NULL, FALSE);
+ UpdateWindow(hDlg);
+
+ // Assume no modem was detected
+ ClearFlag(psi->dwFlags, SIF_DETECTED_MODEM);
+
+ // Set the detection parameters
+ ZeroInit(&dd);
+ CplInitClassInstallHeader(&dd, DIF_DETECT);
+ dd.dwFlags = DDF_CONFIRM | DDF_USECALLBACK;
+ dd.hwndOutsideWizard = GetParent(hDlg);
+ dd.pfnCallback = Detect_StatusCallback;
+ dd.lParam = (LPARAM)hDlg;
+
+ if (IsFlagSet(psi->dwFlags, SIF_PORTS_GALORE))
+ {
+ dd.dwFlags |= DDF_QUERY_SINGLE;
+ lstrcpy(dd.szPortQuery, psi->szPortQuery);
+ }
+
+ // Run detection
+ SetFlag(psi->dwFlags, SIF_DETECTING);
+
+ dwFlags = DMF_DEFAULT;
+ CplDiDetectModem(psi->hdi, &dd, hDlg, &dwFlags);
+
+ ClearFlag(psi->dwFlags, SIF_DETECTING);
+
+ if (IsFlagClear(dwFlags, DMF_CANCELLED))
+ {
+ // Say detection is finished and enable next/back buttons
+ ShowWindow(GetDlgItem(hDlg, IDC_ST_CHECKING_PORT), SW_HIDE);
+ ShowWindow(GetDlgItem(hDlg, IDC_CHECKING_PORT), SW_HIDE);
+
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
+ }
+
+ if (IsFlagSet(dwFlags, DMF_DETECTED_MODEM))
+ {
+ SetFlag(psi->dwFlags, SIF_DETECTED_MODEM);
+ }
+
+ // Did the detection fail?
+ if (IsFlagClear(dwFlags, DMF_GOTO_NEXT_PAGE))
+ {
+ // Yes; don't bother going thru the rest of the wizard
+ Wiz_Bail(hDlg, psi);
+ }
+ else
+ {
+ // No; automatically go to next page
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Detect dialog
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK DetectDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ PropSheet_SetWizButtons(GetParent(hDlg), 0);
+
+ // Reset the status controls
+ ShowWindow(GetDlgItem(hDlg, IDC_ST_CHECKING_PORT), SW_SHOW);
+ SetDlgItemText(hDlg, IDC_DETECT_STATUS, TEXT(""));
+
+ ShowWindow(GetDlgItem(hDlg, IDC_CHECKING_PORT), SW_SHOW);
+
+ PostMessage(hDlg, WM_STARTDETECT, 0, 0);
+ break;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ case PSN_WIZBACK:
+ break;
+
+ case PSN_WIZNEXT: {
+ ULONG uNextDlg;
+
+ // Was a modem detected?
+ if (IsFlagSet(psi->dwFlags, SIF_DETECTED_MODEM))
+ {
+ // Yes; is this a multi-modem case?
+ if (IsFlagSet(psi->dwFlags, SIF_PORTS_GALORE))
+ {
+ // Yes
+ uNextDlg = IDD_WIZ_PORTDETECT;
+ }
+ else
+ {
+ // No
+ uNextDlg = IDD_WIZ_INSTALL;
+ }
+ }
+ else
+ {
+ // No
+ uNextDlg = IDD_WIZ_NOMODEM;
+ }
+ SetDlgMsgResult(hDlg, message, uNextDlg);
+ break;
+ }
+
+ case PSN_QUERYCANCEL:
+ if (IsFlagSet(psi->dwFlags, SIF_DETECTING))
+ {
+ SetFlag(psi->dwFlags, SIF_DETECT_CANCEL);
+ return PSNRET_INVALID;
+ }
+
+ // FALLTHROUGH
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_STARTDETECT:
+ Detect_OnStartDetect(hDlg, psi);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: No Modem dialog
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK NoModemDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
+ break;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+ // Go back to the page that precedes the detection
+ // page
+ if (IsFlagSet(psi->dwFlags, SIF_PORTS_GALORE))
+ {
+ SetDlgMsgResult(hDlg, message, IDD_WIZ_SELQUERYPORT);
+ }
+ else
+ {
+ SetDlgMsgResult(hDlg, message, IDD_WIZ_INTRO);
+ }
+ break;
+
+ case PSN_WIZNEXT:
+ Wiz_SetSelectParams(psi);
+ SetDlgMsgResult(hDlg, message, IDD_DYNAWIZ_SELECTDEV_PAGE);
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Starts the browser dialog. The selected modem is returned
+ in psi->lpdiSelected.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PRIVATE
+SelectNewDriver(
+ IN HWND hDlg,
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData)
+ {
+ BOOL bRet = FALSE;
+ DWORD cbSize;
+ PSP_CLASSINSTALL_HEADER pparamsSave;
+ SP_DEVINSTALL_PARAMS devParams;
+ SP_DEVINSTALL_PARAMS devParamsSave;
+ SP_SELECTDEVICE_PARAMS sdp;
+
+ DBG_ENTER(SelectNewDriver);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+
+ // Determine size of buffer to save current class install params
+ CplDiGetClassInstallParams(hdi, pdevData, NULL, 0, &cbSize);
+
+ // Anything to save?
+ if (0 == cbSize)
+ {
+ // No
+ pparamsSave = NULL;
+ }
+ else
+ {
+ // Yes
+ pparamsSave = (PSP_CLASSINSTALL_HEADER)LocalAlloc(LPTR, cbSize);
+ if (pparamsSave)
+ {
+ pparamsSave->cbSize = sizeof(*pparamsSave);
+
+ // Save the current class install params
+ CplDiGetClassInstallParams(hdi, pdevData, pparamsSave, cbSize, NULL);
+ }
+ }
+
+ // Set the install params field so the class installer will show
+ // custom instructions.
+ CplInitClassInstallHeader(&sdp, DIF_SELECTDEVICE);
+ CplDiSetClassInstallParams(hdi, pdevData, PCIPOfPtr(&sdp), sizeof(sdp));
+
+ // Set the flag to show the Other... button
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, pdevData, &devParams))
+ {
+ // Save the current parameters
+ BltByte(&devParamsSave, &devParams, sizeof(devParamsSave));
+
+ SetFlag(devParams.Flags, DI_SHOWOEM);
+ devParams.hwndParent = hDlg;
+
+ // Set the Select Device parameters
+ CplDiSetDeviceInstallParams(hdi, pdevData, &devParams);
+ }
+
+ bRet = CplDiCallClassInstaller(DIF_SELECTDEVICE, hdi, pdevData);
+
+ // Restore the parameters
+ CplDiSetDeviceInstallParams(hdi, pdevData, &devParamsSave);
+
+ if (pparamsSave)
+ {
+ // Restore the class install params
+ CplDiSetClassInstallParams(hdi, pdevData, pparamsSave, cbSize);
+
+ LocalFree(LOCALOF(pparamsSave));
+ }
+
+ DBG_EXIT(SelectNewDriver);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sets the static fields for the Found dialog
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Found_SetFields(
+ IN HWND hDlg,
+ IN LPCTSTR pszPort,
+ IN LPCTSTR pszDescription,
+ IN UINT ids,
+ IN UINT idsInstruct)
+ {
+ TCHAR sz[MAX_BUF];
+ LPTSTR psz;
+
+ // Port name
+ if (ConstructMessage(&psz, g_hinst, MAKEINTRESOURCE(ids), pszPort))
+ {
+ SetDlgItemText(hDlg, IDC_ST_PORT, psz);
+ GFree(psz);
+ }
+
+ // Modem name
+ SetDlgItemText(hDlg, IDC_NAME, pszDescription);
+
+ // Extra instructions
+ LoadString(g_hinst, idsInstruct, sz, sizeof(sz));
+ SetDlgItemText(hDlg, IDC_ST_INSTRUCT, sz);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Found dialog
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+FoundDlgProc(
+ IN HWND hDlg,
+ IN UINT message,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG: {
+ BOOL bRet;
+ SP_DRVINFO_DATA drvData;
+ UINT ids;
+ UINT idsInstruct;
+
+ Wiz_SetPtr(hDlg, lParam);
+
+ psi = (LPSETUPINFO)((LPPROPSHEETPAGE)lParam)->lParam;
+
+ // Was the modem *accurately* detected?
+ if (IsFlagClear(psi->dwFlags, SIF_DETECTED_GENERIC))
+ {
+ // Yes
+ ids = IDS_ST_MODEMFOUND;
+ idsInstruct = IDS_ST_FOUND_INSTRUCT;
+ }
+ else
+ {
+ // No; detected generic
+ ids = IDS_ST_NOTDETECTED;
+ idsInstruct = IDS_ST_GENERIC_INSTRUCT;
+ }
+
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(psi->hdi, psi->pdevData, &drvData);
+ if ( !bRet )
+ {
+ // This should never happen
+ ASSERT(0);
+ Wiz_Bail(hDlg, psi);
+ }
+ else
+ {
+ // Display only the first (and only) port in the port list
+ Found_SetFields(hDlg, psi->pszPortList, drvData.Description, ids, idsInstruct);
+ }
+ return FALSE;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ EnterInsideWizard(hDlg);
+
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT);
+ break;
+
+ case PSN_KILLACTIVE:
+ break;
+
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+ break;
+
+ case PSN_WIZNEXT:
+ // Post this message since the property sheet manager
+ // isn't very good about handling recursive PressButton
+ // calls.
+ PostMessage(hDlg, WM_PRESSFINISH, 0, 0);
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_PRESSFINISH:
+ psi->miw.ExitButton = PSBTN_FINISH;
+
+ LeaveInsideWizard(hDlg);
+
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_FINISH);
+ break;
+
+ case WM_COMMAND:
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDC_CHANGE:
+ // Bring up the device installer browser to allow the user
+ // to select a different modem.
+
+ if (SelectNewDriver(hDlg, psi->hdi, psi->pdevData))
+ {
+ SP_DRVINFO_DATA drvData;
+
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(psi->hdi, psi->pdevData, &drvData);
+ if ( !bRet )
+ {
+ // This should never happen
+ ASSERT(0);
+ }
+ else
+ {
+ Found_SetFields(hDlg, psi->pszPortList,
+ drvData.Description,
+ IDS_ST_MODEMCHANGED, IDS_ST_FOUND_INSTRUCT);
+ }
+ }
+ break;
+ }
+ break;
+ }
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Get the port filtering flags, based on the selected
+ driver.
+
+ The filtering flags indicate whether to include
+ serial or parallel ports in the list.
+
+Returns: FP_* bitfield
+Cond: --
+*/
+DWORD
+PRIVATE
+GetPortFilterFlags(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DRVINFO_DATA pdrvData)
+ {
+ DWORD dwRet = FP_SERIAL | FP_PARALLEL | FP_MODEM;
+ PSP_DRVINFO_DETAIL_DATA pdrvDetail;
+ SP_DRVINFO_DETAIL_DATA drvDetailDummy;
+ DWORD cbSize;
+
+ drvDetailDummy.cbSize = sizeof(drvDetailDummy);
+ CplDiGetDriverInfoDetail(hdi, pdevData, pdrvData, &drvDetailDummy,
+ sizeof(drvDetailDummy), &cbSize);
+
+ ASSERT(0 < cbSize); // This should always be okay
+
+ pdrvDetail = (PSP_DRVINFO_DETAIL_DATA)LocalAlloc(LPTR, cbSize);
+ if (pdrvDetail)
+ {
+ pdrvDetail->cbSize = sizeof(*pdrvDetail);
+
+ if (CplDiGetDriverInfoDetail(hdi, pdevData, pdrvData, pdrvDetail,
+ cbSize, NULL))
+ {
+ LPTSTR pszSection = pdrvDetail->SectionName;
+
+ // If the section name indicates the type of port,
+ // then filter out the other port types since it would
+ // be ridiculous to list ports that don't match the
+ // port subclass.
+
+ if (IsSzEqual(pszSection, c_szInfSerial))
+ {
+ dwRet = FP_SERIAL;
+ }
+ else if (IsSzEqual(pszSection, c_szInfParallel))
+ {
+ dwRet = FP_PARALLEL;
+ }
+ }
+ LocalFree(LOCALOF(pdrvDetail));
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Device enumerator callback. Adds another port to the
+ listbox.
+
+Returns: TRUE to continue enumeration
+Cond: --
+*/
+BOOL
+CALLBACK
+Port_Add(
+ HPORTDATA hportdata,
+ LPARAM lParam)
+ {
+ BOOL bRet;
+ PORTDATA pd;
+
+ pd.cbSize = sizeof(pd);
+ bRet = PortData_GetProperties(hportdata, &pd);
+ if (bRet)
+ {
+ HWND hwndLB = ((LPPORTINFO)lParam)->hwndLB;
+ DWORD dwFlags = ((LPPORTINFO)lParam)->dwFlags;
+ LPTSTR pszPortExclude = ((LPPORTINFO)lParam)->szPortExclude;
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD c_mpsubclass[3] = { FP_PARALLEL, FP_SERIAL, FP_MODEM };
+#pragma data_seg()
+
+ ASSERT(0 == PORT_SUBCLASS_PARALLEL);
+ ASSERT(1 == PORT_SUBCLASS_SERIAL);
+
+ // Does this port qualify to be listed AND
+ // is the portname *not* the port that a mouse
+ // is connected to?
+ if (0 <= pd.nSubclass && pd.nSubclass <= 2 && // safety harness
+ (c_mpsubclass[pd.nSubclass] & dwFlags) &&
+ !IsSzEqual(pd.szPort, pszPortExclude))
+ {
+ // Yes; add the friendly name to the list
+ TCHAR rgchPortDisplayName[MAX_BUF];
+ ASSERT(sizeof(rgchPortDisplayName)==sizeof(pd.szFriendly));
+
+ // Add prefix spaces to get the list box sort order
+ // to work right (display COM2 before COM12, etc).
+ FormatPortForDisplay
+ (
+ pd.szFriendly,
+ rgchPortDisplayName,
+ sizeof(rgchPortDisplayName)/sizeof(TCHAR)
+ );
+
+ ListBox_AddString(hwndLB, rgchPortDisplayName);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Handles WM_COMMAND for the specific controls used
+ with the port listbox (like the radio buttons).
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Port_OnCommand(
+ IN HWND hDlg,
+ IN WPARAM wParam,
+ IN LPARAM lParam,
+ IN BOOL bWizard)
+ {
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDC_PORTS:
+ // Did a listbox selection change?
+ if (LBN_SELCHANGE == GET_WM_COMMAND_CMD(wParam, lParam))
+ {
+ // Yes
+ BOOL bEnable;
+ HWND hwndCtl = GET_WM_COMMAND_HWND(wParam, lParam);
+ int cSel = ListBox_GetSelCount(hwndCtl);
+ int id;
+
+ // Enable OK or Next button if there is at least one selection
+ bEnable = (0 < cSel);
+ if (bWizard)
+ {
+ if (bEnable)
+ {
+ PropSheet_SetWizButtons(GetParent(hDlg),
+ PSWIZB_BACK | PSWIZB_NEXT);
+ }
+ else
+ {
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK);
+ }
+ }
+ else
+ {
+ Button_Enable(GetDlgItem(hDlg, IDOK), bEnable);
+ }
+
+ // Choose the "Select All" button if all the entries
+ // are selected
+ if (cSel>1 && ListBox_GetCount(hwndCtl) == cSel)
+ {
+ id = IDC_ALL;
+ }
+ else
+ {
+ id = IDC_SELECTED;
+ }
+ CheckRadioButton(hDlg, IDC_ALL, IDC_SELECTED, id);
+ }
+ break;
+
+ case IDC_ALL:
+ if (BN_CLICKED == GET_WM_COMMAND_CMD(wParam, lParam))
+ {
+ // Select everything in the listbox
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_PORTS);
+ int cItems = ListBox_GetCount(hwndCtl);
+
+ ListBox_SelItemRange(hwndCtl, TRUE, 0, cItems);
+
+ if (bWizard)
+ {
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
+ }
+ else
+ {
+ Button_Enable(GetDlgItem(hDlg, IDOK), TRUE);
+ }
+ }
+ break;
+
+ case IDC_SELECTED:
+ if (BN_CLICKED == GET_WM_COMMAND_CMD(wParam, lParam))
+ {
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_PORTS);
+ int cItems = ListBox_GetCount(hwndCtl);
+
+ // Deselect everything only if everything is currently
+ // selected
+ if (ListBox_GetSelCount(hwndCtl) == cItems)
+ {
+ ListBox_SelItemRange(hwndCtl, FALSE, 0, cItems);
+
+ if (bWizard)
+ {
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK);
+ }
+ else
+ {
+ Button_Enable(GetDlgItem(hDlg, IDOK), FALSE);
+ }
+ }
+ }
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Handle when the Next button is clicked (or the OK button).
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Port_OnWizNext(
+ IN HWND hDlg,
+ IN LPSETUPINFO psi)
+ {
+ HWND hwndLB = GetDlgItem(hDlg, IDC_PORTS);
+ int cSel = ListBox_GetSelCount(hwndLB);
+
+ // Remember the selected port for the next page
+ if (0 >= cSel)
+ {
+ // This should never happen
+ ASSERT(0);
+ }
+ else
+ {
+ TCHAR sz[MAX_BUF];
+ LPINT piSel;
+
+ piSel = (LPINT)LocalAlloc(LMEM_FIXED, cSel * sizeof(*piSel));
+ if (piSel)
+ {
+ int i;
+
+ ListBox_GetSelItems(hwndLB, cSel, piSel);
+
+ // Free whatever list we have; we're starting over
+ CatMultiString(&psi->pszPortList, NULL);
+
+ for (i = 0; i < cSel; i++)
+ {
+ // Get the selected port (which is a friendly name)
+ ListBox_GetText(hwndLB, piSel[i], sz);
+
+ // Strip off prefix spaces added to get the list box sort order
+ // to work right (display COM2 before COM12, etc).
+ UnformatAfterDisplay(sz);
+
+ // Convert the friendly name to a port name
+ PortMap_GetPortName(psi->hportmap, sz, sz,
+ SIZECHARS(sz));
+
+ // Don't worry if this fails, we'll just install
+ // whatever could be added
+ CatMultiString(&psi->pszPortList, sz);
+ }
+
+ LocalFree(LOCALOF(piSel));
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Port dialog. Allows the user to select a port.
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK PortManualDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ {
+ SP_DRVINFO_DATA drvData;
+ PORTINFO portinfo;
+
+ // This page will get activated invisibly if the user
+ // cancels from the dial info page. In this condition,
+ // the selected device and selected driver may be NULL.
+ //
+ // [ LONG: by design the propsheet mgr switches to the
+ // previous page in the array when it needs to remove
+ // a page that is currently active. We hit this code
+ // path when the user clicks Cancel in the dial info
+ // page because ClassInstall_OnDestroyWizard explicitly
+ // removes that page while it is currently active. ]
+ //
+
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK);
+
+ // The user selected a modem from the Select Device page.
+
+ // Get the selected driver
+ drvData.cbSize = sizeof(drvData);
+ if (CplDiGetSelectedDriver(psi->hdi, psi->pdevData, &drvData))
+ {
+ // Start off by selecting only the selected ports
+ CheckRadioButton(hDlg, IDC_ALL, IDC_SELECTED, IDC_SELECTED);
+
+ // Modem name
+ SetDlgItemText(hDlg, IDC_NAME, drvData.Description);
+
+ // Fill the port listbox; special-case the parallel and
+ // serial cable connections so we don't look stupid
+ portinfo.dwFlags = GetPortFilterFlags(psi->hdi, psi->pdevData, &drvData);
+ portinfo.hwndLB = GetDlgItem(hDlg, IDC_PORTS);
+#ifdef SKIP_MOUSE_PORT
+ lstrcpy(portinfo.szPortExclude, g_szMouseComPort);
+#else
+ *portinfo.szPortExclude = 0;
+#endif
+
+ ListBox_ResetContent(portinfo.hwndLB);
+ EnumeratePorts(Port_Add, (LPARAM)&portinfo);
+ }
+ break;
+ }
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+
+ Wiz_SetSelectParams(psi);
+
+ SetDlgMsgResult(hDlg, message, IDD_DYNAWIZ_SELECTDEV_PAGE);
+ break;
+
+ case PSN_WIZNEXT:
+#ifdef PROFILE_MASSINSTALL
+ g_dwTimeBegin = GetTickCount();
+#endif
+ Port_OnWizNext(hDlg, psi);
+ SetDlgMsgResult(hDlg, message, IDD_WIZ_INSTALL);
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_COMMAND:
+ Port_OnCommand(hDlg, wParam, lParam, TRUE);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Port detection dialog. Allows the user to select a
+ single port to interrogate.
+
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+SelQueryPortDlgProc(
+ IN HWND hDlg,
+ IN UINT message,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG: {
+ PORTINFO portinfo;
+
+ Wiz_SetPtr(hDlg, lParam);
+
+ psi = (LPSETUPINFO)lParam;
+
+ // Fill the port listbox
+ portinfo.dwFlags = FP_SERIAL;
+ portinfo.hwndLB = GetDlgItem(hDlg, IDC_PORTS);
+#ifdef SKIP_MOUSE_PORT
+ lstrcpy(portinfo.szPortExclude, g_szMouseComPort);
+#else
+ *portinfo.szPortExclude = 0;
+#endif
+
+ ListBox_ResetContent(portinfo.hwndLB);
+ EnumeratePorts(Port_Add, (LPARAM)&portinfo);
+ }
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE: {
+ DWORD dwFlags;
+ LPTSTR psz;
+
+ dwFlags = PSWIZB_BACK;
+ if (LB_ERR != ListBox_GetCurSel(GetDlgItem(hDlg, IDC_PORTS)))
+ {
+ dwFlags |= PSWIZB_NEXT;
+ }
+ PropSheet_SetWizButtons(GetParent(hDlg), dwFlags);
+
+ // Explanation of why we're at this page
+ if (ConstructMessage(&psz, g_hinst, MAKEINTRESOURCE(IDS_LOTSAPORTS),
+ PortMap_GetCount(psi->hportmap)))
+ {
+ SetDlgItemText(hDlg, IDC_NAME, psz);
+ GFree(psz);
+ }
+ break;
+ }
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+ break;
+
+ case PSN_WIZNEXT: {
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_PORTS);
+ int iSel = ListBox_GetCurSel(hwndCtl);
+
+ ASSERT(LB_ERR != iSel);
+
+ ListBox_GetText(hwndCtl, iSel, psi->szPortQuery);
+
+ // Strip off prefix spaces added to get the list box sort order
+ // to work right (display COM2 before COM12, etc).
+ UnformatAfterDisplay(psi->szPortQuery);
+
+ PortMap_GetPortName(psi->hportmap, psi->szPortQuery,
+ psi->szPortQuery,
+ SIZECHARS(psi->szPortQuery));
+ }
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDC_PORTS:
+ // Did a listbox selection change?
+ if (LBN_SELCHANGE == GET_WM_COMMAND_CMD(wParam, lParam))
+ {
+ // Yes
+ DWORD dwFlags = PSWIZB_BACK;
+ HWND hwndCtl = GET_WM_COMMAND_HWND(wParam, lParam);
+
+ if (LB_ERR != ListBox_GetCurSel(hwndCtl))
+ {
+ dwFlags |= PSWIZB_NEXT;
+ }
+ PropSheet_SetWizButtons(GetParent(hDlg), dwFlags);
+ }
+ break;
+ }
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Port installation dialog. Allows the user to select
+ the ports to install the detected modem on.
+
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+PortDetectDlgProc(
+ IN HWND hDlg,
+ IN UINT message,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG: {
+ PORTINFO portinfo;
+
+ Wiz_SetPtr(hDlg, lParam);
+
+ psi = (LPSETUPINFO)lParam;
+
+ // Start off by selecting only the selected ports
+ CheckRadioButton(hDlg, IDC_ALL, IDC_SELECTED, IDC_SELECTED);
+
+ // Fill the port listbox
+ portinfo.dwFlags = FP_SERIAL;
+ portinfo.hwndLB = GetDlgItem(hDlg, IDC_PORTS);
+#ifdef SKIP_MOUSE_PORT
+ lstrcpy(portinfo.szPortExclude, g_szMouseComPort);
+#else
+ *portinfo.szPortExclude = 0;
+#endif
+
+ ListBox_ResetContent(portinfo.hwndLB);
+ EnumeratePorts(Port_Add, (LPARAM)&portinfo);
+ }
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE: {
+ DWORD dwFlags = PSWIZB_BACK;
+
+ if (0 < ListBox_GetSelCount(GetDlgItem(hDlg, IDC_PORTS)))
+ {
+ dwFlags |= PSWIZB_NEXT;
+ }
+ PropSheet_SetWizButtons(GetParent(hDlg), dwFlags);
+ }
+ break;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ break;
+
+ case PSN_WIZBACK:
+ SetDlgMsgResult(hDlg, message, IDD_WIZ_SELQUERYPORT);
+ break;
+
+ case PSN_WIZNEXT:
+ Port_OnWizNext(hDlg, psi);
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_COMMAND:
+ Port_OnCommand(hDlg, wParam, lParam, TRUE);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Start installing the modems.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+Install_OnStartInstall(
+ IN HWND hDlg,
+ IN LPSETUPINFO psi)
+ {
+ BOOL bRet;
+
+ DBG_ENTER(Install_OnStartInstall);
+#ifdef PROFILE_MASSINSTALL
+ g_dwTimeAtStartInstall = GetTickCount();
+#endif
+
+ ASSERT(hDlg);
+ ASSERT(psi);
+
+ // Cause the page to be painted right away before we start installation
+ InvalidateRect(hDlg, NULL, FALSE);
+ UpdateWindow(hDlg);
+
+ // Was the modem detected and is this the non-multi-port
+ // case?
+ if (IsFlagSet(psi->dwFlags, SIF_DETECTED_MODEM) &&
+ IsFlagClear(psi->dwFlags, SIF_PORTS_GALORE))
+ {
+ // Yes; install the modem(s) that may have been detected
+ bRet = CplDiInstallModem(psi->hdi, NULL, FALSE);
+ }
+ else
+ {
+ // No; we are either in the manual-select case or the
+ // multi-modem detection case. These are the same.
+ if ( !psi->pszPortList )
+ {
+ ASSERT(0); // out of memory
+ bRet = FALSE;
+ }
+ else
+ {
+ DWORD dwFlags = IMF_DEFAULT;
+
+ if (IsFlagClear(psi->dwFlags, SIF_DETECTED_MODEM))
+ {
+ SetFlag(dwFlags, IMF_CONFIRM);
+ }
+
+ bRet = CplDiInstallModemFromDriver(psi->hdi, hDlg,
+ &psi->pszPortList, dwFlags);
+
+ // Free the list
+ CatMultiString(&psi->pszPortList, NULL);
+ }
+ }
+
+ // Did the user cancel during install?
+ if (FALSE == bRet)
+ {
+ // Yes; don't bother going thru the rest of the
+ // wizard
+ Wiz_Bail(hDlg, psi);
+ }
+ else
+ {
+ // No; automatically go to next page
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT);
+ }
+
+ DBG_EXIT(Install_OnStartInstall);
+#ifdef PROFILE_MASSINSTALL
+TRACE_MSG(TF_GENERAL, "****** modem installation took %lu ms total. ******",
+ GetTickCount() - g_dwTimeAtStartInstall);
+#endif
+
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Install a manually selected or detected modem.
+
+ Installation can take some time, so we display this
+ page to tell the user to take a coffee break.
+
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK InstallDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ // Disable the buttons since we cannot do anything while
+ // this page does the installation.
+ PropSheet_SetWizButtons(GetParent(hDlg), 0);
+ EnableWindow(GetDlgItem(GetParent(hDlg), IDCANCEL), FALSE);
+
+ PostMessage(hDlg, WM_STARTINSTALL, 0, 0);
+ break;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ case PSN_WIZBACK:
+ break;
+
+ case PSN_WIZNEXT: {
+ ULONG uNextDlg;
+
+ // Set the buttons to at least go forward and cancel
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT);
+ EnableWindow(GetDlgItem(GetParent(hDlg), IDCANCEL), TRUE);
+
+ // No; has the default location been initialized yet?
+ if (Wiz_InitDialInfo(psi))
+ {
+ // No; show the mini-dial helper
+ uNextDlg = IDD_WIZ_DIALINFO;
+ }
+ else
+ {
+ // Yes
+ uNextDlg = IDD_WIZ_DONE;
+ }
+
+ SetDlgMsgResult(hDlg, message, uNextDlg);
+ }
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_STARTINSTALL:
+ Install_OnStartInstall(hDlg, psi);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Done dialog
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK DoneDlgProc(
+ HWND hDlg,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = Wiz_GetPtr(hDlg);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ Wiz_SetPtr(hDlg, lParam);
+ break;
+
+ case WM_NOTIFY:
+ lpnm = (NMHDR FAR *)lParam;
+ switch(lpnm->code)
+ {
+ case PSN_SETACTIVE:
+ if (IsFlagSet(psi->miw.Flags, MIWF_INSET_WIZARD))
+ {
+ // Replace the Finish button with the Next button to
+ // make this wizard look like it is part of the calling
+ // wizard.
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT);
+ }
+ else
+ {
+ // Last page, show the Finish button
+ PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_FINISH);
+
+ // and disable the Cancel button, since it's too late to cancel
+ EnableWindow(GetDlgItem(GetParent(hDlg), IDCANCEL), FALSE);
+ }
+
+ // Skip showing this page?
+ if (IsFlagSet(psi->dwFlags, SIF_JUMP_PAST_DONE))
+ {
+ // Yes
+ psi->miw.ExitButton = PSBTN_NEXT;
+ PostMessage(hDlg, WM_PRESSFINISH, 0, 0);
+ }
+ else
+ {
+ psi->miw.ExitButton = PSBTN_FINISH;
+ }
+ break;
+
+ case PSN_KILLACTIVE:
+ case PSN_HELP:
+ case PSN_WIZBACK:
+ break;
+
+ case PSN_WIZNEXT:
+ PostMessage(hDlg, WM_PRESSFINISH, 0, 0);
+ break;
+
+ case PSN_WIZFINISH:
+ // Is this wizard inside another wizard?
+ if (IsFlagSet(psi->miw.Flags, MIWF_INSET_WIZARD))
+ {
+ // Yes; prepare to show the outside wizard again
+ LeaveInsideWizard(hDlg);
+ }
+ break;
+
+ default:
+ return FALSE;
+ }
+ break;
+
+ case WM_PRESSFINISH:
+ PropSheet_PressButton(GetParent(hDlg), PSBTN_FINISH);
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Port dialog. Allows the user to select a port.
+Returns: varies
+Cond: --
+*/
+BOOL
+CALLBACK
+CloneDlgProc(
+ IN HWND hDlg,
+ IN UINT message,
+ IN WPARAM wParam,
+ IN LPARAM lParam)
+ {
+ NMHDR FAR *lpnm;
+ LPSETUPINFO psi = (LPSETUPINFO)GetWindowLong(hDlg, DWL_USER);
+
+ switch(message)
+ {
+ case WM_INITDIALOG:
+ {
+ HWND hwndCtl = GetDlgItem(hDlg, IDC_PORTS);
+ PORTINFO portinfo;
+ MODEM_PRIV_PROP mpp;
+
+ psi = (LPSETUPINFO)lParam;
+
+ // Start off by selecting all the ports
+ CheckRadioButton(hDlg, IDC_ALL, IDC_SELECTED, IDC_ALL);
+
+ // Get the name and device type
+ mpp.cbSize = sizeof(mpp);
+ mpp.dwMask = MPPM_FRIENDLY_NAME | MPPM_DEVICE_TYPE | MPPM_PORT;
+ if (CplDiGetPrivateProperties(psi->hdi, psi->pdevData, &mpp))
+ {
+ int cItems;
+ LPTSTR psz;
+
+ // Modem name
+ if (ConstructMessage(&psz, g_hinst, MAKEINTRESOURCE(IDS_SELECTTODUP),
+ mpp.szFriendlyName))
+ {
+ SetDlgItemText(hDlg, IDC_NAME, psz);
+ GFree(psz);
+ }
+
+ // Fill the port listbox; special-case the parallel and
+ // serial cable connections so we don't look stupid
+ switch (mpp.nDeviceType)
+ {
+ case DT_PARALLEL_PORT:
+ portinfo.dwFlags = FP_PARALLEL;
+ break;
+
+ case DT_PARALLEL_MODEM:
+ portinfo.dwFlags = FP_PARALLEL | FP_MODEM;
+ break;
+
+ default:
+ portinfo.dwFlags = FP_SERIAL | FP_MODEM;
+ break;
+ }
+ portinfo.hwndLB = GetDlgItem(hDlg, IDC_PORTS);
+ lstrcpy(portinfo.szPortExclude, mpp.szPort);
+
+ ListBox_ResetContent(portinfo.hwndLB);
+ EnumeratePorts(Port_Add, (LPARAM)&portinfo);
+
+ cItems = ListBox_GetCount(hwndCtl);
+ ListBox_SelItemRange(hwndCtl, TRUE, 0, cItems);
+ }
+ else
+ {
+ // Error
+ MsgBox(g_hinst, hDlg,
+ MAKEINTRESOURCE(IDS_OOM_CLONE),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONERROR);
+ EndDialog(hDlg, -1);
+ }
+
+ // Play it safe; was there no selection made?
+ if (ListBox_GetSelCount(hwndCtl) == 0)
+ {
+ // Yes; disable OK button
+ Button_Enable(GetDlgItem(hDlg, IDOK), FALSE);
+ }
+
+ SetWindowLong(hDlg, DWL_USER, lParam);
+ }
+ break;
+
+ case WM_COMMAND:
+ Port_OnCommand(hDlg, wParam, lParam, FALSE);
+
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case IDOK:
+ Port_OnWizNext(hDlg, psi);
+
+ // Fall thru
+ // | |
+ // v v
+
+ case IDCANCEL:
+ EndDialog(hDlg, GET_WM_COMMAND_ID(wParam, lParam));
+ break;
+ }
+ break;
+
+ default:
+ return FALSE;
+
+ } // end of switch on message
+
+ return TRUE;
+ }
+
+
+void PUBLIC Install_SetStatus(
+ IN HWND hDlg,
+ IN LPCTSTR lpctszStatus
+ )
+{
+ if (hDlg && lpctszStatus)
+ {
+ SetDlgItemText(hDlg, IDC_ST_INSTALLING, lpctszStatus);
+ UpdateWindow(hDlg);
+ }
+}
diff --git a/private/unimodem/cpl/util.c b/private/unimodem/cpl/util.c
new file mode 100644
index 000000000..6b3c2be08
--- /dev/null
+++ b/private/unimodem/cpl/util.c
@@ -0,0 +1,3528 @@
+/*
+ * UTIL.C
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1994
+ * All rights reserved
+ *
+ */
+
+#include "proj.h"
+#include <tspnotif.h>
+#include <slot.h>
+
+#ifdef PROFILE_MASSINSTALL
+extern DWORD g_dwTimeSpent;
+extern DWORD g_dwTimeBegin;
+DWORD g_dwTimeStartModemInstall;
+#endif
+
+
+WORD g_wUsedNameArray[MAX_INSTALLATIONS];
+
+
+// Function prototypes for the TAPI entry-points
+typedef LONG (WINAPI FAR* DIALINITEDPROC)(LPDWORD pdwInited);
+typedef LONG (WINAPI FAR* OPENDIALASSTPROC)(HWND hwnd, LPCSTR pszAddressIn, BOOL bSimple, BOOL bSilentInstall);
+
+
+// Unattended install INF file line fields
+#define FIELD_PORT 0
+#define FIELD_DESCRIPTION 1
+#define FIELD_MANUFACTURER 2
+#define FIELD_PROVIDER 3
+
+// Unattended install INF file lines.
+typedef struct _tagModemSpec
+{
+ TCHAR szPort[LINE_LEN];
+ TCHAR szDescription[LINE_LEN];
+ TCHAR szManufacturer[LINE_LEN];
+ TCHAR szProvider[LINE_LEN];
+
+} MODEM_SPEC, FAR *LPMODEM_SPEC;
+
+
+// UNATTENDED-INSTALL-RELATED-GLOBALS
+// Global failure-code used by final message box to display error code.
+UINT gUnattendFailID;
+
+
+#ifdef WIN95
+/*----------------------------------------------------------
+Purpose: Returns the instance portion of a registry pathname
+
+Returns: see above
+Cond: --
+*/
+LPCTSTR
+PUBLIC
+StrFindInstanceName(
+ IN LPCTSTR pszPath)
+ {
+ LPCTSTR psz;
+
+ for (psz = pszPath; *pszPath; pszPath = CharNext(pszPath))
+ {
+ if ('\\' == pszPath[0] && pszPath[1])
+ psz = pszPath + 1;
+ }
+
+ return psz;
+ }
+#endif // WIN95
+
+
+/*----------------------------------------------------------
+Purpose: Position this wizard where the outside wizard is,
+ and hide and disable the owner until we're done
+ with this wizard.
+
+ The related call to this function is LeaveInsideWizard.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+EnterInsideWizard(
+ IN HWND hDlg)
+ {
+ // (The parent of this dialog is the propsheet manager. We
+ // want the owner of the propsheet manager.)
+ HWND hwndFrame = GetParent(hDlg);
+ HWND hwndOutside = GetParent(hwndFrame);
+ RECT rc;
+
+ ASSERT(IsWindow(hwndOutside));
+
+ // Check that it is visible before hiding it. This way
+ // we won't move this dialog wrongfully if the window is
+ // already hidden.
+ if (IsWindow(hwndOutside) && IsWindowVisible(hwndOutside))
+ {
+ // Position dialog directly over the outside wizard
+ GetWindowRect(hwndOutside, &rc);
+
+ SetWindowPos(hwndFrame, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
+ SetWindowRedraw(hwndFrame, TRUE);
+ InvalidateRect(hwndFrame, NULL, TRUE);
+ UpdateWindow(hwndFrame); // Show the insize wizard
+
+ ShowWindow(hwndOutside, FALSE); // Hide the outside wizard
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Position the outside wizard where the inside wizard
+ is (was).
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+LeaveInsideWizard(
+ IN HWND hDlg)
+ {
+ HWND hwndFrame = GetParent(hDlg);
+ HWND hwndOutside = GetParent(hwndFrame);
+ RECT rc;
+
+ ASSERT(IsWindow(hwndOutside));
+
+ if (IsWindow(hwndOutside))
+ {
+ // In case the user moved the dialog, reposition the owner dialog
+ // to the new position so everything is seamless
+ GetWindowRect(hwndFrame, &rc);
+
+ InvalidateRect(hwndOutside, NULL, TRUE);
+ SetWindowPos(hwndOutside, NULL, rc.left, rc.top, 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER);
+ ShowWindow(hwndOutside, TRUE);
+
+ ShowWindow(hwndFrame, FALSE); // hide inside wizard
+
+ UpdateWindow(hwndOutside); // show outside wizard
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns a string of the form:
+
+ "Base string #n"
+
+ where "Base string" is pszBase and n is the nCount.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+MakeUniqueName(
+ OUT LPTSTR pszBuf,
+ IN LPCTSTR pszBase,
+ IN UINT nCount)
+ {
+ TCHAR szTemplate[MAX_BUF_MED];
+
+ LoadString(g_hinst, IDS_DUP_TEMPLATE, szTemplate, SIZECHARS(szTemplate));
+ wsprintf(pszBuf, szTemplate, pszBase, (UINT)nCount);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: If a RunOnce command exists in the driver key, run it,
+ then delete the command.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+DoRunOnce(
+ IN HKEY hkeyDrv)
+ {
+ DWORD cbData;
+ TCHAR szCmd[MAX_PATH];
+
+ cbData = sizeof(szCmd);
+ if (NO_ERROR == RegQueryValueEx(hkeyDrv, c_szRunOnce, NULL, NULL, (LPBYTE)szCmd, &cbData))
+ {
+ BOOL bRet;
+ PROCESS_INFORMATION procinfo;
+ STARTUPINFO startupinfo;
+
+ ZeroInit(&startupinfo);
+ startupinfo.cb = sizeof(startupinfo);
+
+ bRet = CreateProcess(NULL, szCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS,
+ NULL, NULL, &startupinfo, &procinfo);
+
+ RegDeleteValue(hkeyDrv, c_szRunOnce);
+
+#ifdef DEBUG
+ if (bRet)
+ {
+ TRACE_MSG(TF_GENERAL, "Running \"%s\" succeeded", (LPTSTR)szCmd);
+ }
+ else
+ {
+ TRACE_MSG(TF_GENERAL, "Running \"%s\" returned %#08lx", (LPTSTR)szCmd, GetLastError());
+ }
+#endif
+ }
+ else
+ {
+#ifndef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "No RunOnce command found");
+#endif
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Shows the stand-alone verion of the dial info dialog
+ if it is necessary.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+DoDialingProperties(
+ IN HWND hwndOwner,
+ IN BOOL bMiniDlg,
+ IN BOOL bSilentInstall)
+ {
+ HINSTANCE hinstTapi;
+ DIALINITEDPROC pfnDialInited;
+ OPENDIALASSTPROC pfnOpenDialAsst;
+
+ // Load the TAPI DLL for the dial info dialog
+ hinstTapi = LoadLibrary(c_szTapiDLL);
+ if (ISVALIDHINSTANCE(hinstTapi))
+ {
+ pfnOpenDialAsst = (OPENDIALASSTPROC)GetProcAddress(hinstTapi, "LOpenDialAsst");
+
+ if (pfnOpenDialAsst)
+ {
+ BOOL bShowDlg = FALSE;
+
+ pfnDialInited = (DIALINITEDPROC)GetProcAddress(hinstTapi, "LAddrParamsInited");
+ if (pfnDialInited)
+ {
+ // Did the function succeed?
+ DWORD dwInited;
+ if (0 == pfnDialInited(&dwInited))
+ {
+ // Yes; is tapi initialized or should we always
+ // show the dialog?
+ bShowDlg = (0 == dwInited || !bMiniDlg);
+
+ // Is tapi uninitialized?
+ if (0 == dwInited)
+ {
+ // Yes; always show the mini-dialog to initialize
+ bMiniDlg = TRUE;
+ }
+ }
+ }
+
+ if (bShowDlg)
+ {
+ // Invoke the dialog
+ pfnOpenDialAsst(hwndOwner, NULL, bMiniDlg, bSilentInstall);
+ }
+ }
+ FreeLibrary(hinstTapi);
+ }
+ }
+
+
+//-----------------------------------------------------------------------------------
+// DeviceInstaller wrappers and support functions
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the given device data is one of the
+ detected modems in a set.
+
+ This function, paired with CplDiMarkModem, uses
+ the devParams.ClassInstallReserved field to determine
+ this. This is not a hack -- this is what the field
+ is for.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiIsModemMarked(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN DWORD dwMarkFlags) // MARKF_*
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, pdevData, &devParams))
+ {
+ if (IsFlagSet(devParams.ClassInstallReserved, dwMarkFlags))
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Remembers this device instance as a detected modem
+ during this detection session.
+
+Returns: --
+Cond: --
+*/
+void
+PUBLIC
+CplDiMarkModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN DWORD dwMarkFlags) // MARKF_*
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, pdevData, &devParams))
+ {
+ // Use the ClassInstallReserved field as a boolean indicator
+ // of whether this device in the device set is detected.
+ SetFlag(devParams.ClassInstallReserved, dwMarkFlags);
+ CplDiSetDeviceInstallParams(hdi, pdevData, &devParams);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Enumerates all the devices in the devinfo set and
+ unmarks any devices that were previously marked as
+ detected.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+CplDiUnmarkModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN DWORD dwMarkFlags) // MARKF_*
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, pdevData, &devParams))
+ {
+ // Clear the ClassInstallReserved field
+ ClearFlag(devParams.ClassInstallReserved, dwMarkFlags);
+ CplDiSetDeviceInstallParams(hdi, pdevData, &devParams);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Enumerates all the devices in the devinfo set and
+ unmarks any devices that were previously marked as
+ detected.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+CplDiUnmarkAllModems(
+ IN HDEVINFO hdi,
+ IN DWORD dwMarkFlags) // MARKF_*
+ {
+ SP_DEVINFO_DATA devData;
+ SP_DEVINSTALL_PARAMS devParams;
+ DWORD iDevice = 0;
+
+ DBG_ENTER(CplDiUnmarkAllModems);
+
+ devData.cbSize = sizeof(devData);
+ devParams.cbSize = sizeof(devParams);
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ if (IsEqualGUID(&devData.ClassGuid, g_pguidModem) &&
+ CplDiGetDeviceInstallParams(hdi, &devData, &devParams))
+ {
+ // Clear the ClassInstallReserved field
+ ClearFlag(devParams.ClassInstallReserved, dwMarkFlags);
+ CplDiSetDeviceInstallParams(hdi, &devData, &devParams);
+ }
+ }
+ DBG_EXIT(CplDiUnmarkAllModems);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns TRUE if the device key is a local connection.
+ A "local connection" is a logical modem device that
+ represents a cable connection, used by programs such
+ as the Direct Cable Connection applet.
+
+ This function determines the modem device type by
+ comparing HardwareIDs.
+
+ If the modem device is a local connection, *pnPortSubclass
+ is set to PORT_SUBCLASS_SERIAL or PORT_SUBCLASS_PARALLEL.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiIsLocalConnection(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT LPBYTE pnPortSubclass) OPTIONAL
+ {
+ BOOL bRet;
+
+#ifdef WINNT
+
+ // There is no DCC on NT SUR.
+ bRet = FALSE;
+
+#else
+
+ TCHAR szHardwareID[MAX_BUF_MED];
+
+ // Get the hardware ID for the modem device
+ bRet = CplDiGetHardwareID(hdi, pdevData, NULL, szHardwareID, sizeof(szHardwareID), NULL);
+ if (bRet)
+ {
+ bRet = (IsSzEqual(szHardwareID, c_szHardwareIDSerial) ||
+ IsSzEqual(szHardwareID, c_szHardwareIDParallel));
+
+ if (bRet && pnPortSubclass)
+ {
+ if (IsSzEqual(szHardwareID, c_szHardwareIDSerial))
+ {
+ *pnPortSubclass = PORT_SUBCLASS_SERIAL;
+ }
+ else
+ {
+ ASSERT(IsSzEqual(szHardwareID, c_szHardwareIDParallel));
+
+ *pnPortSubclass = PORT_SUBCLASS_PARALLEL;
+ }
+ }
+ }
+
+#endif // WINNT
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Installs a modem that is compatible with the specified
+ DeviceInfoData.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+InstallCompatModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN BOOL bInstallLocalOnly)
+ {
+ BOOL bRet = TRUE; // Default success
+ SP_DRVINFO_DATA drvData;
+
+ ASSERT(pdevData);
+
+ DBG_ENTER(InstallCompatModem);
+
+ MyYield();
+
+ // Only install it if it has a selected driver. (Other modems
+ // that were already installed in a different session may be
+ // in this device info set. We don't want to reinstall them!)
+
+ drvData.cbSize = sizeof(drvData);
+ if (CplDiIsModemMarked(hdi, pdevData, MARKF_INSTALL) &&
+ CplDiGetSelectedDriver(hdi, pdevData, &drvData))
+ {
+ // Install the driver
+ if (FALSE == bInstallLocalOnly || CplDiIsLocalConnection(hdi, pdevData, NULL))
+ {
+ bRet = CplDiCallClassInstaller(DIF_INSTALLDEVICE, hdi, pdevData);
+
+ CplDiUnmarkModem(hdi, pdevData, MARKF_INSTALL);
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(InstallCompatModem, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Calls the class installer to install the modem.
+
+Returns: TRUE if at least one modem was installed or if
+ there were no new modems at all
+
+Cond: Caller should protect this function with CM_Lock
+ and CM_Unlock (Win95 only).
+*/
+BOOL
+PUBLIC
+CplDiInstallModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN BOOL bLocalOnly)
+ {
+ BOOL bRet;
+ int cFailed = 0;
+ int cNewModems;
+ HCURSOR hcur = SetCursor(LoadCursor(NULL, IDC_WAIT));
+
+ DBG_ENTER(CplDiInstallModem);
+
+ if (pdevData)
+ {
+ // Install the given DeviceInfoData
+ cNewModems = 1;
+ if ( !InstallCompatModem(hdi, pdevData, bLocalOnly) )
+ {
+ cFailed = 1;
+ }
+ }
+ else
+ {
+ DWORD iDevice;
+ SP_DEVINFO_DATA devData;
+
+ cNewModems = 0;
+
+ // Enumerate all the DeviceInfoData elements in this device set
+ devData.cbSize = sizeof(devData);
+ iDevice = 0;
+
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ // Was the install successful?
+ if ( !InstallCompatModem(hdi, &devData, bLocalOnly) )
+ {
+ // No
+ cFailed++;
+ }
+ cNewModems++;
+ }
+ }
+
+ SetCursor(hcur);
+
+ bRet = (cFailed < cNewModems || 0 == cNewModems);
+
+ DBG_EXIT_BOOL_ERR(CplDiInstallModem, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function gets the device info set for the modem
+ class. The set may be empty, which means there are
+ no modems currently installed.
+
+ The parameter pbInstalled is set to TRUE if there
+ is a modem installed on the system.
+
+Returns: TRUE a set is created
+ FALSE
+
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiGetModemDevs(
+ OUT HDEVINFO FAR * phdi,
+ IN HWND hwnd, OPTIONAL
+ IN DWORD dwFlags, // DIGCF_ bit field
+ OUT BOOL FAR * pbInstalled) OPTIONAL
+ {
+ BOOL bRet;
+ HDEVINFO hdi;
+
+ DBG_ENTER(CplDiGetModemDevs);
+
+ ASSERT(phdi);
+
+ hdi = CplDiGetClassDevs(g_pguidModem, NULL, hwnd, dwFlags);
+ if (INVALID_HANDLE_VALUE != hdi)
+ {
+ SP_DEVINFO_DATA devData;
+
+ // Is there a modem present on the system?
+ devData.cbSize = sizeof(devData);
+ bRet = CplDiEnumDeviceInfo(hdi, 0, &devData);
+ if (pbInstalled)
+ {
+ *pbInstalled = bRet;
+ }
+
+ SetLastError(NO_ERROR);
+ }
+
+ *phdi = hdi;
+ bRet = (INVALID_HANDLE_VALUE != *phdi);
+
+ DBG_EXIT_BOOL_ERR(CplDiGetModemDevs, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function gets the logical config for the given
+ ConfigMgr device instance. If the logical config
+ does not exist and bCreate is TRUE, this function
+ will create an empty logical config.
+
+Returns: CR_SUCCESS
+ some ConfigMgr error
+
+Cond: --
+*/
+CONFIGRET
+PRIVATE
+CMGetLogicalConfig(
+ OUT PLOG_CONF plogconf,
+ IN DEVINST dnDevInst,
+ IN BOOL bCreate)
+ {
+ CONFIGRET cr;
+
+ // Get the logical config for this device instance
+ cr = CM_Get_First_Log_Conf(plogconf, dnDevInst, BOOT_LOG_CONF);
+ if (CR_SUCCESS != cr && bCreate)
+ {
+ // It seems we couldn't get a logical config. So create
+ // an empty one.
+
+ cr = CM_Add_Empty_Log_Conf(plogconf, dnDevInst, LCPRI_NORMAL, BOOT_LOG_CONF);
+ }
+
+ return cr;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function returns the modem detection signature
+ of the given DeviceInfoData.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiGetDetectSignature(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT PMODEM_DETECT_SIG pmds)
+ {
+ BOOL bRet;
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_ENTER(CplDiGetDetectSignature);
+#endif
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pmds);
+
+ if (sizeof(*pmds) != pmds->cbSize)
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+ else
+ {
+ CONFIGRET cr;
+ LOG_CONF logconf;
+
+ // Get the logical config for this device instance
+ cr = CMGetLogicalConfig(&logconf, pdevData->DevInst, FALSE);
+ if (CR_SUCCESS == cr)
+ {
+ RESOURCEID restype;
+ RES_DES resdes;
+ PCS_DES pcsdes;
+ DWORD cbSizeT;
+
+ // Get the resource descriptor handle for this logical config
+ //
+ // NOTE: unlike the name of this function, this function will
+ // return the same resdes on repeated calls. So do not
+ // call this function with the expectation that it will
+ // eventually return "no more resdes values".
+ //
+ cr = CM_Get_Next_Res_Des(&resdes, logconf, ResType_ClassSpecific,
+ &restype, 0);
+ if (CR_SUCCESS == cr)
+ {
+ // Get the size of the detection signature
+ cr = CM_Get_Res_Des_Data_Size(&cbSizeT, resdes, 0);
+ if (CR_SUCCESS == cr)
+ {
+ if (0 == cbSizeT)
+ {
+ // This should never happen
+ ASSERT(0);
+ cr = CR_FAILURE;
+ SetLastError(ERROR_INVALID_DATA);
+ }
+ else
+ {
+ // Allocate a temporary buffer
+ pcsdes = (PCS_DES)LocalAlloc(LPTR, cbSizeT);
+
+ if ( !pcsdes )
+ {
+ // Out of memory
+ cr = CR_OUT_OF_MEMORY;
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ }
+ else
+ {
+ // Get the data
+ cr = CM_Get_Res_Des_Data(resdes, pcsdes, cbSizeT, 0);
+ if (CR_SUCCESS == cr)
+ {
+ BltByte(pmds, pcsdes->CSD_Signature, pmds->cbSize);
+ }
+
+ LocalFree(LOCALOF(pcsdes));
+ }
+ }
+ }
+ }
+ }
+
+ bRet = (CR_SUCCESS == cr);
+ }
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_EXIT_BOOL_ERR(CplDiGetDetectSignature, bRet);
+#endif
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function sets the modem detection signature
+ of the given DeviceInfoData.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiSetDetectSignature(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PMODEM_DETECT_SIG pmds)
+ {
+ BOOL bRet;
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_ENTER(CplDiSetDetectSignature);
+#endif
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+ ASSERT(pmds);
+
+ if ( !pmds || sizeof(*pmds) != pmds->cbSize || !pdevData )
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+ else
+ {
+ CONFIGRET cr;
+ LOG_CONF logconf;
+
+ cr = CMGetLogicalConfig(&logconf, pdevData->DevInst, TRUE);
+ if (CR_SUCCESS != cr)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ // (The size of the detection signature is our detection signature
+ // plus the size of the CS_DES header)
+ PCS_DES pcsdes;
+ DWORD cbAlloc = sizeof(*pcsdes) + pmds->cbSize;
+
+ pcsdes = (PCS_DES)LocalAlloc(LPTR, cbAlloc);
+ if ( !pcsdes )
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ }
+ else
+ {
+ RES_DES resdes;
+ RESOURCEID restype;
+
+ pcsdes->CSD_SignatureLength = pmds->cbSize;
+ BltByte(&pcsdes->CSD_ClassGuid, g_pguidModem, sizeof(GUID));
+ BltByte(pcsdes->CSD_Signature, pmds, pmds->cbSize);
+
+ // Set the resource description. Adding a resource
+ // description when one already exists will fail. So
+ // first try to add one. If that fails, get an existing
+ // resource description so we can modify it.
+ //
+ // BUGBUG (scotth):
+ // You'd think we'd do the opposite -- ie, if "get" fails,
+ // try "adding". It turns out CM_Get_Next_Res_Des
+ // always returns success even when nothing is there.
+ // This is by design for SUR. We'll want to change
+ // this later, because we won't want to continually
+ // add resource descriptions -- we'll want to replace
+ // it.
+
+ // Did we fail to add a new resource description?
+ cr = CM_Add_Res_Des(&resdes,
+ logconf,
+ ResType_ClassSpecific,
+ pcsdes,
+ cbAlloc - sizeof(pcsdes->CSD_Signature),
+ 0);
+ if (CR_SUCCESS != cr)
+ {
+ // Yes; get the existing one
+ cr = CM_Get_Next_Res_Des(&resdes, logconf, ResType_ClassSpecific,
+ &restype, 0);
+
+ if (CR_SUCCESS == cr)
+ {
+ // Modify it
+ cr = CM_Modify_Res_Des(&resdes,
+ resdes,
+ ResType_ClassSpecific,
+ pcsdes,
+ cbAlloc - sizeof(pcsdes->CSD_Signature),
+ 0);
+ }
+ }
+
+ bRet = (CR_SUCCESS == cr);
+ if (bRet)
+ {
+ SetLastError(NO_ERROR);
+ }
+
+ LocalFree(LOCALOF(pcsdes));
+ }
+ }
+ }
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_EXIT_BOOL_ERR(CplDiSetDetectSignature, bRet);
+#endif
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Take a hardware ID and copy it to the supplied buffer.
+ This function changes all backslashes to ampersands.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiCopyScrubbedHardwareID(
+ OUT LPTSTR pszBuf,
+ IN LPCTSTR pszIDList, // Multi string
+ IN DWORD cbSize)
+ {
+ BOOL bRet;
+ LPTSTR psz;
+ LPCTSTR pszID;
+ BOOL bCopied;
+
+ ASSERT(pszBuf);
+ ASSERT(pszIDList);
+
+ bCopied = FALSE;
+ bRet = TRUE;
+
+ // Choose the first, best compatible ID. If we cannot find
+ // one, choose the first ID, and scrub it so it doesn't have
+ // any backslahes.
+
+ for (pszID = pszIDList; 0 != *pszID; pszID += lstrlen(pszID) + 1)
+ {
+ // Is the buffer big enough?
+ if (CbFromCch(lstrlen(pszID)) >= cbSize)
+ {
+ // No
+ bRet = FALSE;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ break;
+ }
+ else
+ {
+ // Yes; are there any backslashes?
+ for (psz = (LPTSTR)pszID; 0 != *psz; psz = CharNext(psz))
+ {
+ if ('\\' == *psz)
+ {
+ break;
+ }
+ }
+
+ if (0 == *psz)
+ {
+ // No; use this ID
+ lstrcpy(pszBuf, pszID);
+ bCopied = TRUE;
+ break;
+ }
+ }
+ }
+
+ // Was an ID found in the list that does not have a backslash?
+ if (bRet && !bCopied)
+ {
+ // No; use the first one and scrub it.
+ lstrcpy(pszBuf, pszIDList);
+
+ // Clean up the hardware ID. Some hardware IDs may
+ // have an additional level to them (eg, PCMCIA\xxxxxxx).
+ // We must change this sort of ID to PCMCIA&xxxxxxx.
+ for (psz = pszBuf; 0 != *psz; psz = CharNext(psz))
+ {
+ if ('\\' == *psz)
+ {
+ *psz = '&';
+ }
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function returns the rank-0 (the first) hardware
+ ID of the given DriverInfoData.
+
+ If no DriverInfoData is provided, this function will
+ use the selected driver. If there is no selected
+ driver, this function fails.
+
+Returns: TRUE on success
+ FALSE if the buffer is too small or another error
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiGetHardwareID(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ OUT LPTSTR pszHardwareIDBuf,
+ IN DWORD cbSize,
+ OUT LPDWORD pcbSizeOut) OPTIONAL
+ {
+ BOOL bRet;
+ PSP_DRVINFO_DETAIL_DATA pdrvDetail;
+ SP_DRVINFO_DATA drvData;
+ DWORD cbSizeT;
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_ENTER(CplDiGetHardwareID);
+#endif
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pszHardwareIDBuf);
+
+ if ( !pdrvData )
+ {
+ pdrvData = &drvData;
+
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(hdi, pdevData, &drvData);
+ }
+ else
+ {
+ bRet = TRUE;
+ }
+
+ if (bRet)
+ {
+ // Get the driver detail so we can get the HardwareID of
+ // the selected driver
+ CplDiGetDriverInfoDetail(hdi, pdevData, pdrvData, NULL, 0, &cbSizeT);
+
+ ASSERT(0 < cbSizeT);
+
+ pdrvDetail = (PSP_DRVINFO_DETAIL_DATA)LocalAlloc(LPTR, cbSizeT);
+ if ( !pdrvDetail )
+ {
+ // Out of memory
+ bRet = FALSE;
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ }
+ else
+ {
+ pdrvDetail->cbSize = sizeof(*pdrvDetail);
+ bRet = CplDiGetDriverInfoDetail(hdi, pdevData, pdrvData, pdrvDetail,
+ cbSizeT, NULL);
+ if (bRet)
+ {
+ // Is the buffer big enough?
+ bRet = CplDiCopyScrubbedHardwareID(pszHardwareIDBuf, pdrvDetail->HardwareID, cbSize);
+
+ if (pcbSizeOut)
+ {
+ // Return the required size
+ *pcbSizeOut = CbFromCch(lstrlen(pdrvDetail->HardwareID));
+ }
+ }
+ LocalFree(LOCALOF(pdrvDetail));
+ }
+ }
+
+#ifndef PROFILE_MASSINSTALL
+ DBG_EXIT_BOOL_ERR(CplDiGetHardwareID, bRet);
+#endif
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates a DeviceInfoData for a modem. This function is
+ used when the caller has a DeviceInfoSet and a selected
+ driver from the global class driver list, but no real
+ DeviceInfoData in the device-set.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PRIVATE
+CplDiCreateInheritDeviceInfo(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN HWND hwndOwner, OPTIONAL
+ OUT PSP_DEVINFO_DATA pdevDataOut)
+ {
+ BOOL bRet;
+ SP_DRVINFO_DATA drvData;
+ TCHAR szHardwareID[MAX_BUF_MED];
+
+ DBG_ENTER(CplDiCreateInheritDeviceInfo);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevDataOut);
+
+ // Get the selected driver
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(hdi, pdevData, &drvData);
+ if (bRet)
+ {
+ // Was a window owner supplied?
+ if (NULL == hwndOwner)
+ {
+ // No; use the window owner of the DeviceInfoData to be cloned.
+ SP_DEVINSTALL_PARAMS devParams;
+
+ devParams.cbSize = sizeof(devParams);
+ CplDiGetDeviceInstallParams(hdi, pdevData, &devParams);
+
+ hwndOwner = devParams.hwndParent;
+ }
+
+ // Get the hardware ID
+ bRet = CplDiGetHardwareID(hdi, pdevData, &drvData, szHardwareID, sizeof(szHardwareID), NULL);
+ // (Our buffer should be big enough)
+ ASSERT(bRet);
+
+ if (bRet)
+ {
+ // Create a DeviceInfoData. The Device Instance ID will be
+ // something like: Root\UNIMODEMxxxxxx\0000. We just supply
+ // the UNIMODEMxxxxx, which is the hardware ID. The device
+ // instance will inherit the driver settings of the global
+ // class driver list.
+
+ bRet = CplDiCreateDeviceInfo(hdi, szHardwareID, g_pguidModem,
+ drvData.Description, hwndOwner,
+ DICD_GENERATE_ID | DICD_INHERIT_CLASSDRVS,
+ pdevDataOut);
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiCreateInheritDeviceInfo, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates a device instance that is compatible with the
+ given hardware ID.
+
+ This function can also obtain a device description of
+ the device instance.
+
+ If there is no compatible device, this function
+ returns FALSE.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiCreateCompatibleDeviceInfo(
+ IN HDEVINFO hdi,
+ IN LPCTSTR pszHardwareID,
+ IN LPCTSTR pszDeviceDesc, OPTIONAL
+ OUT LPTSTR pszDeviceDescBuf, OPTIONAL
+ IN DWORD cchBuf, OPTIONAL
+ OUT PSP_DEVINFO_DATA pdevDataOut)
+ {
+ BOOL bRet;
+
+ DBG_ENTER(CplDiCreateCompatibleDeviceInfo);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pszHardwareID);
+ ASSERT(pdevDataOut);
+
+ // Create a phantom device instance
+ bRet = CplDiCreateDeviceInfo(hdi, pszHardwareID, g_pguidModem,
+ pszDeviceDesc, NULL, DICD_GENERATE_ID,
+ pdevDataOut);
+
+ if (bRet)
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+ TCHAR szHardwareID[MAX_BUF_MED];
+ int cch = lstrlen(pszHardwareID);
+
+ // Set the flag to focus on only classes that pertain to
+ // modems. This will keep CplDiBuildDriverInfoList from
+ // slowing down any further once more INF files are added.
+ //
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, pdevDataOut, &devParams))
+ {
+ // Specify using our GUID to make things a little faster.
+ SetFlag(devParams.FlagsEx, DI_FLAGSEX_USECLASSFORCOMPAT);
+
+ // Set the Select Device parameters
+ CplDiSetDeviceInstallParams(hdi, pdevDataOut, &devParams);
+ }
+
+ // Set the HardwareID so some sort of compatible driver list
+ // can be built. Don't forget the szHardwareID is a
+ // multi-string, so it needs the double-null termination.
+ lstrcpyn(szHardwareID, pszHardwareID, SIZECHARS(szHardwareID));
+ szHardwareID[cch+1] = 0; // second null terminator
+
+ bRet = CplDiSetDeviceRegistryProperty(hdi, pdevDataOut,
+ SPDRP_HARDWAREID,
+ (CONST BYTE *)szHardwareID,
+ CbFromCch(cch+2));
+
+ if (bRet)
+ {
+ // Build the compatible driver list
+ bRet = CplDiBuildDriverInfoList(hdi, pdevDataOut, SPDIT_COMPATDRIVER);
+ if (bRet)
+ {
+ SP_DRVINFO_DATA drvDataEnum;
+
+ // Use the first driver as the compatible driver.
+
+ drvDataEnum.cbSize = sizeof(drvDataEnum);
+
+ bRet = CplDiEnumDriverInfo(hdi, pdevDataOut,
+ SPDIT_COMPATDRIVER, 0,
+ &drvDataEnum);
+
+ if (bRet)
+ {
+ // Set the first driver as the selected driver
+ bRet = CplDiSetSelectedDriver(hdi, pdevDataOut, &drvDataEnum);
+
+ if (bRet)
+ {
+ if ( !pszDeviceDesc )
+ {
+ // Set the device description now that we
+ // have one
+ CplDiSetDeviceRegistryProperty(hdi, pdevDataOut,
+ SPDRP_DEVICEDESC, (LPBYTE)drvDataEnum.Description,
+ CbFromCch(lstrlen(drvDataEnum.Description)+1));
+ }
+
+ if (pszDeviceDescBuf)
+ {
+ // Copy the device description for a return value
+ lstrcpyn(pszDeviceDescBuf, drvDataEnum.Description, cchBuf);
+ }
+ }
+ }
+ }
+ }
+
+ // Did something fail above?
+ if ( !bRet )
+ {
+ // Yes; delete the device info we just created
+ CplDiDeleteDeviceInfo(hdi, pdevDataOut);
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiCreateCompatibleDeviceInfo, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function sets the integer in the given array
+ that is indexed by the numeric value of the friendly
+ name instance to TRUE.
+
+Returns: TRUE on success
+ FALSE otherwise
+
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiRecordNameInstance(
+ IN LPCTSTR pszFriendlyName,
+ IN OUT WORD FAR * lpwNameArray)
+{
+ BOOL bRet = FALSE;
+ LPTSTR szInstance, psz;
+ int iInstance, ii;
+
+ ASSERT(pszFriendlyName);
+ ASSERT(*pszFriendlyName);
+
+ if (szInstance = AnsiRChr(pszFriendlyName, '#'))
+ {
+ szInstance = CharNext(szInstance);
+
+ if (*szInstance == 0)
+ return FALSE;
+
+ // Make sure that everything following '#' is numeric.
+ for (psz = szInstance; *psz; psz = CharNext(psz))
+ {
+ ii = (int)*psz;
+ if (ii < '0' || ii > '9')
+ {
+ goto exit;
+ }
+ }
+
+ // Have an instance number on the friendly name. Record it.
+ bRet = AnsiToInt(szInstance, &iInstance);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "AnsiToInt() failed");
+ return FALSE;
+ }
+
+ if (iInstance >= MAX_INSTALLATIONS - 1)
+ {
+ TRACE_MSG(TF_ERROR, "Too many drivers installed.");
+ return FALSE;
+ }
+
+ lpwNameArray[iInstance] = TRUE;
+ return TRUE;
+ }
+
+exit:
+ lpwNameArray[1] = TRUE;
+ return TRUE;
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function
+
+Returns: FALSE on error - couldn't mark for mass install.
+ TRUE if successful.
+
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiMarkForMassInstall(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DRVINFO_DATA pdrvData)
+{
+ BOOL bRet = FALSE; // assume failure
+ SP_DRVINSTALL_PARAMS drvParams;
+
+ drvParams.cbSize = sizeof(drvParams);
+ bRet = CplDiGetDriverInstallParams(hdi, pdevData, pdrvData, &drvParams);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetDriverInstallParams() failed: %#08lx", GetLastError());
+ goto exit;
+ }
+
+ drvParams.PrivateData = (DWORD)&g_wUsedNameArray[0];
+ CplDiSetDriverInstallParams(hdi, pdevData, pdrvData, &drvParams);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiSetDriverInstallParams() failed: %#08lx", GetLastError());
+ goto exit;
+ }
+
+ CplDiMarkModem(hdi, pdevData, MARKF_MASS_INSTALL);
+ bRet = TRUE;
+
+exit:
+ return bRet;
+}
+
+
+/*----------------------------------------------------------
+Purpose: This function processes the set of modems that are
+ already installed looking for a duplicate of the
+ selected driver. Ports on which the device has been
+ installed previously are removed from the given
+ ports list. A list is created of the friendly name
+ instance numbers that are already in use. Selected
+ driver is marked for mass install barring fatal
+ error.
+
+NOTE: This function will return FALSE and avoid the mass
+ install at the slighest hint of an error condition.
+ Mass install is just an optimization - if it can't
+ be done successfully it shouldn't be attempted.
+
+Returns: TRUE if successful. Selected Driver marked for mass
+ install (whether or not there were dups).
+ FALSE on fatal error - not able to process for dups.
+
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiPreProcessDups(
+ IN HDEVINFO hdi,
+ IN HWND hwndOwner, OPTIONAL
+ IN OUT LPTSTR FAR * ppszPortList, // Multi-string
+ OUT PSP_DEVINFO_DATA pdevData,
+ OUT DWORD FAR * lpcDups,
+ OUT DWORD FAR * lpdwFlags)
+{
+ BOOL bRet, bHaveDev;
+ SP_DEVINFO_DATA devDataEnum;
+ SP_DRVINFO_DATA drvData;
+ HDEVINFO hdiClass = NULL;
+ HKEY hkey = NULL;
+ TCHAR szDescrNew[LINE_LEN];
+ TCHAR szDescrEnum[LINE_LEN];
+ TCHAR szMfactNew[LINE_LEN];
+ TCHAR szMfactEnum[LINE_LEN];
+ TCHAR szProvNew[LINE_LEN];
+ TCHAR szProvEnum[LINE_LEN];
+ TCHAR szOnPort[LINE_LEN];
+ TCHAR szFriendlyName[LINE_LEN];
+ DWORD iIndex, cbData, iArrIdx, cbPortList;
+ LONG lErr;
+ WORD cPorts, wPortIndexArray[MAX_INSTALLATIONS];
+ LPTSTR pszPort, pszNewPort;
+ LPTSTR pszNewPortList = NULL;
+
+ DBG_ENTER(CplDiPreProcessDups);
+
+ ASSERT(lpcDups);
+ ASSERT(lpdwFlags);
+
+ *lpcDups = 0;
+
+ // Get the DEVINFO_DATA for the selected driver and retrieve it's
+ // identifying info (description, manufacturer, provider).
+
+ // We have a DeviceInfoSet and a selected driver. But we have no
+ // real DeviceInfoData. Given the DeviceInfoSet, the selected driver,
+ // and the global class driver list, ....
+ pdevData->cbSize = sizeof(*pdevData);
+ bRet = CplDiCreateInheritDeviceInfo(hdi, NULL, hwndOwner, pdevData);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiCreateInheritDeviceInfo() failed: %#08lx", GetLastError());
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Get the DRVINFO_DATA for the selected driver.
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(hdi, pdevData, &drvData);
+ if (!bRet)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetSelectedDriver() failed: %#08lx", GetLastError());
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Assume failure at some point below.
+ bRet = FALSE;
+
+ hdiClass = CplDiGetClassDevs(g_pguidModem, NULL, NULL, 0);
+ if (hdiClass == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiGetClassDevs() failed: %#08lx", GetLastError());
+ hdiClass = NULL;
+ goto exit;
+ }
+
+ lstrcpyn(szDescrNew, drvData.Description, SIZECHARS(szDescrNew));
+ lstrcpyn(szMfactNew, drvData.MfgName, SIZECHARS(szMfactNew));
+ lstrcpyn(szProvNew, drvData.ProviderName, SIZECHARS(szProvNew));
+
+ if (!szDescrNew[0])
+ {
+ TRACE_MSG(TF_ERROR, "FAILED to get description for selected driver.");
+ goto exit;
+ }
+
+ ZeroMemory(wPortIndexArray, sizeof(wPortIndexArray));
+ ZeroMemory(g_wUsedNameArray, sizeof(g_wUsedNameArray));
+
+ // Look through all installed modem devices for instances
+ // of the selected driver.
+ devDataEnum.cbSize = sizeof(devDataEnum);
+ for (iIndex = 0, iArrIdx = 0;
+ CplDiEnumDeviceInfo(hdiClass, iIndex, &devDataEnum);
+ iIndex++)
+ {
+ hkey = CplDiOpenDevRegKey(hdiClass, &devDataEnum, DICS_FLAG_GLOBAL, 0,
+ DIREG_DRV, KEY_READ);
+ if (hkey == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiOpenDevRegKey() failed: %#08lx", GetLastError());
+ ASSERT(0);
+ hkey = NULL;
+ goto exit;
+ }
+
+ // The driver description should always exist in the driver key.
+ cbData = sizeof(szDescrEnum);
+ lErr = RegQueryValueEx(hkey, REGSTR_VAL_DRVDESC, NULL, NULL,
+ (LPBYTE)szDescrEnum, &cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR,
+ "Failed to read driver description from REG driver node. (%#08lx)",
+ lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ if (!IsSzEqual(szDescrNew, szDescrEnum))
+ continue;
+
+ // The manufacturer may be a NULL string, but it should always exist
+ // in the driver key.
+ cbData = sizeof(szMfactEnum);
+ lErr = RegQueryValueEx(hkey, c_szManufacturer, NULL, NULL,
+ (LPBYTE)szMfactEnum, &cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR,
+ "Failed to read manufacturer from REG driver node. (%#08lx)",
+ lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ if (!IsSzEqual(szMfactNew, szMfactEnum))
+ continue;
+
+ // The provider may be a NULL string or it may not be in the registry.
+ cbData = sizeof(szProvEnum);
+ lErr = RegQueryValueEx(hkey, REGSTR_VAL_PROVIDER_NAME, NULL, NULL,
+ (LPBYTE)szProvEnum, &cbData);
+ if (lErr == ERROR_SUCCESS)
+ {
+ if (!IsSzEqual(szProvNew, szProvEnum))
+ continue;
+ }
+ else
+ {
+ if (!IsSzEqual(szProvNew, TEXT("\0")))
+ continue;
+ }
+
+ // The description, manufacturer, and provider strings matched those
+ // of the new modem. We've found a previously installed instance.
+ (*lpcDups)++;
+
+ // See what port it's on so it can be removed from the install ports
+ // list.
+ cbData = sizeof(szOnPort);
+ lErr = RegQueryValueEx(hkey, c_szAttachedTo, NULL, NULL,
+ (LPBYTE)szOnPort, &cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR,
+ "Failed to read port from REG driver node. (%#08lx)",
+ lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // Try to find this port in the install ports list.
+ for (pszPort = *ppszPortList, cPorts = 1;
+ *pszPort != 0;
+ pszPort += lstrlen(pszPort) + 1, cPorts++)
+ {
+ // If it's already on a port that we're trying to (re)install
+ // it on, remember the portlist index so it can be removed
+ // later. Remember the index as *1-based* so that the array of
+ // saved indices can be processed by stopping at 0.
+ if (IsSzEqual(szOnPort, pszPort))
+ {
+ wPortIndexArray[iArrIdx] = cPorts;
+ if (iArrIdx == MAX_INSTALLATIONS - 2)
+ {
+ TRACE_MSG(TF_ERROR, "Too many drivers installed.");
+ goto exit;
+ }
+ iArrIdx++;
+ break;
+ }
+ }
+
+ // Read the friendly name and add it to the list of used names.
+ cbData = sizeof(szFriendlyName);
+ lErr = RegQueryValueEx(hkey, c_szFriendlyName, NULL, NULL,
+ (LPBYTE)szFriendlyName, &cbData);
+ if (lErr != ERROR_SUCCESS)
+ {
+ TRACE_MSG(TF_ERROR,
+ "Failed to read friendly name from REG driver node. (%#08lx)",
+ lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ if (!CplDiRecordNameInstance(szFriendlyName, g_wUsedNameArray))
+ {
+ TRACE_MSG(TF_ERROR, "CplDiRecordNameInstance() failed.");
+ goto exit;
+ }
+ }
+
+ // Check for failed CplDiEnumDeviceInfo().
+ if ((lErr = GetLastError()) != ERROR_NO_MORE_ITEMS)
+ {
+ TRACE_MSG(TF_ERROR, "CplDiEnumDeviceInfo() failed: %#08lx", lErr);
+ ASSERT(0);
+ goto exit;
+ }
+
+ // If the device is already installed on ports that the user has
+ // selected to install on, create and return a new ports list that
+ // doesn't contain those duplicate ports.
+ if (wPortIndexArray[0])
+ {
+ // Figure out the size of the passed in ports list and allocate
+ // a new list of the same size.
+ for (pszPort = *ppszPortList, cbPortList = 0;
+ *pszPort != 0;
+ pszPort += lstrlen(pszPort) + 1)
+ {
+ cbPortList += CbFromCch(lstrlen(pszPort)+1);
+ }
+ cbPortList += CbFromCch(1); // double null terminator
+
+ if (!(pszNewPortList = (LPTSTR)LocalAlloc(LPTR, cbPortList)))
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ goto exit;
+ }
+
+ // Copy the old ports list to the new one, removing any ports that
+ // the device is already installed on.
+ for (pszPort = *ppszPortList, pszNewPort = pszNewPortList, iIndex = 1;
+ *pszPort != 0;
+ pszPort += lstrlen(pszPort) + 1, iIndex++)
+ {
+ // If this index isn't in the "forget it" list, write the port
+ // to the new ports list. NOTE: indices stored in the array
+ // are *not* in sequential order, so we search the whole list.
+ bHaveDev = FALSE;
+ for (iArrIdx = 0; wPortIndexArray[iArrIdx]; iArrIdx++)
+ {
+ if (wPortIndexArray[iArrIdx] == iIndex)
+ {
+ bHaveDev = TRUE;
+ break;
+ }
+ }
+ if (!bHaveDev)
+ {
+ lstrcpy(pszNewPort, pszPort);
+ pszNewPort += lstrlen(pszNewPort) + 1;
+ }
+ }
+
+ // NOTE: double NULL terminator on pszNewPortList is taken care of
+ // by virtue of the fact that we *shortened* the list.
+
+ // Free the old ports list and return the new one.
+ CatMultiString(ppszPortList, NULL);
+ }
+
+ // Pre-processing for duplicates has succeeded so this installation
+ // will be treated like a mass install (even if the number of ports
+ // remaining is < MIN_MULTIPORT).
+ bRet = CplDiMarkForMassInstall(hdi, pdevData, &drvData);
+ if (bRet)
+ {
+ SetFlag(*lpdwFlags, IMF_MASS_INSTALL);
+ if (pszNewPortList)
+ *ppszPortList = pszNewPortList;
+ }
+
+exit:
+ if (hdiClass)
+ {
+ CplDiDestroyDeviceInfoList(hdiClass);
+ }
+
+ if (hkey)
+ {
+ RegCloseKey(hkey);
+ }
+
+ if (!bRet)
+ {
+ CplDiDeleteDeviceInfo(hdi, pdevData);
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiPreProcessDups, bRet);
+ return bRet;
+}
+
+
+/*----------------------------------------------------------
+Purpose: Creates a device instance for a modem that includes
+ the entire class driver list. This function then
+ creates additional device instances that are cloned
+ quickly from the original
+
+Returns:
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiBuildModemDriverList(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ static TCHAR const FAR c_szProvider[] = REGSTR_VAL_PROVIDER_NAME; // TEXT("ProviderName");
+#pragma data_seg()
+
+ BOOL bRet;
+ SP_DRVINFO_DATA drvDataEnum;
+ SP_DEVINSTALL_PARAMS devParams;
+
+ DBG_ENTER(CplDiBuildModemDriverList);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+
+ // Build a global class driver list
+
+ // Set the flag to focus on only classes that pertain to
+ // modems. This will keep CplDiBuildDriverInfoList from
+ // slowing down any further once more INF files are added.
+ //
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, NULL, &devParams))
+ {
+ // Specify using our GUID to make things a little faster.
+ SetFlag(devParams.FlagsEx, DI_FLAGSEX_USECLASSFORCOMPAT);
+
+ // Set the Select Device parameters
+ CplDiSetDeviceInstallParams(hdi, NULL, &devParams);
+ }
+
+ bRet = CplDiBuildDriverInfoList(hdi, NULL, SPDIT_CLASSDRIVER);
+
+ if (bRet)
+ {
+ SP_DRVINFO_DATA drvData;
+ TCHAR szDescription[LINE_LEN];
+ TCHAR szMfgName[LINE_LEN];
+ TCHAR szProviderName[LINE_LEN];
+
+ // Get the information needed to search for a matching driver
+ // in the class driver list. We need three strings:
+ //
+ // Description
+ // MfgName
+ // ProviderName (optional)
+ //
+ // The Description and MfgName are properties of the device
+ // (SPDRP_DEVICEDESC and SPDRP_MFG). The ProviderName is
+ // stored in the driver key.
+
+ // Try getting this info from the selected driver first.
+ // Is there a selected driver?
+ drvData.cbSize = sizeof(drvData);
+ bRet = CplDiGetSelectedDriver(hdi, pdevData, &drvData);
+ if (bRet)
+ {
+ // Yes
+ lstrcpyn(szMfgName, drvData.MfgName, SIZECHARS(szMfgName));
+ lstrcpyn(szDescription, drvData.Description, SIZECHARS(szDescription));
+ lstrcpyn(szProviderName, drvData.ProviderName, SIZECHARS(szProviderName));
+ }
+ else
+ {
+ // No; grovel in the driver key
+ DWORD dwType;
+ HKEY hkey;
+
+ hkey = CplDiOpenDevRegKey(hdi, pdevData, DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_READ);
+ if (INVALID_HANDLE_VALUE == hkey)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ DWORD cbData = sizeof(szProviderName);
+
+ // Get the provider name
+ *szProviderName = 0;
+ RegQueryValueEx(hkey, c_szProvider, NULL, NULL,
+ (LPBYTE)szProviderName, &cbData);
+ RegCloseKey(hkey);
+
+ // Get the device description and manufacturer
+ bRet = CplDiGetDeviceRegistryProperty(hdi, pdevData,
+ SPDRP_DEVICEDESC, &dwType, (LPBYTE)szDescription,
+ sizeof(szDescription), NULL);
+
+ if (bRet)
+ {
+ bRet = CplDiGetDeviceRegistryProperty(hdi, pdevData,
+ SPDRP_MFG, &dwType, (LPBYTE)szMfgName,
+ sizeof(szMfgName), NULL);
+ }
+ }
+ }
+
+
+ // Could we get the search criteria?
+ if (bRet)
+ {
+ // Yes
+ DWORD iIndex = 0;
+
+ bRet = FALSE; // Assume there is no match
+
+ // Find the equivalent selected driver in this new
+ // compatible driver list, and set it as the selected
+ // driver for this new DeviceInfoData.
+
+ drvDataEnum.cbSize = sizeof(drvDataEnum);
+ while (CplDiEnumDriverInfo(hdi, NULL, SPDIT_CLASSDRIVER,
+ iIndex++, &drvDataEnum))
+ {
+ // Is this driver a match?
+ if (IsSzEqual(szDescription, drvDataEnum.Description) &&
+ IsSzEqual(szMfgName, drvDataEnum.MfgName) &&
+ (0 == *szProviderName ||
+ IsSzEqual(szProviderName, drvDataEnum.ProviderName)))
+ {
+ // Yes; set this as the selected driver
+ bRet = CplDiSetSelectedDriver(hdi, NULL, &drvDataEnum);
+ break;
+ }
+ }
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiBuildModemDriverList, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sets the modem detection signature (if there is one)
+ and registers the device instance.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiRegisterModem(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PMODEM_DETECT_SIG pmds, OPTIONAL
+ IN BOOL bFindDups,
+ OUT PDETECTSIG_PARAMS pparams) OPTIONAL
+ {
+ BOOL bRet;
+
+ DBG_ENTER(CplDiRegisterModem);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdevData);
+
+ if (pmds)
+ {
+ // Set the detection signature
+ bRet = CplDiSetDetectSignature(hdi, pdevData, pmds);
+ }
+ else
+ {
+ bRet = TRUE;
+ }
+
+ if (bRet)
+ {
+ DWORD dwFlags = bFindDups ? SPRDI_FIND_DUPS : 0;
+
+ // Register the device so it is not a phantom anymore
+#ifdef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "calling CplDiRegisterDeviceInfo() with SPRDI_FIND_DUPS = %#08lx", dwFlags);
+#endif
+ bRet = CplDiRegisterDeviceInfo(hdi, pdevData, dwFlags,
+ DetectSig_Compare, pparams, NULL);
+
+ if ( !bRet )
+ {
+ TRACE_MSG(TF_ERROR, "Failed to register the Device Instance. Error=%#08lx.", GetLastError());
+ }
+ else
+ {
+#ifdef PROFILE_MASSINSTALL
+ TRACE_MSG(TF_GENERAL, "Back from CplDiRegisterDeviceInfo().");
+#endif
+ // Mark it so it will be installed
+ CplDiMarkModem(hdi, pdevData, MARKF_INSTALL);
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiRegisterModem, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Takes a device instance and properly installs it.
+ This function assures that the device has a selected
+ driver and a detection signature. It also registers
+ the device instance.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+CplDiRegisterAndInstallModem(
+ IN HDEVINFO hdi,
+ IN HWND hwndOwner, OPTIONAL
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN LPCTSTR pszPort,
+ IN DWORD dwFlags)
+ {
+ BOOL bRet;
+ SP_DRVINFO_DATA drvData;
+ SP_DEVINFO_DATA devData;
+ int id;
+
+ DBG_ENTER(CplDiRegisterAndInstallModem);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pszPort);
+
+ // Create the devinfo data if it wasn't given.
+ if (!pdevData)
+ {
+ // We have a DeviceInfoSet and a selected driver. But we have no
+ // real DeviceInfoData. Given the DeviceInfoSet, the selected driver,
+ // the the global class driver list, create a DeviceInfoData that
+ // we can really install.
+ devData.cbSize = sizeof(devData);
+ bRet = CplDiCreateInheritDeviceInfo(hdi, NULL, hwndOwner, &devData);
+
+ if (bRet && IsFlagSet(dwFlags, IMF_MASS_INSTALL))
+ {
+ drvData.cbSize = sizeof(drvData);
+ CplDiGetSelectedDriver(hdi, NULL, &drvData);
+ CplDiMarkForMassInstall(hdi, &devData, &drvData);
+ }
+ }
+ else
+ {
+ devData = *pdevData; // (to avoid changing all references herein)
+ bRet = TRUE;
+ }
+
+ if ( !bRet )
+ {
+ // Some error happened. Tell the user.
+ id = MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_ERR_CANT_ADD_MODEM2),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OKCANCEL | MB_ICONINFORMATION);
+ if (IDCANCEL == id)
+ {
+ SetLastError(ERROR_CANCELLED);
+ }
+ }
+ else
+ {
+ TCHAR szHardwareID[MAX_BUF_MED];
+ MODEM_DETECT_SIG mds;
+ DWORD nErr = NO_ERROR;
+
+ // Get the hardwareID for the detection signature
+ bRet = CplDiGetHardwareID(hdi, &devData, NULL, szHardwareID,
+ sizeof(szHardwareID), NULL);
+
+ if (bRet)
+ {
+ // Register the device as a modem device
+ DETECTSIG_PARAMS dsparams;
+ BOOL bFindDups;
+
+ DetectSig_Init(&mds, 0, szHardwareID, pszPort);
+
+ // If this is the mass install case, then don't find duplicates.
+ // It takes too long. (The flag determines whether SPRDI_FIND_DUPS
+ // is passed to CplDiRegisterDeviceInfo()....)
+ bFindDups = IsFlagClear(dwFlags, IMF_MASS_INSTALL);
+
+ bRet = CplDiRegisterModem(hdi, &devData, &mds, bFindDups, &dsparams);
+
+ if ( !bRet )
+ {
+ SP_DRVINFO_DATA drvData;
+
+ nErr = GetLastError(); // Save the error
+
+ drvData.cbSize = sizeof(drvData);
+ CplDiGetSelectedDriver(hdi, &devData, &drvData);
+
+ // Is this a duplicate?
+ if (ERROR_DUPLICATE_FOUND == nErr)
+ {
+ // Yes
+ ASSERT(IsFlagSet(dsparams.dwMatchingMask, MDSM_HARDWAREID));
+ ASSERT(IsFlagSet(dsparams.dwMatchingMask, MDSM_PORT));
+
+ // A modem exactly like this is already installed on this
+ // port. Ask the user if she still wants to install.
+ if (IsFlagSet(dwFlags, IMF_CONFIRM))
+ {
+ if (IDYES == MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_WRN_DUPLICATE_MODEM),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_YESNO | MB_ICONWARNING,
+ drvData.Description, mds.szPort))
+ {
+ // User wants to do it. Register without checking
+ // for duplicates
+ bRet = CplDiRegisterModem(hdi, &devData,
+ &mds, FALSE, NULL);
+
+ if ( !bRet )
+ {
+ goto WhineToUser;
+ }
+ }
+
+ }
+ }
+ else
+ {
+ // No; something else failed
+ TRACE_MSG(TF_ERROR, "CplDiRegisterModem() failed: %#08lx.", nErr);
+
+WhineToUser:
+ id = MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_ERR_REGISTER_FAILED),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OKCANCEL | MB_ICONINFORMATION,
+ drvData.Description, mds.szPort);
+ if (IDCANCEL == id)
+ {
+ nErr = ERROR_CANCELLED;
+ }
+ }
+ }
+
+ if (bRet)
+ {
+ SP_DEVINSTALL_PARAMS devParams;
+ devParams.cbSize = sizeof(devParams);
+ // Any flags to set?
+ if (dwFlags && CplDiGetDeviceInstallParams(
+ hdi,
+ &devData,
+ &devParams
+ ))
+ {
+ DWORD dwExtraMarkFlags = 0;
+ if (IsFlagSet(dwFlags, IMF_QUIET_INSTALL))
+ {
+ SetFlag(devParams.Flags, DI_QUIETINSTALL);
+ }
+ if (IsFlagSet(dwFlags, IMF_REGSAVECOPY))
+ {
+ dwExtraMarkFlags = MARKF_REGSAVECOPY;
+ }
+ else if (IsFlagSet(dwFlags, IMF_REGUSECOPY))
+ {
+ dwExtraMarkFlags = MARKF_REGUSECOPY;
+ }
+ if (dwExtraMarkFlags)
+ {
+ SetFlag(
+ devParams.ClassInstallReserved,
+ dwExtraMarkFlags
+ );
+ }
+
+ // If this is the mass install case, then speed up the call
+ // into CplDiInstallDevice() by avoiding re-enumeration.
+ if (IsFlagSet(dwFlags, IMF_MASS_INSTALL))
+ {
+ SetFlag(devParams.Flags, DI_DONOTCALLCONFIGMG);
+ }
+
+ CplDiSetDeviceInstallParams(hdi, &devData, &devParams);
+ }
+
+
+ // Install the modem
+ bRet = CplDiInstallModem(hdi, &devData, FALSE);
+ nErr = GetLastError();
+ }
+ }
+
+ // Did anything above fail?
+ if ( !bRet )
+ {
+ // Yes; clean up
+ CplDiDeleteDeviceInfo(hdi, &devData);
+ }
+
+ if (NO_ERROR != nErr)
+ {
+ // Set the last error to be what it really was
+ SetLastError(nErr);
+ }
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiRegisterAndInstallModem, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Warn the user about whether she needs to reboot
+ if any of the installed modems was marked as such.
+
+Returns: --
+Cond: --
+*/
+void
+PRIVATE
+WarnUserAboutReboot(
+ IN HDEVINFO hdi)
+ {
+ DWORD iDevice;
+ SP_DEVINFO_DATA devData;
+ SP_DEVINSTALL_PARAMS devParams;
+
+ // Enumerate all the DeviceInfoData elements in this device set
+ devData.cbSize = sizeof(devData);
+ devParams.cbSize = sizeof(devParams);
+ iDevice = 0;
+
+//#ifdef INSTANT_DEVICE_ACTIVATION
+// gDeviceFlags|= fDF_DEVICE_NEEDS_REBOOT;
+//#endif // INSTANT_DEVICE_ACTIVATION
+
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ if (CplDiGetDeviceInstallParams(hdi, &devData, &devParams))
+ {
+ if (ReallyNeedsReboot(&devData, &devParams))
+ {
+//#ifdef INSTANT_DEVICE_ACTIVATION
+// gDeviceFlags|= fDF_DEVICE_NEEDS_REBOOT;
+//#else //!INSTANT_DEVICE_ACTIVATION
+ // Yes; tell the user (once)
+ MsgBox(g_hinst,
+ devParams.hwndParent,
+ MAKEINTRESOURCE(IDS_WRN_REBOOT2),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION);
+//#endif // !INSTANT_DEVICE_ACTIVATION
+ break;
+ }
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Takes a device instance and properly installs it.
+ This function assures that the device has a selected
+ driver and a detection signature. It also registers
+ the device instance.
+
+ The pszPort parameter is a multi-string (ie, double-
+ null termination). This specifies the port the
+ modem should be attached to. If there are multiple
+ ports specified, then this function creates device
+ instances for each port. However in the mass modem
+ install case, it will preprocess the ports list and
+ remove ports on which the selected modem is already
+ installed. This is done here because it's too
+ expensive (for many ports i.e. > 100) to turn on the
+ SPRDI_FIND_DUPS flag and let the setup api's do it.
+ The caller's ports list is *modified* in this case.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+APIENTRY
+CplDiInstallModemFromDriver(
+ IN HDEVINFO hdi,
+ IN HWND hwndOwner, OPTIONAL
+ IN OUT LPTSTR FAR * ppszPortList, // Multi-string
+ IN DWORD dwFlags) // IMF_ bit field
+ {
+ BOOL bRet;
+
+ DBG_ENTER(CplDiInstallModemFromDriver);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(*ppszPortList);
+
+ try
+ {
+ LPCTSTR pszPort;
+ BOOL bSingleInstall = (0 == (*ppszPortList)[lstrlen(*ppszPortList) + 1]);
+ DWORD cPorts;
+ DWORD cFailedPorts = 0;
+ DWORD cSkippedPorts = 0;
+ TCHAR rgtchStatusTemplate[256];
+ DWORD cchStatusTemplate=0;
+ BOOL bFirstGood = TRUE;
+ SP_DEVINFO_DATA devData;
+ PSP_DEVINFO_DATA pdevData = NULL;
+ BOOL bAllDups = FALSE;
+
+ // Count the number of ports to check for the mass install case.
+ // Set a flag for CplDiRegisterAndInstallModem().
+ for (pszPort = *ppszPortList, cPorts = 0;
+ *pszPort != 0;
+ pszPort += lstrlen(pszPort) + 1)
+ {
+ cPorts++;
+ if (cPorts > MIN_MULTIPORT)
+ {
+ // This call sets up the mass install case if it succeeds.
+ if (CplDiPreProcessDups(hdi, hwndOwner, ppszPortList,
+ &devData, &cSkippedPorts, &dwFlags))
+ {
+ pdevData = &devData;
+ if ((*ppszPortList)[0] == 0)
+ bAllDups = TRUE;
+ }
+ break;
+ }
+ }
+
+ if ( !bSingleInstall && !bAllDups )
+ {
+ BOOL bRet = LoadString(
+ g_hinst,
+ IDS_INSTALL_STATUS,
+ rgtchStatusTemplate,
+ SIZECHARS(rgtchStatusTemplate)
+ );
+ if (bRet)
+ {
+ cchStatusTemplate = lstrlen(rgtchStatusTemplate);
+ }
+ SetFlag(dwFlags, IMF_QUIET_INSTALL);
+ ClearFlag(dwFlags, IMF_CONFIRM);
+ SetFlag(dwFlags, IMF_REGSAVECOPY);
+ {
+ DWORD PRIVATE RegDeleteKeyNT(HKEY, LPCTSTR);
+ LPCTSTR szREGCACHE =
+ REGSTR_PATH_SETUP TEXT("\\Unimodem\\RegCache");
+ RegDeleteKeyNT(HKEY_LOCAL_MACHINE, szREGCACHE);
+ }
+ }
+
+ // Install a device for each port in the port list
+ cPorts = 0;
+ for (pszPort = *ppszPortList;
+ 0 != *pszPort;
+ pszPort += lstrlen(pszPort) + 1)
+ {
+ TCHAR rgtchStatus[256];
+
+ cPorts++;
+
+#ifdef PROFILE_MASSINSTALL
+ g_dwTimeStartModemInstall = GetTickCount();
+#endif
+
+ // "cchStatusTemplate+lstrlen(pszPort)" slightly overestimates
+ // the size of the formatted result, that's OK.
+ if ( cchStatusTemplate
+ && (cchStatusTemplate+lstrlen(pszPort))<SIZECHARS(rgtchStatus))
+ {
+ wsprintf(rgtchStatus, rgtchStatusTemplate, pszPort);
+ Install_SetStatus(hwndOwner, rgtchStatus);
+ }
+
+ // Install the modem
+ // WARNING: if this call failed, pdevData has been deleted!
+ if (cPorts != 1)
+ pdevData = NULL;
+ bRet = CplDiRegisterAndInstallModem(hdi, hwndOwner, pdevData,
+ pszPort, dwFlags);
+
+ if ( !bRet )
+ {
+ DWORD dwErr = GetLastError();
+
+ cFailedPorts++;
+
+ if (ERROR_CANCELLED == dwErr)
+ {
+ // Stop because the user said so
+ break;
+ }
+ else if (ERROR_DUPLICATE_FOUND == dwErr)
+ {
+ cSkippedPorts++;
+ }
+ }
+ else
+ {
+ if (bFirstGood && !bSingleInstall)
+ {
+ // This is the 1st good install. From now on, specify the
+ // IMF_REGUSECOPY flag.
+ ClearFlag(dwFlags, IMF_REGSAVECOPY);
+ SetFlag(dwFlags, IMF_REGUSECOPY);
+ bFirstGood = FALSE;
+ }
+ }
+#ifdef PROFILE_MASSINSTALL
+TRACE_MSG(TF_GENERAL, "***--------- %lu ms to install ONE modem ---------***",
+ GetTickCount() - g_dwTimeStartModemInstall);
+TRACE_MSG(TF_GENERAL, "***--------- %lu ms TOTAL time spent installing modems ---------***",
+ GetTickCount() - g_dwTimeBegin);
+#endif
+
+ }
+
+// ???: bRet could be either TRUE or FALSE here!!!
+
+ if (cPorts > cFailedPorts)
+ {
+#ifdef PROFILE_MASSINSTALL
+TRACE_MSG(TF_GENERAL, "*** Friendly Name generation took %lu ms out of %lu ms total install time",
+ g_dwTimeSpent, GetTickCount() - g_dwTimeBegin);
+#endif
+
+ // At least some modems were installed
+ bRet = TRUE;
+ }
+
+ if (0 < cSkippedPorts && IsFlagClear(dwFlags, IMF_CONFIRM))
+ {
+ // Tell the user we skipped some ports
+ MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_WRN_SKIPPED_PORTS),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION);
+ }
+
+ // If this is the mass install case, then we have to assume that
+ // a reboot is necessary since we didn't allow cfgmgr32 to
+ // re-enumerate the installed drivers (because it takes too long).
+ if (IsFlagSet(dwFlags, IMF_MASS_INSTALL))
+ {
+ if (bRet) // something *was* installed
+ {
+ MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_WRN_REBOOT2),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION);
+ }
+ if (bAllDups)
+ {
+ bRet = TRUE;
+ }
+ }
+ else if (!bSingleInstall && (cSkippedPorts < cPorts))
+ {
+ {
+ // We just installed a bunch of modems at the same time.
+ // Do any of the installed modems require a reboot?
+ //
+ // (Note we set the quiet flag for this case when calling
+ // the class installer, so the user wouldn't a zillion
+ // "need to reboot" messages.)
+ WarnUserAboutReboot(hdi);
+#ifndef INSTANT_DEVICE_ACTIVATION
+#ifndef NT_BETA_1
+ MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE( IDS_NT_BETA_1 ),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONINFORMATION);
+#endif // NT_BETA_1
+#endif /!INSTANT_DEVICE_ACTIVATION
+ }
+ }
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiInstallModemFromDriver, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Does all the dirty work to detect a modem.
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+APIENTRY
+CplDiDetectModem(
+ IN HDEVINFO hdi,
+ IN PDETECT_DATA pdetectdata, OPTIONAL
+ IN HWND hwndOwner, OPTIONAL
+ IN OUT LPDWORD pdwFlags) // DMF_ bit field
+ {
+ BOOL bRet;
+
+ DBG_ENTER(CplDiDetectModem);
+
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+ ASSERT(pdwFlags);
+
+ try
+ {
+ DWORD dwFlags = *pdwFlags;
+
+ ClearFlag(dwFlags, DMF_CANCELLED);
+ ClearFlag(dwFlags, DMF_DETECTED_MODEM);
+ ClearFlag(dwFlags, DMF_GOTO_NEXT_PAGE);
+
+ // Use the given device info set as the set of detected modem
+ // devices. This device set will be empty at first. When
+ // detection is finished, we'll see if anything was added to
+ // the set.
+
+ if (pdetectdata)
+ {
+ CplDiSetClassInstallParams(hdi, NULL, PCIPOfPtr(pdetectdata),
+ sizeof(*pdetectdata));
+ }
+
+ // Set the quiet flag?
+ if (IsFlagSet(dwFlags, DMF_QUIET))
+ {
+ // Yes
+ SP_DEVINSTALL_PARAMS devParams;
+
+ devParams.cbSize = sizeof(devParams);
+ if (CplDiGetDeviceInstallParams(hdi, NULL, &devParams))
+ {
+ SetFlag(devParams.Flags, DI_QUIETINSTALL);
+ CplDiSetDeviceInstallParams(hdi, NULL, &devParams);
+ }
+ }
+
+ // Start detection
+ bRet = CplDiCallClassInstaller(DIF_DETECT, hdi, NULL);
+
+ if (bRet)
+ {
+ SP_DEVINFO_DATA devData;
+ BOOL bDetectedOne = FALSE;
+ DWORD iDevice = 0;
+
+ // Find the first detected modem (if there is one) in
+ // the set.
+ devData.cbSize = sizeof(devData);
+ while (CplDiEnumDeviceInfo(hdi, iDevice++, &devData))
+ {
+ if (CplDiIsModemMarked(hdi, &devData, MARKF_DETECTED))
+ {
+ bDetectedOne = TRUE;
+ break;
+ }
+ }
+
+ // Was at least one modem detected?
+ if (bDetectedOne)
+ {
+ // Yes
+ SetFlag(dwFlags, DMF_DETECTED_MODEM);
+
+ // Is this the mass-modem case, in which we might be installing
+ // the detected modem on more than one port?
+ if (IsFlagSet(pdetectdata->dwFlags, DDF_QUERY_SINGLE) &&
+ IsFlagClear(dwFlags, DMF_ONE_PORT_INSTALL))
+ {
+ // Yes; create a global class driver list so the
+ // detect modem can be cloned for quicker installation.
+ HCURSOR hcurSav = SetCursor(LoadCursor(NULL, IDC_WAIT));
+
+ bRet = CplDiBuildModemDriverList(hdi, &devData);
+
+ SetCursor(hcurSav);
+
+ if ( !bRet )
+ {
+ if (IsFlagClear(dwFlags, DMF_QUIET))
+ {
+ // Some error occurred, show an error message
+ MsgBox(g_hinst,
+ hwndOwner,
+ MAKEINTRESOURCE(IDS_ERR_CANT_ADD_MODEM2),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONERROR);
+ }
+ }
+
+ // Now that a global class driver list has been created,
+ // and the compatible driver selected from that list,
+ // we will delete this registered device instance.
+ // The real device instance will be created later; if
+ // we don't delete this registered device instance now,
+ // it will be left around like a turd.
+ CplDiRemoveDevice(hdi, &devData);
+ }
+ }
+
+ if (bRet)
+ {
+ SetFlag(dwFlags, DMF_GOTO_NEXT_PAGE);
+ }
+
+ CplDiUnmarkAllModems(hdi, MARKF_DETECTED);
+ }
+
+ // Did the user cancel detection?
+ else if (ERROR_CANCELLED == GetLastError())
+ {
+ // Yes
+ SetFlag(dwFlags, DMF_CANCELLED);
+ }
+
+ *pdwFlags = dwFlags;
+ }
+ except (EXCEPTION_EXECUTE_HANDLER)
+ {
+ bRet = FALSE;
+ SetLastError(ERROR_INVALID_PARAMETER);
+ }
+
+ DBG_EXIT_BOOL_ERR(CplDiDetectModem, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Perform an unattended manual installation of the
+ modems specified in the given INF file section.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PRIVATE
+GetInfModemData(
+ HINF hInf,
+ LPTSTR szSection,
+ LPTSTR szPreferredFriendlyPort, // OPTIONAL
+ LPMODEM_SPEC lpModemSpec,
+ HPORTMAP hportmap,
+ LPBOOL lpbFatal
+ )
+{
+ BOOL bRet = FALSE; // assume failure
+ INFCONTEXT Context;
+ TCHAR szInfLine[LINE_LEN];
+ LPTSTR lpszValue;
+ DWORD dwReqSize;
+ static LONG lLineCount = -1; // flag that count hasn't been obtained yet
+ TCHAR rgtchFriendlyPort[LINE_LEN];
+
+ ZeroMemory(lpModemSpec, sizeof(MODEM_SPEC));
+
+ *lpbFatal=FALSE;
+
+ if (szPreferredFriendlyPort && *szPreferredFriendlyPort)
+ {
+ // Preferred port specified -- look for exactly that port. Not fatal
+ // if you don't find it...
+
+ bRet = SetupFindFirstLine(
+ hInf,
+ szSection,
+ szPreferredFriendlyPort,
+ &Context
+ );
+ if (!bRet) goto exit;
+ }
+ else
+ {
+
+ if (lLineCount == -1)
+ {
+ if ((lLineCount = SetupGetLineCount(hInf, szSection)) < 1)
+ {
+ TRACE_MSG(TF_ERROR, "SetupGetLineCount() failed or found no lines");
+ goto exit;
+ }
+ }
+
+ // make a 0-based index out of it / decrement for next line
+ if (lLineCount-- == 0L)
+ {
+ // no more lines
+ goto exit;
+ }
+
+ // get the line
+ if (!SetupGetLineByIndex(hInf, szSection, lLineCount, &Context))
+ {
+ TRACE_MSG(TF_ERROR, "SetupGetLineByIndex(): line %#08lX doesn't exist", lLineCount);
+ goto exit;
+ }
+ }
+
+ *lpbFatal=TRUE;
+ bRet = FALSE; // assume failure once again
+
+ // read the key (port #)
+ if (!SetupGetStringField(&Context, FIELD_PORT, rgtchFriendlyPort,
+ ARRAYSIZE(rgtchFriendlyPort), &dwReqSize))
+ {
+ TRACE_MSG(TF_ERROR, "SetupGetStringField() failed: %#08lx", GetLastError());
+ gUnattendFailID = IDS_ERR_UNATTEND_INF_NOPORT;
+ goto exit;
+ }
+ ASSERT(
+ !szPreferredFriendlyPort
+ || !*szPreferredFriendlyPort
+ || !lstrcmpi(szPreferredFriendlyPort, rgtchFriendlyPort)
+ );
+
+ if (!PortMap_GetPortName(
+ hportmap,
+ rgtchFriendlyPort,
+ lpModemSpec->szPort,
+ ARRAYSIZE(lpModemSpec->szPort)
+ ))
+ {
+ TRACE_MSG(
+ TF_ERROR,
+ "Can't find port %s in portmap.",
+ rgtchFriendlyPort
+ );
+ gUnattendFailID = IDS_ERR_UNATTEND_INF_NOSUCHPORT;
+ goto exit;
+ }
+
+ // read the modem description
+ if (!SetupGetStringField(&Context, FIELD_DESCRIPTION,
+ lpModemSpec->szDescription, sizeof(lpModemSpec->szDescription),
+ &dwReqSize))
+ {
+ TRACE_MSG(TF_ERROR, "SetupGetStringField() failed: %#08lx", GetLastError());
+ gUnattendFailID = IDS_ERR_UNATTEND_INF_NODESCRIPTION;
+ goto exit;
+ }
+
+ // read the manufacturer name, if it exists
+ if (!SetupGetStringField(&Context, FIELD_MANUFACTURER,
+ lpModemSpec->szManufacturer, sizeof(lpModemSpec->szManufacturer),
+ &dwReqSize))
+ {
+ TRACE_MSG(TF_WARNING, "no manufacturer specified (%#08lx)", GetLastError());
+ // optional field: don't return error
+ }
+
+ // read the provider name, if it exists
+ if (!SetupGetStringField(&Context, FIELD_PROVIDER, lpModemSpec->szProvider,
+ sizeof(lpModemSpec->szProvider), &dwReqSize))
+ {
+ TRACE_MSG(TF_WARNING, "no provider specified (%#08lx)", GetLastError());
+ // optional field: don't return error
+ }
+
+ *lpbFatal=FALSE;
+ bRet = TRUE;
+
+exit:
+ return(bRet);
+}
+
+
+/*----------------------------------------------------------
+Purpose: Perform an unattended manual installation of the
+ modems specified in the given INF file section.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PRIVATE
+UnattendedManualInstall(
+ HWND hwnd,
+ LPINSTALLPARAMS lpip,
+ HDEVINFO hdi,
+ BOOL *pbDetect,
+ HPORTMAP hportmap
+ )
+{
+ BOOL bRet = FALSE; // assume failure
+ BOOL bIsModem = FALSE; // assume INF gives no modems
+ BOOL bEnum, bFound;
+ HINF hInf = NULL;
+ MODEM_SPEC mSpec;
+ SP_DRVINFO_DATA drvData;
+ DWORD dwIndex, dwErr;
+ BOOL bFatal=FALSE;
+
+ ASSERT(pbDetect);
+ *pbDetect = FALSE;
+
+ hInf = SetupOpenInfFile(lpip->szInfName, NULL, INF_STYLE_OLDNT, NULL);
+
+ if (hInf == INVALID_HANDLE_VALUE)
+ {
+ TRACE_MSG(TF_ERROR, "SetupOpenInfFile() failed: %#08lx", GetLastError());
+ MsgBox(g_hinst, hwnd,
+ MAKEINTRESOURCE(IDS_ERR_CANT_OPEN_INF_FILE),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION,
+ lpip->szInfName);
+ hInf = NULL;
+ goto exit;
+ }
+
+ if (!CplDiBuildDriverInfoList(hdi, NULL, SPDIT_CLASSDRIVER))
+ {
+ TRACE_MSG(TF_ERROR, "CplDiBuildDriverInfoList() failed: %#08lx", GetLastError());
+ gUnattendFailID = IDS_ERR_UNATTEND_DRIVERLIST;
+ goto exit;
+ }
+
+ drvData.cbSize = sizeof(drvData);
+
+ // process each line in our INF file section
+ while (GetInfModemData(hInf, lpip->szInfSect, lpip->szPort, &mSpec, hportmap, &bFatal))
+ {
+ // a modem was specified in the INF
+ bIsModem = TRUE;
+
+ // search for a match against all drivers
+ bFound = FALSE;
+ dwIndex = 0;
+ while (bEnum = CplDiEnumDriverInfo(hdi, NULL, SPDIT_CLASSDRIVER,
+ dwIndex++, &drvData))
+ {
+ // keep looking if driver's not a match
+ if (!IsSzEqual(mSpec.szDescription, drvData.Description))
+ continue;
+
+ // description matches, now check manufacturer if there is one
+ if (!IsSzEqual(mSpec.szManufacturer, TEXT("\0")) &&
+ !IsSzEqual(mSpec.szManufacturer, drvData.MfgName))
+ continue;
+
+ // manufacturer matches, now check provider if there is one
+ if (!IsSzEqual(mSpec.szProvider, TEXT("\0")) &&
+ !IsSzEqual(mSpec.szProvider, drvData.ProviderName))
+ continue;
+
+ bFound = TRUE;
+
+ // found a match; set this as the selected driver & install it
+ if (!CplDiSetSelectedDriver(hdi, NULL, &drvData))
+ {
+ TRACE_MSG(TF_ERROR, "CplDiSetSelectedDriver() failed: %#08lx",
+ GetLastError());
+ // can't install; get out of here quick.
+ goto exit;
+ }
+
+ if (!CplDiRegisterAndInstallModem(hdi, NULL, NULL, mSpec.szPort,
+ IMF_QUIET_INSTALL))
+ {
+ DWORD dwErr = GetLastError();
+ if (ERROR_DUPLICATE_FOUND != dwErr)
+ {
+ TRACE_MSG(
+ TF_ERROR,
+ "CplDiRegisterAndInstallModem() failed: %#08lx",
+ dwErr
+ );
+ gUnattendFailID = IDS_ERR_UNATTEND_CANT_INSTALL;
+ goto exit;
+ }
+ // Treate a duplicate-found error as no error.
+ }
+
+ break;
+ }
+
+ // Did CplDiEnumDriverInfo() fail on error other than "end of list"?
+ if ((!bEnum) && ((dwErr = GetLastError()) != ERROR_NO_MORE_ITEMS))
+ {
+ TRACE_MSG(TF_ERROR, "CplDiEnumDriverInfo() failed: %#08lx", dwErr);
+ goto exit;
+ }
+
+ if (!bFound)
+ {
+ MsgBox(g_hinst, hwnd,
+ MAKEINTRESOURCE(IDS_ERR_CANT_FIND_MODEM),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION,
+ mSpec.szPort, mSpec.szDescription);
+ goto exit;
+ }
+
+ // If port spefied, only try on specified port.
+ if (*(lpip->szPort)) break;
+ }
+
+ if (bFatal) goto exit;
+
+ // Request detection if everything succeeded but the INF didn't specify
+ // any modems.
+ *pbDetect = !bIsModem;
+
+ bRet = TRUE;
+
+exit:
+ if (hInf)
+ SetupCloseInfFile(hInf);
+
+ return(bRet);
+
+}
+
+
+/*----------------------------------------------------------
+Purpose: Perform an unattended (UI-less) install. UI can only be
+ displayed in the case of a critical error.
+
+Returns: --
+Cond: --
+*/
+BOOL
+PUBLIC
+UnattendedInstall(HWND hwnd, LPINSTALLPARAMS lpip)
+{
+ BOOL bRet = FALSE; // assume failure
+ HDEVINFO hdi = NULL;
+ DWORD dwFlags = 0;
+ DETECT_DATA dd;
+ HPORTMAP hportmap=NULL;
+ DWORD dwPorts;
+
+ DBG_ENTER(UnattendedInstall);
+
+ gUnattendFailID = IDS_ERR_UNATTEND_GENERAL_FAILURE;
+
+ if (!CplDiGetModemDevs(&hdi, NULL, DIGCF_PRESENT, NULL))
+ {
+ goto exit;
+ }
+
+ if (!PortMap_Create(&hportmap))
+ {
+ gUnattendFailID = IDS_ERR_UNATTEND_NOPORTS;
+ hportmap=NULL;
+ goto exit;
+ }
+
+ dwPorts = PortMap_GetCount(hportmap);
+
+ if (!dwPorts)
+ {
+ gUnattendFailID = IDS_ERR_UNATTEND_NOPORTS;
+ goto exit;
+ }
+
+ // Do a "manual" install if we were given an INF file and section.
+ if (lstrlen(lpip->szInfName) && lstrlen(lpip->szInfSect))
+ {
+ BOOL bDetect = FALSE;
+
+ bRet = UnattendedManualInstall(hwnd, lpip, hdi, &bDetect, hportmap);
+
+ if (!bRet || !bDetect)
+ goto exit;
+
+ // proceed with detection: manual install function didn't fail but
+ // INF didn't specify any modems.
+ bRet = FALSE; // assume failure;
+ }
+
+ // No INF file & section: do a detection install.
+ // Set the detection parameters
+ ZeroInit(&dd);
+ CplInitClassInstallHeader(&dd, DIF_DETECT);
+
+ if (*lpip->szPort)
+ {
+ // Tell modem detection that we'll only be installing on one port,
+ // so that it leaves us with a registered device instance instead
+ // of creating a global class driver list.
+ SetFlag(dwFlags, DMF_ONE_PORT_INSTALL);
+ dd.dwFlags |= DDF_QUERY_SINGLE;
+ if (!PortMap_GetPortName(
+ hportmap,
+ lpip->szPort,
+ dd.szPortQuery,
+ ARRAYSIZE(dd.szPortQuery)
+ ))
+ {
+ TRACE_MSG(
+ TF_ERROR,
+ "Can't find port %s in portmap.",
+ lpip->szPort
+ );
+ gUnattendFailID = IDS_ERR_UNATTEND_INF_NOSUCHPORT;
+ goto exit;
+ }
+ }
+ else
+ {
+ if (dwPorts > MIN_MULTIPORT)
+ {
+ // The machine has > MIN_MULTIPORT ports and a port *wasn't* given.
+ // Warn the user.
+ TRACE_MSG(TF_ERROR, "Too many ports. Must restrict detection.");
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(IDS_ERR_TOO_MANY_PORTS),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION,
+ dwPorts);
+ goto exit;
+ }
+ }
+
+ // Run UI-less modem detection
+ SetFlag(dwFlags, DMF_QUIET);
+ bRet = CplDiDetectModem(hdi, &dd, NULL, &dwFlags);
+
+ // Did the detection fail?
+ if (!bRet || IsFlagClear(dwFlags, DMF_GOTO_NEXT_PAGE))
+ {
+ TRACE_MSG(TF_ERROR, "modem detection failed");
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(IDS_ERR_DETECTION_FAILED),
+ MAKEINTRESOURCE(IDS_CAP_MODEMWIZARD),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION);
+ }
+
+ // Did detection find something?
+ if (IsFlagSet(dwFlags, DMF_DETECTED_MODEM))
+ {
+ // Install the modem(s) that were detected. (We can assume here
+ // that there's something in the device class to be installed.)
+ bRet = CplDiInstallModem(hdi, NULL, FALSE);
+ if (!bRet) gUnattendFailID = IDS_ERR_UNATTEND_CANT_INSTALL;
+ }
+
+exit:
+
+ if (hportmap) {PortMap_Free(hportmap); hportmap=NULL;}
+
+
+ if (!bRet)
+ {
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(gUnattendFailID),
+ MAKEINTRESOURCE(IDS_CAP_MODEMSETUP),
+ NULL,
+ MB_OK | MB_ICONEXCLAMATION);
+ }
+
+ DBG_EXIT_BOOL_ERR(UnattendedInstall, bRet);
+ return(bRet);
+}
+
+
+
+//-----------------------------------------------------------------------------------
+// SetupInfo structure functions
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: This function creates a SETUPINFO structure.
+
+ Use SetupInfo_Destroy to free the pointer to this structure.
+
+Returns: NO_ERROR
+ ERROR_OUTOFMEMORY
+
+Cond: --
+*/
+DWORD
+PUBLIC
+SetupInfo_Create(
+ OUT LPSETUPINFO FAR * ppsi,
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ IN PSP_INSTALLWIZARD_DATA piwd, OPTIONAL
+ IN PMODEM_INSTALL_WIZARD pmiw) OPTIONAL
+ {
+ DWORD dwRet;
+ LPSETUPINFO psi;
+
+ DBG_ENTER(SetupInfo_Create);
+
+ ASSERT(ppsi);
+ ASSERT(hdi && INVALID_HANDLE_VALUE != hdi);
+
+ psi = (LPSETUPINFO)LocalAlloc(LPTR, sizeof(*psi));
+ if (NULL == psi)
+ {
+ dwRet = ERROR_OUTOFMEMORY;
+ }
+ else
+ {
+ psi->cbSize = sizeof(*psi);
+ psi->pdevData = pdevData;
+
+ // Allocate a buffer to save the INSTALLWIZARD_DATA
+
+ dwRet = ERROR_OUTOFMEMORY; // assume error
+
+ psi->piwd = (PSP_INSTALLWIZARD_DATA)LocalAlloc(LPTR, sizeof(*piwd));
+ if (psi->piwd)
+ {
+ if (PortMap_Create(&psi->hportmap))
+ {
+ PSP_SELECTDEVICE_PARAMS psdp = &psi->selParams;
+
+ // Initialize the SETUPINFO struct
+ psi->hdi = hdi;
+
+ // Is there a modem install structure that we need to save?
+ if (pmiw)
+ {
+ // Yes
+ BltByte(&psi->miw, pmiw, sizeof(psi->miw));
+ }
+ psi->miw.ExitButton = PSBTN_CANCEL; // default return
+
+ // Copy the INSTALLWIZARD_DATA
+ if (piwd)
+ {
+ psi->dwFlags = piwd->PrivateFlags;
+ BltByte(psi->piwd, piwd, sizeof(*piwd));
+ }
+
+ // Are there enough ports on the system to indicate
+ // we should treat this like a multi-modem install?
+ if (MIN_MULTIPORT < PortMap_GetCount(psi->hportmap))
+ {
+ // Yes
+ SetFlag(psi->dwFlags, SIF_PORTS_GALORE);
+ }
+
+ // Initialize the SELECTDEVICE_PARAMS
+ CplInitClassInstallHeader(psdp, DIF_SELECTDEVICE);
+ LoadString(g_hinst, IDS_CAP_MODEMWIZARD, psdp->Title, SIZECHARS(psdp->Title));
+ LoadString(g_hinst, IDS_ST_SELECT_INSTRUCT, psdp->Instructions, SIZECHARS(psdp->Instructions));
+ LoadString(g_hinst, IDS_ST_MODELS, psdp->ListLabel, SIZECHARS(psdp->ListLabel));
+
+ // Load the TAPI DLL for the dialing properties page.
+ // If this fails, we still want to continue.
+ psi->hinstTapi = LoadLibrary(c_szTapiDLL);
+ if (ISVALIDHINSTANCE(psi->hinstTapi))
+ {
+ psi->pfnDialInited = (DIALINITEDPROC)GetProcAddress(psi->hinstTapi, "LAddrParamsInited");
+ }
+
+ dwRet = NO_ERROR;
+ }
+ }
+
+ // Did something fail?
+ if (NO_ERROR != dwRet)
+ {
+ // Yes; clean up
+ SetupInfo_Destroy(psi);
+ psi = NULL;
+ }
+ }
+
+ *ppsi = psi;
+
+ DBG_EXIT(SetupInfo_Create);
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: This function destroys a SETUPINFO structure.
+
+Returns: NO_ERROR
+Cond: --
+*/
+DWORD
+PUBLIC
+SetupInfo_Destroy(
+ IN LPSETUPINFO psi)
+ {
+ if (psi)
+ {
+ if (psi->piwd)
+ {
+ LocalFree(LOCALOF(psi->piwd));
+ }
+
+ if (psi->hportmap)
+ {
+ PortMap_Free(psi->hportmap);
+ }
+
+ if (ISVALIDHINSTANCE(psi->hinstTapi))
+ {
+ FreeLibrary(psi->hinstTapi);
+ psi->hinstTapi = NULL;
+ }
+
+ CatMultiString(&psi->pszPortList, NULL);
+
+ LocalFree(LOCALOF(psi));
+ }
+ return NO_ERROR;
+ }
+
+
+
+//-----------------------------------------------------------------------------------
+// Debug functions
+//-----------------------------------------------------------------------------------
+
+#ifdef DEBUG
+
+#pragma data_seg(DATASEG_READONLY)
+struct _DIFMAP
+ {
+ DI_FUNCTION dif;
+ LPCTSTR psz;
+ } const c_rgdifmap[] = {
+ DEBUG_STRING_MAP(DIF_SELECTDEVICE),
+ DEBUG_STRING_MAP(DIF_INSTALLDEVICE),
+ DEBUG_STRING_MAP(DIF_ASSIGNRESOURCES),
+ DEBUG_STRING_MAP(DIF_PROPERTIES),
+ DEBUG_STRING_MAP(DIF_REMOVE),
+ DEBUG_STRING_MAP(DIF_FIRSTTIMESETUP),
+ DEBUG_STRING_MAP(DIF_FOUNDDEVICE),
+ DEBUG_STRING_MAP(DIF_SELECTCLASSDRIVERS),
+ DEBUG_STRING_MAP(DIF_VALIDATECLASSDRIVERS),
+ DEBUG_STRING_MAP(DIF_INSTALLCLASSDRIVERS),
+ DEBUG_STRING_MAP(DIF_CALCDISKSPACE),
+ DEBUG_STRING_MAP(DIF_DESTROYPRIVATEDATA),
+ DEBUG_STRING_MAP(DIF_VALIDATEDRIVER),
+ DEBUG_STRING_MAP(DIF_MOVEDEVICE),
+ DEBUG_STRING_MAP(DIF_DETECT),
+ DEBUG_STRING_MAP(DIF_INSTALLWIZARD),
+ DEBUG_STRING_MAP(DIF_DESTROYWIZARDDATA),
+ DEBUG_STRING_MAP(DIF_PROPERTYCHANGE),
+ DEBUG_STRING_MAP(DIF_ENABLECLASS),
+ DEBUG_STRING_MAP(DIF_DETECTVERIFY),
+ DEBUG_STRING_MAP(DIF_INSTALLDEVICEFILES),
+ };
+#pragma data_seg()
+
+
+/*----------------------------------------------------------
+Purpose: Returns the string form of a known InstallFunction.
+
+Returns: String ptr
+Cond: --
+*/
+LPCTSTR PUBLIC Dbg_GetDifName(
+ DI_FUNCTION dif)
+ {
+ int i;
+
+ for (i = 0; i < ARRAYSIZE(c_rgdifmap); i++)
+ {
+ if (dif == c_rgdifmap[i].dif)
+ return c_rgdifmap[i].psz;
+ }
+ return TEXT("Unknown InstallFunction");
+ }
+
+#endif // DEBUG
+
+
+#ifdef INSTANT_DEVICE_ACTIVATION
+//****************************************************************************
+// Functions: Notify the TSP -- general version.
+// BUG BUG -- move this and the notif apis into common code in rovdi later.
+//
+// Return: TRUE if successful
+// FALSE if failure (including if the tsp is not active)
+// GetLastError() returns the win32 failure code.
+// History:
+// 3/24/96 JosephJ Created (copied from ..\new\slot\client.c)
+//****************************************************************************
+BOOL WINAPI UnimodemNotifyTSP(PNOTIFICATION_FRAME pnf)
+{
+ BOOL fRet=FALSE;
+ HNOTIFICATION hN=0;
+
+ if (pnf->dwSig!=dwNFRAME_SIG || pnf->dwSize<sizeof(*pnf) ||
+ pnf->dwSize>MAX_NOTIFICATION_FRAME_SIZE)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ goto end;
+ }
+
+ hN = notifCreate(FALSE, SLOTNAME_UNIMODEM_NOTIFY_TSP, 0, 0);
+
+ if (hN)
+ {
+ fRet = notifWriteMsg(hN, (LPBYTE) pnf, pnf->dwSize);
+ notifFree(hN); hN=0;
+ }
+
+end:
+
+ return fRet;
+}
+
+
+//****************************************************************************
+// Functions: Notify the TSP -- ask it to re-enumerate devices
+//
+// Return: TRUE if successful
+// FALSE if failure (including if the tsp is not active)
+// GetLastError() returns the win32 failure code.
+// History:
+// 3/24/96 JosephJ Created (copied from ..\new\slot\client.c)
+//****************************************************************************
+void NotifyTSP_ReEnum(void)
+{
+ struct {
+ DWORD dw0;
+ DWORD dwSize;
+ DWORD dwType;
+ DWORD dwFlags;
+ } EmptyFr;
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+
+ ASSERT(sizeof(EmptyFr)==sizeof(*pnf));
+ pnf->dwSig = dwNFRAME_SIG;
+ pnf->dwSize = sizeof(EmptyFr);
+ pnf->dwType = TSPNOTIF_TYPE_CPL;
+ pnf->dwFlags = fTSPNOTIF_FLAG_CPL_REENUM;
+
+ // Notify TSP of a device change.
+ UnimodemNotifyTSP(pnf);
+}
+
+//****************************************************************************
+// Functions: Notify the TSP -- ask it to update the default comm config for
+// the specfied device.
+//
+// Return: TRUE if successful
+// FALSE if failure (including if the tsp is not active)
+// GetLastError() returns the win32 failure code.
+// History:
+// 5/31/96 JosephJ Created
+//****************************************************************************
+void NotifyTSP_NewCommConfig(LPCTSTR lpctszFriendlyName)
+{
+ struct {
+ DWORD dw0;
+ DWORD dwSize;
+ DWORD dwType;
+ DWORD dwFlags;
+ TCHAR rgchFriendlyName[MAX_BUF_REG];
+
+ } EmptyFr;
+
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+ UINT u = lstrlen(lpctszFriendlyName);
+
+ ASSERT(sizeof(((PMODEM_PRIV_PROP) 0)->szFriendlyName)
+ ==sizeof(EmptyFr.rgchFriendlyName));
+ ASSERT(pnf->rgb == (LPBYTE) EmptyFr.rgchFriendlyName);
+
+ ASSERT(MAX_NOTIFICATION_FRAME_SIZE > sizeof(EmptyFr));
+
+ if (u*sizeof(TCHAR) < sizeof (EmptyFr.rgchFriendlyName) )
+ {
+ pnf->dwSig = dwNFRAME_SIG;
+ pnf->dwSize = sizeof(EmptyFr);
+ pnf->dwType = TSPNOTIF_TYPE_CPL;
+ pnf->dwFlags = fTSPNOTIF_FLAG_CPL_DEFAULT_COMMCONFIG_CHANGE;
+
+ #ifdef UNICODE
+ pnf->dwFlags |= fTSPNOTIF_FLAG_UNICODE;
+ #endif // UNICODE
+
+ lstrcpy(EmptyFr.rgchFriendlyName, lpctszFriendlyName);
+
+ // Notify TSP of a device change.
+ UnimodemNotifyTSP(pnf);
+ }
+ else
+ {
+ ASSERT(FALSE);
+ }
+}
+
+
+#endif
+
+BOOL ReallyNeedsReboot
+(
+ IN PSP_DEVINFO_DATA pdevData,
+ IN PSP_DEVINSTALL_PARAMS pdevParams
+)
+{
+ BOOL fRet = FALSE;
+ SC_HANDLE schModemSys=NULL;
+ SC_HANDLE schSCManager=NULL;
+
+ if (pdevParams->Flags & (DI_NEEDREBOOT | DI_NEEDRESTART))
+ {
+ SERVICE_STATUS ServiceStatus;
+ BOOL bResult;
+
+ // We ask to reboot on failure
+ fRet = TRUE;
+
+ schSCManager=OpenSCManager(
+ NULL,
+ NULL,
+ GENERIC_READ
+ );
+
+ if (schSCManager == NULL)
+ {
+ TRACE_MSG(
+ TF_GENERAL,
+ "OpenSCManager returns error %08lx!",
+ GetLastError()
+ );
+ // Assume we have to reboot.
+ goto end;
+ }
+
+ schModemSys=OpenService(
+ schSCManager,
+ TEXT("modem"),
+ SERVICE_QUERY_STATUS
+ );
+
+ if (schModemSys == NULL)
+ {
+
+ TRACE_MSG(TF_GENERAL, "OpenService() for modem.sys failed!");
+
+ // Assume we have to reboot
+ goto end;
+ }
+
+ bResult=QueryServiceStatus(
+ schModemSys,
+ &ServiceStatus
+ );
+
+ if (!bResult)
+ {
+ TRACE_MSG(
+ TF_GENERAL,
+ "QueryServiceStatus() for modem.sys failed (%08l)!",
+ GetLastError()
+ );
+ goto end;
+ }
+
+ if (ServiceStatus.dwCurrentState != SERVICE_RUNNING)
+ {
+ TRACE_MSG(
+ TF_GENERAL,
+ "modem.sys is not started. No need to reboot"
+ );
+ fRet=FALSE;
+ }
+
+ }
+
+end:
+
+ if (schModemSys) {CloseServiceHandle(schModemSys);}
+ if (schSCManager) {CloseServiceHandle(schSCManager);}
+
+ return fRet;
+}
+
+const LPCTSTR lpctszSP6 = TEXT(" ");
+
+#ifdef UNDER_CONSTRUCTION
+// 6/11/96: JosephJ -- this is no good because the listbox sorting does not
+// come out right.
+// Right-justifies the '#6' in "USR modem #6".
+// "USR modem #6" becomes
+// "USR modem #6"
+// and
+// "USR modem #999" stays
+// "USR modem #999"
+void FormatFriendlyNameForDisplay
+(
+ IN TCHAR szFriendly[],
+ OUT TCHAR rgchDisplayName[],
+ IN UINT cch
+)
+{
+ UINT u = lstrlen(szFriendly);
+ UINT uOff = u;
+ TCHAR *lpszFrom = szFriendly;
+ TCHAR *lpszTo = rgchDisplayName;
+ const LPCTSTR lpctszHash = TEXT("#");
+ const UINT cbJUST = 4; // 4 == lstrlen("#999")
+
+ if (cch<(u+cbJUST))
+ {
+ goto end;
+ }
+
+ // Find 1st '#' from the right-hand-side.
+ {
+ TCHAR *lpsz = szFriendly+u;
+ while (lpsz>szFriendly && *lpsz!=*lpctszHash)
+ {
+ lpsz--;
+ }
+ // Check if we really found it
+ if (lpsz>szFriendly && *lpsz==*lpctszHash && lpsz[-1]==*lpctszSP6
+ && lpsz[1]>((TCHAR)'0') && lpsz[1]<=((TCHAR)'9'))
+ {
+ uOff = lpsz-szFriendly;
+ }
+ }
+ ASSERT(u>=uOff);
+
+ // Copy first part of friendly name
+ CopyMemory(lpszTo, lpszFrom, uOff*sizeof(TCHAR));
+ lpszTo += uOff;
+ lpszFrom += uOff;
+ cch -= uOff;
+ u -= uOff;
+
+ // Right-justify remainder of the string, if it's less than cbJUST
+ // chars long.
+ if (u && u<cbJUST && cch>=cbJUST)
+ {
+ ASSERT(lstrlen(lpctszSP6)>=(int)cbJUST);
+ u = cbJUST-u;
+ CopyMemory(lpszTo, lpctszSP6, u*sizeof(TCHAR));
+ lpszTo+=u;
+ cch -=u;
+ }
+
+end:
+
+ ASSERT(cch);
+ lstrcpyn(lpszTo, lpszFrom, cch-1);
+ ASSERT(lpszTo[lstrlen(lpszFrom)]==0);
+}
+#endif // UNDER_CONSTRUCTION
+
+
+
+// Right-justifies the 'COMxxx'
+// "COM1" becomes
+// " COM1"
+// and
+// "COM999" stays
+// "COM999"
+void FormatPortForDisplay
+(
+ IN TCHAR szPort[],
+ OUT TCHAR rgchPortDisplayName[],
+ IN UINT cch
+)
+{
+ UINT u = lstrlen(szPort);
+ TCHAR *ptch = rgchPortDisplayName;
+ const UINT cbJUST = 6; // 6 == lstrlen("COM999")
+
+ ASSERT(cch>u);
+
+ // Right-justify the string, if it's less than cbJUST chars long.
+ if (u<cbJUST && cch>=cbJUST)
+ {
+ ASSERT(lstrlen(lpctszSP6)>=(int)cbJUST);
+ u = cbJUST-u;
+ CopyMemory(ptch, lpctszSP6, u*sizeof(TCHAR));
+ ptch+=u;
+ cch -=u;
+ }
+ lstrcpyn(ptch, szPort, cch);
+}
+
+void UnformatAfterDisplay
+(
+ IN OUT TCHAR *psz
+)
+{
+ TCHAR *psz1 = psz;
+
+ // find first non-blank.
+ while(*psz1 == *lpctszSP6)
+ {
+ psz1++;
+ }
+
+ // move up
+ do
+ {
+ *psz++ = *psz1;
+
+ } while(*psz1++);
+}
+
diff --git a/private/unimodem/dirs b/private/unimodem/dirs
new file mode 100644
index 000000000..f67440134
--- /dev/null
+++ b/private/unimodem/dirs
@@ -0,0 +1,30 @@
+!IF 0
+
+Copyright (c) 1989-92 Microsoft Corporation
+
+Module Name:
+
+ dirs.
+
+Abstract:
+
+ This file specifies the subdirectories of the current directory that
+ contain component makefiles.
+
+
+Author:
+
+ Steve Wood (stevewo) 17-Apr-1990
+
+NOTE: Commented description of this file is in \nt\public\oak\bin\dirs.tpl
+
+!ENDIF
+
+DIRS=\
+ common \
+ inf \
+ modemui \
+ serialui \
+ tapisp \
+ cpl \
+ lights
diff --git a/private/unimodem/docs/win95/voicemod.doc b/private/unimodem/docs/win95/voicemod.doc
new file mode 100644
index 000000000..6eceeb5ab
--- /dev/null
+++ b/private/unimodem/docs/win95/voicemod.doc
Binary files differ
diff --git a/private/unimodem/inc/mcx16.h b/private/unimodem/inc/mcx16.h
new file mode 100644
index 000000000..5c695f3b7
--- /dev/null
+++ b/private/unimodem/inc/mcx16.h
@@ -0,0 +1,189 @@
+//------------------------------------------------------------------------
+// These structures are the Win32 versions, defined in WINBASE.H and MCX.H,
+// but we cannot include them because we are 16-bit. So here they are...
+//------------------------------------------------------------------------
+
+#ifndef _MCX16_H_
+#define _MCX16_H_
+
+#pragma pack(4) // make this align every 32-bits
+
+//
+// Serial provider type.
+//
+
+#define SP_SERIALCOMM ((DWORD)0x00000001)
+
+//
+// Provider SubTypes
+//
+
+#define PST_UNSPECIFIED ((DWORD)0x00000000)
+#define PST_RS232 ((DWORD)0x00000001)
+#define PST_PARALLELPORT ((DWORD)0x00000002)
+#define PST_RS422 ((DWORD)0x00000003)
+#define PST_RS423 ((DWORD)0x00000004)
+#define PST_RS449 ((DWORD)0x00000005)
+#define PST_MODEM ((DWORD)0x00000006)
+#define PST_FAX ((DWORD)0x00000021)
+#define PST_SCANNER ((DWORD)0x00000022)
+#define PST_NETWORK_BRIDGE ((DWORD)0x00000100)
+#define PST_LAT ((DWORD)0x00000101)
+#define PST_TCPIP_TELNET ((DWORD)0x00000102)
+#define PST_X25 ((DWORD)0x00000103)
+
+
+//
+// Provider capabilities flags.
+//
+
+#define PCF_DTRDSR ((DWORD)0x0001)
+#define PCF_RTSCTS ((DWORD)0x0002)
+#define PCF_RLSD ((DWORD)0x0004)
+#define PCF_PARITY_CHECK ((DWORD)0x0008)
+#define PCF_XONXOFF ((DWORD)0x0010)
+#define PCF_SETXCHAR ((DWORD)0x0020)
+#define PCF_TOTALTIMEOUTS ((DWORD)0x0040)
+#define PCF_INTTIMEOUTS ((DWORD)0x0080)
+#define PCF_SPECIALCHARS ((DWORD)0x0100)
+#define PCF_16BITMODE ((DWORD)0x0200)
+
+//
+// Comm provider settable parameters.
+//
+
+#define SP_PARITY ((DWORD)0x0001)
+#define SP_BAUD ((DWORD)0x0002)
+#define SP_DATABITS ((DWORD)0x0004)
+#define SP_STOPBITS ((DWORD)0x0008)
+#define SP_HANDSHAKING ((DWORD)0x0010)
+#define SP_PARITY_CHECK ((DWORD)0x0020)
+#define SP_RLSD ((DWORD)0x0040)
+
+//
+// Settable baud rates in the provider.
+//
+
+#define BAUD_075 ((DWORD)0x00000001)
+#define BAUD_110 ((DWORD)0x00000002)
+#define BAUD_134_5 ((DWORD)0x00000004)
+#define BAUD_150 ((DWORD)0x00000008)
+#define BAUD_300 ((DWORD)0x00000010)
+#define BAUD_600 ((DWORD)0x00000020)
+#define BAUD_1200 ((DWORD)0x00000040)
+#define BAUD_1800 ((DWORD)0x00000080)
+#define BAUD_2400 ((DWORD)0x00000100)
+#define BAUD_4800 ((DWORD)0x00000200)
+#define BAUD_7200 ((DWORD)0x00000400)
+#define BAUD_9600 ((DWORD)0x00000800)
+#define BAUD_14400 ((DWORD)0x00001000)
+#define BAUD_19200 ((DWORD)0x00002000)
+#define BAUD_38400 ((DWORD)0x00004000)
+#define BAUD_56K ((DWORD)0x00008000)
+#define BAUD_128K ((DWORD)0x00010000)
+#define BAUD_115200 ((DWORD)0x00020000)
+#define BAUD_57600 ((DWORD)0x00040000)
+#define BAUD_USER ((DWORD)0x10000000)
+
+//
+// Settable Data Bits
+//
+
+#define DATABITS_5 ((WORD)0x0001)
+#define DATABITS_6 ((WORD)0x0002)
+#define DATABITS_7 ((WORD)0x0004)
+#define DATABITS_8 ((WORD)0x0008)
+#define DATABITS_16 ((WORD)0x0010)
+#define DATABITS_16X ((WORD)0x0020)
+
+//
+// Settable Stop and Parity bits.
+//
+
+#define STOPBITS_10 ((WORD)0x0001)
+#define STOPBITS_15 ((WORD)0x0002)
+#define STOPBITS_20 ((WORD)0x0004)
+#define PARITY_NONE ((WORD)0x0100)
+#define PARITY_ODD ((WORD)0x0200)
+#define PARITY_EVEN ((WORD)0x0400)
+#define PARITY_MARK ((WORD)0x0800)
+#define PARITY_SPACE ((WORD)0x1000)
+
+//
+// DTR Control Flow Values.
+//
+#define DTR_CONTROL_DISABLE 0x00
+#define DTR_CONTROL_ENABLE 0x01
+#define DTR_CONTROL_HANDSHAKE 0x02
+
+//
+// RTS Control Flow Values
+//
+#define RTS_CONTROL_DISABLE 0x00
+#define RTS_CONTROL_ENABLE 0x01
+#define RTS_CONTROL_HANDSHAKE 0x02
+#define RTS_CONTROL_TOGGLE 0x03
+
+typedef struct _WIN32DCB {
+ DWORD DCBlength; /* sizeof(DCB) */
+ DWORD BaudRate; /* Baudrate at which running */
+ DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
+ DWORD fParity: 1; /* Enable parity checking */
+ DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
+ DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
+ DWORD fDtrControl:2; /* DTR Flow control */
+ DWORD fDsrSensitivity:1; /* DSR Sensitivity */
+ DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
+ DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
+ DWORD fInX: 1; /* Enable input X-ON/X-OFF */
+ DWORD fErrorChar: 1; /* Enable Err Replacement */
+ DWORD fNull: 1; /* Enable Null stripping */
+ DWORD fRtsControl:2; /* Rts Flow control */
+ DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
+ DWORD fDummy2:17; /* Reserved */
+ WORD wReserved; /* Not currently used */
+ WORD XonLim; /* Transmit X-ON threshold */
+ WORD XoffLim; /* Transmit X-OFF threshold */
+ BYTE ByteSize; /* Number of bits/byte, 4-8 */
+ BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
+ BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
+ char XonChar; /* Tx and Rx X-ON character */
+ char XoffChar; /* Tx and Rx X-OFF character */
+ char ErrorChar; /* Error replacement char */
+ char EofChar; /* End of Input character */
+ char EvtChar; /* Recieved Event character */
+} WIN32DCB, FAR *LPWIN32DCB;
+
+#define COMMCONFIG_VERSION_1 1
+
+//
+// Registry forms of the above structures. Should match the ones in
+// unimodem\mcx\internal.h.
+//
+
+// The portion of the MODEMDEVCAPS that is saved in the registry as Properties
+typedef struct _RegDevCaps
+ {
+ DWORD dwDialOptions; // bitmap of supported values
+ DWORD dwCallSetupFailTimer; // maximum in seconds
+ DWORD dwInactivityTimeout; // maximum in the units specified in the InactivityScale value
+ DWORD dwSpeakerVolume; // bitmap of supported values
+ DWORD dwSpeakerMode; // bitmap of supported values
+ DWORD dwModemOptions; // bitmap of supported values
+ DWORD dwMaxDTERate; // maximum value in bit/s
+ DWORD dwMaxDCERate; // maximum value in bit/s
+ } REGDEVCAPS, FAR * LPREGDEVCAPS;
+
+// The portion of the MODEMDEVSETTINGS that is saved in the registry as Default
+typedef struct _RegDevSettings
+ {
+ DWORD dwCallSetupFailTimer; // seconds
+ DWORD dwInactivityTimeout; // units specified in the InactivityScale value
+ DWORD dwSpeakerVolume; // level
+ DWORD dwSpeakerMode; // mode
+ DWORD dwPreferredModemOptions; // bitmap
+ } REGDEVSETTINGS, FAR * LPREGDEVSETTINGS;
+
+#pragma pack()
+
+#endif // _MCX16_H_
diff --git a/private/unimodem/inc/mcxioctl.h b/private/unimodem/inc/mcxioctl.h
new file mode 100644
index 000000000..ce4a403bd
--- /dev/null
+++ b/private/unimodem/inc/mcxioctl.h
@@ -0,0 +1,65 @@
+//****************************************************************************
+//
+// File: mcxioctl.h
+// Content: This file contains the declaration for Unimodem
+// DeviceIOControl.
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+//****************************************************************************
+
+#ifndef _MCXIOCTL_H_
+#define _MCXIOCTL_H_
+
+// DeviceIOControl Input/Output structure
+//
+typedef struct tagMdmIn {
+ DWORD dwPendingID;
+ DWORD dwParam;
+ CHAR szAddress[1];
+} MDM_IN, *PMDM_IN;
+
+typedef struct tagMdmOut {
+ DWORD dwResult;
+} MDM_OUT, *PMDM_OUT;
+
+// DeviceIOControl operations
+//
+#define IOCTL_UMDM_INIT 1
+#define IOCTL_UMDM_DIAL 2
+#define IOCTL_UMDM_START_MONITOR 3
+#define IOCTL_UMDM_STOP_MONITOR 4
+#define IOCTL_UMDM_START_MONITOR_DISCONNECT 5
+#define IOCTL_UMDM_STOP_MONITOR_DISCONNECT 6
+#define IOCTL_UMDM_ANSWER 7
+#define IOCTL_UMDM_HANGUP 8
+#define IOCTL_UMDM_PASSTHOUGH 9
+#define IOCTL_UMDM_GETLINKSPEED 10
+
+// Monitor modes for IOCTL_UMDM_START_MONITOR
+//
+#define MONITOR_NON_CONTINUOUS 0
+#define MONITOR_CONTINUOUS 1
+
+// Passthrough modes for IOCTL_UMDM_PASSTHROUGH
+//
+#define PASSTHROUGH_ON 1
+#define PASSTHROUGH_OFF 2
+#define PASSTHROUGH_OFF_BUT_CONNECTED 3
+
+// DeviceIOControl operation result
+//
+#define MDM_SUCCESS 0
+#define MDM_CANCEL 1
+#define MDM_FAILURE 2
+#define MDM_HANGUP 3
+#define MDM_BUSY 4
+#define MDM_NOANSWER 5
+#define MDM_NOCARRIER 6
+#define MDM_NODIALTONE 7
+
+// Invalid Pending operation ID
+//
+#define MDM_ID_NULL 0xFFFFFFFF
+
+#endif // _MCXIOCTL_H_
diff --git a/private/unimodem/inc/modem.h b/private/unimodem/inc/modem.h
new file mode 100644
index 000000000..02c6be045
--- /dev/null
+++ b/private/unimodem/inc/modem.h
@@ -0,0 +1,29 @@
+//****************************************************************************
+//
+// File: modem.h
+// Content: This file contains the general modem-related declaration
+//
+// Copyright (c) 1992-1994, Microsoft Corporation, all rights reserved
+//
+// History:
+// Thu 07-Jul-1994 21:16:59 -by- Viroon Touranachun [viroont]
+// Created
+//****************************************************************************
+
+#ifndef _MODEM_H_
+#define _MODEM_H_
+
+//****************************************************************************
+// Constant Definitions
+//****************************************************************************
+
+// DeviceType defines
+//
+#define DT_NULL_MODEM 0
+#define DT_EXTERNAL_MODEM 1
+#define DT_INTERNAL_MODEM 2
+#define DT_PCMCIA_MODEM 3
+#define DT_PARALLEL_PORT 4
+#define DT_PARALLEL_MODEM 5
+
+#endif //_MODEM_H_
diff --git a/private/unimodem/inc/modemp.h b/private/unimodem/inc/modemp.h
new file mode 100644
index 000000000..185c353b3
--- /dev/null
+++ b/private/unimodem/inc/modemp.h
@@ -0,0 +1,283 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// File: modemp.h
+//
+// This files contains the private modem structures and defines shared
+// between Unimodem components.
+//
+//---------------------------------------------------------------------------
+
+#ifndef __MODEMP_H__
+#define __MODEMP_H__
+
+#ifndef WIN32
+//------------------------------------------------------------------------
+// These structures are the Win32 versions, defined in WINBASE.H and MCX.H,
+// but we cannot include them because we are 16-bit. So here they are...
+//------------------------------------------------------------------------
+
+#pragma pack(4) // make this align every 32-bits
+
+//
+// Serial provider type.
+//
+
+#define SP_SERIALCOMM ((DWORD)0x00000001)
+
+//
+// Provider SubTypes
+//
+
+#define PST_UNSPECIFIED ((DWORD)0x00000000)
+#define PST_RS232 ((DWORD)0x00000001)
+#define PST_PARALLELPORT ((DWORD)0x00000002)
+#define PST_RS422 ((DWORD)0x00000003)
+#define PST_RS423 ((DWORD)0x00000004)
+#define PST_RS449 ((DWORD)0x00000005)
+#define PST_MODEM ((DWORD)0x00000006)
+#define PST_FAX ((DWORD)0x00000021)
+#define PST_SCANNER ((DWORD)0x00000022)
+#define PST_NETWORK_BRIDGE ((DWORD)0x00000100)
+#define PST_LAT ((DWORD)0x00000101)
+#define PST_TCPIP_TELNET ((DWORD)0x00000102)
+#define PST_X25 ((DWORD)0x00000103)
+
+
+//
+// Provider capabilities flags.
+//
+
+#define PCF_DTRDSR ((DWORD)0x0001)
+#define PCF_RTSCTS ((DWORD)0x0002)
+#define PCF_RLSD ((DWORD)0x0004)
+#define PCF_PARITY_CHECK ((DWORD)0x0008)
+#define PCF_XONXOFF ((DWORD)0x0010)
+#define PCF_SETXCHAR ((DWORD)0x0020)
+#define PCF_TOTALTIMEOUTS ((DWORD)0x0040)
+#define PCF_INTTIMEOUTS ((DWORD)0x0080)
+#define PCF_SPECIALCHARS ((DWORD)0x0100)
+#define PCF_16BITMODE ((DWORD)0x0200)
+
+//
+// Comm provider settable parameters.
+//
+
+#define SP_PARITY ((DWORD)0x0001)
+#define SP_BAUD ((DWORD)0x0002)
+#define SP_DATABITS ((DWORD)0x0004)
+#define SP_STOPBITS ((DWORD)0x0008)
+#define SP_HANDSHAKING ((DWORD)0x0010)
+#define SP_PARITY_CHECK ((DWORD)0x0020)
+#define SP_RLSD ((DWORD)0x0040)
+
+//
+// Settable baud rates in the provider.
+//
+
+#define BAUD_075 ((DWORD)0x00000001)
+#define BAUD_110 ((DWORD)0x00000002)
+#define BAUD_134_5 ((DWORD)0x00000004)
+#define BAUD_150 ((DWORD)0x00000008)
+#define BAUD_300 ((DWORD)0x00000010)
+#define BAUD_600 ((DWORD)0x00000020)
+#define BAUD_1200 ((DWORD)0x00000040)
+#define BAUD_1800 ((DWORD)0x00000080)
+#define BAUD_2400 ((DWORD)0x00000100)
+#define BAUD_4800 ((DWORD)0x00000200)
+#define BAUD_7200 ((DWORD)0x00000400)
+#define BAUD_9600 ((DWORD)0x00000800)
+#define BAUD_14400 ((DWORD)0x00001000)
+#define BAUD_19200 ((DWORD)0x00002000)
+#define BAUD_38400 ((DWORD)0x00004000)
+#define BAUD_56K ((DWORD)0x00008000)
+#define BAUD_128K ((DWORD)0x00010000)
+#define BAUD_115200 ((DWORD)0x00020000)
+#define BAUD_57600 ((DWORD)0x00040000)
+#define BAUD_USER ((DWORD)0x10000000)
+
+//
+// Settable Data Bits
+//
+
+#define DATABITS_5 ((WORD)0x0001)
+#define DATABITS_6 ((WORD)0x0002)
+#define DATABITS_7 ((WORD)0x0004)
+#define DATABITS_8 ((WORD)0x0008)
+#define DATABITS_16 ((WORD)0x0010)
+#define DATABITS_16X ((WORD)0x0020)
+
+//
+// Settable Stop and Parity bits.
+//
+
+#define STOPBITS_10 ((WORD)0x0001)
+#define STOPBITS_15 ((WORD)0x0002)
+#define STOPBITS_20 ((WORD)0x0004)
+#define PARITY_NONE ((WORD)0x0100)
+#define PARITY_ODD ((WORD)0x0200)
+#define PARITY_EVEN ((WORD)0x0400)
+#define PARITY_MARK ((WORD)0x0800)
+#define PARITY_SPACE ((WORD)0x1000)
+
+//
+// DTR Control Flow Values.
+//
+#define DTR_CONTROL_DISABLE 0x00
+#define DTR_CONTROL_ENABLE 0x01
+#define DTR_CONTROL_HANDSHAKE 0x02
+
+//
+// RTS Control Flow Values
+//
+#define RTS_CONTROL_DISABLE 0x00
+#define RTS_CONTROL_ENABLE 0x01
+#define RTS_CONTROL_HANDSHAKE 0x02
+#define RTS_CONTROL_TOGGLE 0x03
+
+typedef struct _WIN32DCB {
+ DWORD DCBlength; /* sizeof(DCB) */
+ DWORD BaudRate; /* Baudrate at which running */
+ DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
+ DWORD fParity: 1; /* Enable parity checking */
+ DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
+ DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
+ DWORD fDtrControl:2; /* DTR Flow control */
+ DWORD fDsrSensitivity:1; /* DSR Sensitivity */
+ DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
+ DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
+ DWORD fInX: 1; /* Enable input X-ON/X-OFF */
+ DWORD fErrorChar: 1; /* Enable Err Replacement */
+ DWORD fNull: 1; /* Enable Null stripping */
+ DWORD fRtsControl:2; /* Rts Flow control */
+ DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
+ DWORD fDummy2:17; /* Reserved */
+ WORD wReserved; /* Not currently used */
+ WORD XonLim; /* Transmit X-ON threshold */
+ WORD XoffLim; /* Transmit X-OFF threshold */
+ BYTE ByteSize; /* Number of bits/byte, 4-8 */
+ BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
+ BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
+ char XonChar; /* Tx and Rx X-ON character */
+ char XoffChar; /* Tx and Rx X-OFF character */
+ char ErrorChar; /* Error replacement char */
+ char EofChar; /* End of Input character */
+ char EvtChar; /* Recieved Event character */
+} WIN32DCB, FAR *LPWIN32DCB;
+
+#pragma pack()
+
+#else // !WIN32
+
+typedef DCB WIN32DCB;
+typedef DCB * LPWIN32DCB;
+
+// Keep this until this is defined in the NT SDK copy of mcx.h
+#ifndef MDM_V23_OVERRIDE
+#define MDM_V23_OVERRIDE 0x00000400
+#endif
+
+#endif // !WIN32
+
+#define COMMCONFIG_VERSION_1 1
+
+
+//------------------------------------------------------------------------
+//------------------------------------------------------------------------
+
+
+//
+// Registry forms of the MODEMDEVCAPS and MODEMSETTINGS structures.
+// These should match the ones in unimodem\mcx\internal.h.
+//
+
+// The portion of the MODEMDEVCAPS that is saved in the registry
+// as Properties
+typedef struct _RegDevCaps
+ {
+ DWORD dwDialOptions; // bitmap of supported values
+ DWORD dwCallSetupFailTimer; // maximum in seconds
+ DWORD dwInactivityTimeout; // maximum in the units specified in the InactivityScale value
+ DWORD dwSpeakerVolume; // bitmap of supported values
+ DWORD dwSpeakerMode; // bitmap of supported values
+ DWORD dwModemOptions; // bitmap of supported values
+ DWORD dwMaxDTERate; // maximum value in bit/s
+ DWORD dwMaxDCERate; // maximum value in bit/s
+ } REGDEVCAPS, FAR * LPREGDEVCAPS;
+
+// The portion of the MODEMSETTINGS that is saved in the registry
+// as Default
+typedef struct _RegDevSettings
+ {
+ DWORD dwCallSetupFailTimer; // seconds
+ DWORD dwInactivityTimeout; // units specified in the InactivityScale value
+ DWORD dwSpeakerVolume; // level
+ DWORD dwSpeakerMode; // mode
+ DWORD dwPreferredModemOptions; // bitmap
+ } REGDEVSETTINGS, FAR * LPREGDEVSETTINGS;
+
+
+//
+// DeviceType defines
+//
+
+#define DT_NULL_MODEM 0
+#define DT_EXTERNAL_MODEM 1
+#define DT_INTERNAL_MODEM 2
+#define DT_PCMCIA_MODEM 3
+#define DT_PARALLEL_PORT 4
+#define DT_PARALLEL_MODEM 5
+
+//------------------------------------------------------------------------
+//------------------------------------------------------------------------
+
+#ifdef UNICODE
+#define drvCommConfigDialog drvCommConfigDialogW
+#define drvGetDefaultCommConfig drvGetDefaultCommConfigW
+#define drvSetDefaultCommConfig drvSetDefaultCommConfigW
+#else
+#define drvCommConfigDialog drvCommConfigDialogA
+#define drvGetDefaultCommConfig drvGetDefaultCommConfigA
+#define drvSetDefaultCommConfig drvSetDefaultCommConfigA
+#endif
+
+DWORD
+APIENTRY
+drvCommConfigDialog(
+ IN LPCTSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc);
+
+DWORD
+APIENTRY
+drvGetDefaultCommConfig(
+ IN LPCTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize);
+
+DWORD
+APIENTRY
+drvSetDefaultCommConfig(
+ IN LPTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize);
+
+
+//------------------------------------------------------------------------
+//------------------------------------------------------------------------
+
+// These are the flags for MODEM_INSTALL_WIZARD
+#define MIWF_DEFAULT 0x00000000
+#define MIWF_INSET_WIZARD 0x00000001 // hwndWizardDlg must be owner's
+ // wizard frame
+#define MIWF_BACKDOOR 0x00000002 // enter wizard thru last page
+
+// The ExitButton field can be:
+//
+// PSBTN_BACK
+// PSBTN_NEXT
+// PSBTN_FINISH
+// PSBTN_CANCEL
+
+#endif // __MODEMP_H__
diff --git a/private/unimodem/inc/rovcomm.h b/private/unimodem/inc/rovcomm.h
new file mode 100644
index 000000000..b925e37bd
--- /dev/null
+++ b/private/unimodem/inc/rovcomm.h
@@ -0,0 +1,1087 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovcomm.h
+//
+// Declares common and useful data structures, macros and functions.
+// These items are broken down into the following sections. Defining
+// the associated flags will inhibit definition of the indicated
+// items.
+//
+// NORTL - run-time library functions
+// NOBASICS - basic macros
+// NOMEM - memory management, dynamic array functions
+// NODA - dynamic array functions
+// NOSHAREDHEAP - shared heap functions
+// NOFILEINFO - FileInfo functions
+// NOCOLORHELP - helper macros to derive COLOR_ values from state
+// NODRAWTEXT - enhanced version of DrawText
+// NODIALOGHELPER - dialog helper functions
+// NOMESSAGESTRING - construct message string functions
+// NOSTRING - string functions
+// NOPATH - path whacking functions
+// NODEBUGHELP - debug routines
+// NOSYNC - synchronization (critical sections, etc.)
+// NOPROFILE - profile (.ini) support functions
+// NODI - setup API Device Installer wrappers
+//
+// Optional defines are:
+//
+// WANT_SHELL_SUPPORT - include SH* function support
+// SZ_MODULEA - debug string prepended to debug spew
+// SZ_MODULEW - (wide-char) debug string prepended to debug spew
+// SHARED_DLL - DLL is in shared memory (may require
+// per-instance data)
+// SZ_DEBUGSECTION - .ini section name for debug options
+// SZ_DEBUGINI - .ini name for debug options
+//
+// This is the "master" header. The associated files are:
+//
+// rovcomm.c
+// rovpath.c
+// rovmem.c, rovmem.h
+// rovini.c
+//
+// If you want debug macros, be sure to include rovdbg.h in one (and
+// only one) of your project source files. This contains the three function
+// helpers.
+//
+// History:
+// 04-26-95 ScottH Transferred from Briefcase code
+// Added controlling defines
+//
+
+#ifndef __ROVCOMM_H__
+#define __ROVCOMM_H__
+
+#ifdef RC_INVOKED
+// Turn off a bunch of stuff to ensure that RC files compile OK
+#define NOMEM
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NODIALOGHELPER
+#define NOMESSAGESTRING
+#define NOSTRING
+#define NOPATH
+#define NODEBUGHELP
+#define NOSYNC
+#define NOPROFILE
+#define NODI
+#endif // RC_INVOKED
+
+#ifdef JUSTDEBUGSTUFF
+#define NORTL
+#define NOMEM
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NODIALOGHELPER
+#define NOMESSAGESTRING
+#define NOPROFILE
+#define NOSTRING
+#define NOPATH
+#define NOSYNC
+#define NODI
+#endif // JUSTDEBUGSTUFF
+
+#ifdef _INC_OLE
+#define WANT_OLE_SUPPORT
+#endif
+
+// Check for any conflicting defines...
+
+#if !defined(WANT_SHELL_SUPPORT) && !defined(NOFILEINFO)
+#pragma message("FileInfo routines need WANT_SHELL_SUPPORT. Not providing FileInfo routines.")
+#define NOFILEINFO
+#endif
+
+#if !defined(NOFILEINFO) && defined(NOMEM)
+#pragma message("FileInfo routines need NOMEM undefined. Overriding.")
+#undef NOMEM
+#endif
+
+#if !defined(NOFILEINFO) && defined(NOMESSAGESTRING)
+#pragma message("FileInfo routines need NOMESSAGESTRING undefined. Overriding.")
+#undef NOMESSAGESTRING
+#endif
+
+#if !defined(NOFILEINFO) && defined(NOSTRING)
+#pragma message("FileInfo routines need NOSTRING undefined. Overriding.")
+#undef NOSTRING
+#endif
+
+#if !defined(NOMESSAGESTRING) && defined(NOMEM)
+#pragma message("ConstructMessage routines need NOMEM undefined. Overriding.")
+#undef NOMEM
+#endif
+
+#if !defined(NOPATH) && defined(NOSTRING)
+#pragma message("Path routines need NOSTRING undefined. Overriding.")
+#undef NOSTRING
+#endif
+
+#if !defined(NODA) && defined(NOMEM)
+#pragma message("Dynamic Array routines need NOMEM undefined. Overriding.")
+#undef NOMEM
+#endif
+
+#if !defined(NOSHAREDHEAP) && defined(NOMEM)
+#pragma message("Shared memory routines need NOMEM undefined. Overriding.")
+#undef NOMEM
+#endif
+
+#if !defined(NOPROFILE) && defined(NODEBUGHELP)
+#pragma message("Debug profiling routines need NODEBUGHELP undefined. Overriding.")
+#undef NODEBUGHELP
+#endif
+
+#if !defined(NOPROFILE) && defined(NOSTRING)
+#pragma message("Private profile needs NOSTRING undefined. Overriding.")
+#undef NOSTRING
+#endif
+
+#if DBG > 0 && !defined(DEBUG)
+#define DEBUG
+#endif
+#if DBG > 0 && !defined(FULL_DEBUG)
+#define FULL_DEBUG
+#endif
+
+
+// Other include files...
+
+#if !defined(NOFILEINFO) && !defined(_SHLOBJ_H_)
+#include <shlobj.h>
+#endif
+
+#if !defined(NODEBUGHELP) && !defined(_VA_LIST_DEFINED)
+#include <stdarg.h>
+#endif
+
+#if !defined(WINNT)
+#define WIN95
+#else
+#undef WIN95
+#endif
+
+
+//
+// Basics
+//
+#ifndef NOBASICS
+
+#define Unref(x) x
+
+#ifdef DEBUG
+#define INLINE
+#define DEBUG_CODE(x) x
+#else
+#define INLINE __inline
+#define DEBUG_CODE(x)
+#endif
+
+#ifdef UNICODE
+#define SZ_MODULE SZ_MODULEW
+#else
+#define SZ_MODULE SZ_MODULEA
+#endif // UNICODE
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+#ifndef IN
+#define IN
+#endif
+#ifndef OUT
+#define OUT
+#endif
+
+// General flag macros
+//
+#define SetFlag(obj, f) do {obj |= (f);} while (0)
+#define ToggleFlag(obj, f) do {obj ^= (f);} while (0)
+#define ClearFlag(obj, f) do {obj &= ~(f);} while (0)
+#define IsFlagSet(obj, f) (BOOL)(((obj) & (f)) == (f))
+#define IsFlagClear(obj, f) (BOOL)(((obj) & (f)) != (f))
+
+#define InRange(id, idFirst, idLast) ((UINT)(id-idFirst) <= (UINT)(idLast-idFirst))
+
+// Standard buffer lengths
+//
+#define MAX_BUF 260
+#define MAX_BUF_MSG 520
+#define MAX_BUF_MED 64
+#define MAX_BUF_SHORT 32
+#define MAX_BUF_REG 128 // Should be same as MAX_REG_KEY_LEN
+
+#define NULL_CHAR '\0'
+#define ARRAYSIZE(rg) (sizeof(rg) / sizeof((rg)[0]))
+#define ARRAY_ELEMENTS(rg) ARRAYSIZE(rg)
+#define SIZECHARS(rg) ARRAYSIZE(rg)
+
+// Comparison return values
+//
+#define CMP_GREATER 1
+#define CMP_LESSER (-1)
+#define CMP_EQUAL 0
+
+// Count of characters to count of bytes
+//
+#define CbFromCchW(cch) ((cch)*sizeof(WCHAR))
+#define CbFromCchA(cch) ((cch)*sizeof(CHAR))
+#ifdef UNICODE
+#define CbFromCch CbFromCchW
+#else // UNICODE
+#define CbFromCch CbFromCchA
+#endif // UNICODE
+
+// 64-bit macros
+//
+#define HIDWORD(_qw) (DWORD)((_qw)>>32)
+#define LODWORD(_qw) (DWORD)(_qw)
+
+// Calling declarations
+//
+#define PUBLIC FAR PASCAL
+#define CPUBLIC FAR CDECL
+#define PRIVATE NEAR PASCAL
+
+// Range of resource ID indexes are 0x000 - 0x7ff
+#define IDS_BASE 0x1000
+#define IDS_ERR_BASE (IDS_BASE + 0x0000)
+#define IDS_OOM_BASE (IDS_BASE + 0x0800)
+#define IDS_MSG_BASE (IDS_BASE + 0x1000)
+#define IDS_RANDO_BASE (IDS_BASE + 0x1800)
+#define IDS_COMMON_BASE (IDS_BASE + 0x2000)
+
+// Resource string IDs for FileInfo
+#define IDS_BYTES (IDS_COMMON_BASE + 0x000)
+#define IDS_ORDERKB (IDS_COMMON_BASE + 0x001)
+#define IDS_ORDERMB (IDS_COMMON_BASE + 0x002)
+#define IDS_ORDERGB (IDS_COMMON_BASE + 0x003)
+#define IDS_ORDERTB (IDS_COMMON_BASE + 0x004)
+#define IDS_DATESIZELINE (IDS_COMMON_BASE + 0x005)
+
+
+#ifndef DECLARE_STANDARD_TYPES
+// For a type "FOO", define the standard derived types PFOO, CFOO, and PCFOO.
+//
+#define DECLARE_STANDARD_TYPES(type) typedef type FAR *P##type; \
+ typedef const type C##type; \
+ typedef const type FAR *PC##type;
+#endif
+
+// Zero-initialize data-item
+//
+#define ZeroInitSize(pobj, cb) MyZeroMemory(pobj, cb)
+#define ZeroInit(pobj) MyZeroMemory(pobj, sizeof(*(pobj)))
+
+// Copy chunk of memory
+//
+#define BltByte(pdest, psrc, cb) MyMoveMemory(pdest, psrc, cb)
+
+// Porting macros
+//
+#ifdef WIN32
+
+#define ISVALIDHINSTANCE(hinst) ((BOOL)hinst)
+#define LOCALOF(lp) (lp)
+#define OFFSETOF(lp) (lp)
+#define FIELDOFFSET(type, field) ((int)(&((type NEAR*)1)->field)-1)
+
+#define DATASEG_READONLY ".text"
+#define DATASEG_PERINSTANCE ".instanc"
+#define DATASEG_SHARED ".data"
+
+#else // WIN32
+
+#define ISVALIDHINSTANCE(hinst) ((UINT)hinst >= (UINT)HINSTANCE_ERROR)
+#define LOCALOF(lp) ((HLOCAL)OFFSETOF(lp))
+
+#define DATASEG_READONLY "_TEXT"
+#define DATASEG_PERINSTANCE
+#define DATASEG_SHARED
+
+typedef LPCSTR LPCTSTR;
+typedef LPSTR LPTSTR;
+typedef char TCHAR;
+
+#endif // WIN32
+
+#define LocalFreePtr(p) LocalFree((HLOCAL)OFFSETOF(p))
+
+typedef UINT FAR *LPUINT;
+
+#endif // NOBASICS
+
+
+//
+// Run-time library replacements
+//
+#ifdef NORTL
+
+// (implemented privately)
+LPWSTR
+PUBLIC
+lmemmoveW(
+ LPWSTR dst,
+ LPCWSTR src,
+ DWORD count);
+LPSTR
+PUBLIC
+lmemmoveA(
+ LPSTR dst,
+ LPCSTR src,
+ DWORD count);
+#ifdef UNICODE
+#define lmemmove lmemmoveW
+#else
+#define lmemmove lmemmoveA
+#endif // UNICODE
+
+LPWSTR
+PUBLIC
+lmemsetW(
+ LPWSTR dst,
+ WCHAR val,
+ DWORD count);
+LPSTR
+PUBLIC
+lmemsetA(
+ LPSTR dst,
+ CHAR val,
+ DWORD count);
+#ifdef UNICODE
+#define lmemset lmemsetW
+#else
+#define lmemset lmemsetA
+#endif // UNICODE
+
+#define MyZeroMemory(p, cb) lmemset((LPTSTR)(p), 0, cb)
+#define MyMoveMemory(pdest, psrc, cb) lmemmove((LPTSTR)(pdest), (LPCTSTR)(psrc), cb)
+
+#else // NORTL
+
+#define MyZeroMemory ZeroMemory
+#define MyMoveMemory MoveMemory
+
+#endif // NORTL
+
+
+//
+// Memory and dynamic array functions
+//
+#ifndef NOMEM
+#include "rovmem.h"
+#endif // NOMEM
+
+
+//
+// Message string helpers
+//
+#ifndef NOMESSAGESTRING
+
+#if !defined(WIN32) && !defined(LANG_NEUTRAL)
+#define LANG_NEUTRAL 0x00
+#endif
+
+LPWSTR
+PUBLIC
+ConstructVMessageStringW(
+ HINSTANCE hinst,
+ LPCWSTR pwszMsg,
+ va_list FAR * ArgList);
+LPSTR
+PUBLIC
+ConstructVMessageStringA(
+ HINSTANCE hinst,
+ LPCSTR pszMsg,
+ va_list FAR * ArgList);
+#ifdef UNICODE
+#define ConstructVMessageString ConstructVMessageStringW
+#else // UNICODE
+#define ConstructVMessageString ConstructVMessageStringA
+#endif // UNICODE
+
+BOOL
+CPUBLIC
+ConstructMessageW(
+ LPWSTR FAR * ppwsz,
+ HINSTANCE hinst,
+ LPCWSTR pwszMsg, ...);
+BOOL
+CPUBLIC
+ConstructMessageA(
+ LPSTR FAR * ppsz,
+ HINSTANCE hinst,
+ LPCSTR pszMsg, ...);
+#ifdef UNICODE
+#define ConstructMessage ConstructMessageW
+#else // UNICODE
+#define ConstructMessage ConstructMessageA
+#endif // UNICODE
+
+#define SzFromIDSW(hinst, ids, pwszBuf, cchBuf) (LoadStringW(hinst, ids, pwszBuf, cchBuf), pwszBuf)
+#define SzFromIDSA(hinst, ids, pszBuf, cchBuf) (LoadStringA(hinst, ids, pszBuf, cchBuf), pszBuf)
+
+#ifdef UNICODE
+#define SzFromIDS SzFromIDSW
+#else // UNICODE
+#define SzFromIDS SzFromIDSA
+#endif // UNICODE
+
+int
+CPUBLIC
+MsgBoxW(
+ HINSTANCE hinst,
+ HWND hwndOwner,
+ LPCWSTR pwszText,
+ LPCWSTR pwszCaption,
+ HICON hicon,
+ DWORD dwStyle, ...);
+int
+CPUBLIC
+MsgBoxA(
+ HINSTANCE hinst,
+ HWND hwndOwner,
+ LPCSTR pszText,
+ LPCSTR pszCaption,
+ HICON hicon,
+ DWORD dwStyle, ...);
+#ifdef UNICODE
+#define MsgBox MsgBoxW
+#else // UNICODE
+#define MsgBox MsgBoxA
+#endif // UNICODE
+
+// Additional MB_ flags
+#define MB_WARNING (MB_OK | MB_ICONWARNING)
+#define MB_INFO (MB_OK | MB_ICONINFORMATION)
+#define MB_ERROR (MB_OK | MB_ICONERROR)
+#define MB_QUESTION (MB_YESNO | MB_ICONQUESTION)
+
+#endif // NOMESSAGESTRING
+
+
+//
+// String functions
+//
+#ifndef NOSTRING
+
+BOOL
+PUBLIC
+AnsiToIntW(
+ LPCWSTR pszString,
+ int FAR * piRet);
+BOOL
+PUBLIC
+AnsiToIntA(
+ LPCSTR pszString,
+ int FAR * piRet);
+#ifdef UNICODE
+#define AnsiToInt AnsiToIntW
+#else
+#define AnsiToInt AnsiToIntA
+#endif // UNICODE
+
+LPWSTR
+PUBLIC
+AnsiChrW(
+ LPCWSTR psz,
+ WORD wMatch);
+LPSTR
+PUBLIC
+AnsiChrA(
+ LPCSTR psz,
+ WORD wMatch);
+#ifdef UNICODE
+#define AnsiChr AnsiChrW
+#else
+#define AnsiChr AnsiChrA
+#endif // UNICODE
+
+LPWSTR
+PUBLIC
+AnsiRChrW(
+ LPCWSTR psz,
+ WORD wMatch);
+#ifdef UNICODE
+#define AnsiRChr AnsiRChrW
+#else
+#define AnsiRChr
+#endif // UNICODE
+
+#define IsSzEqual(sz1, sz2) (BOOL)(lstrcmpi(sz1, sz2) == 0)
+#define IsSzEqualC(sz1, sz2) (BOOL)(lstrcmp(sz1, sz2) == 0)
+
+#ifdef WIN32
+#define lstrnicmp(sz1, sz2, cch) (CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, sz1, cch, sz2, cch) - 2)
+#define lstrncmp(sz1, sz2, cch) (CompareString(LOCALE_USER_DEFAULT, 0, sz1, cch, sz2, cch) - 2)
+#else
+int PUBLIC lstrnicmp(LPCSTR psz1, LPCSTR psz2, UINT count);
+int PUBLIC lstrncmp(LPCSTR psz1, LPCSTR psz2, UINT count);
+#endif // WIN32
+
+#define IsSzEqualN(sz1, sz2, cch) (BOOL)(0 == lstrnicmp(sz1, sz2, cch))
+#define IsSzEqualNC(sz1, sz2, cch) (BOOL)(0 == lstrncmp(sz1, sz2, cch))
+
+#endif // NOSTRING
+
+
+//
+// FileInfo functions
+//
+#if !defined(NOFILEINFO) && defined(WIN95)
+
+// FileInfo struct that contains file time/size info
+//
+typedef struct _FileInfo
+ {
+ HICON hicon;
+ FILETIME ftMod;
+ DWORD dwSize; // size of the file
+ DWORD dwAttributes; // attributes
+ LPARAM lParam;
+ LPSTR pszDisplayName; // points to the display name
+ CHAR szPath[1];
+ } FileInfo;
+
+#define FIGetSize(pfi) ((pfi)->dwSize)
+#define FIGetPath(pfi) ((pfi)->szPath)
+#define FIGetDisplayName(pfi) ((pfi)->pszDisplayName)
+#define FIGetAttributes(pfi) ((pfi)->dwAttributes)
+#define FIIsFolder(pfi) (IsFlagSet((pfi)->dwAttributes, SFGAO_FOLDER))
+
+// Flags for FICreate
+#define FIF_DEFAULT 0x0000
+#define FIF_ICON 0x0001
+#define FIF_DONTTOUCH 0x0002
+#define FIF_FOLDER 0x0004
+
+HRESULT PUBLIC FICreate(LPCSTR pszPath, FileInfo ** ppfi, UINT uFlags);
+BOOL PUBLIC FISetPath(FileInfo ** ppfi, LPCSTR pszPathNew, UINT uFlags);
+BOOL PUBLIC FIGetInfoString(FileInfo * pfi, LPSTR pszBuf, int cchBuf);
+void PUBLIC FIFree(FileInfo * pfi);
+
+void PUBLIC FileTimeToDateTimeString(LPFILETIME pft, LPSTR pszBuf, int cchBuf);
+
+#endif // NOFILEINFO
+
+
+//
+// Color-from-owner-draw-state macros
+//
+#ifndef NOCOLORHELP
+
+#define ColorText(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT)
+#define ColorBk(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW)
+#define ColorMenuText(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_MENUTEXT)
+#define ColorMenuBk(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU)
+#define GetImageDrawStyle(nState) (((nState) & ODS_SELECTED) ? ILD_SELECTED : ILD_NORMAL)
+
+#endif // NOCOLORHELP
+
+
+//
+// Dialog helper functions
+//
+#ifndef NODIALOGHELPER
+
+// Sets the dialog handle in the given data struct on first
+// message that the dialog gets (WM_SETFONT).
+//
+#define SetDlgHandle(hwnd, msg, lp) if((msg)==WM_SETFONT) (lp)->hdlg=(hwnd);
+
+#define DoModal DialogBoxParam
+
+VOID
+PUBLIC
+SetRectFromExtentW(
+ HDC hdc,
+ LPRECT lprc,
+ LPCWSTR lpcwsz);
+VOID
+PUBLIC
+SetRectFromExtentA(
+ HDC hdc,
+ LPRECT lprc,
+ LPCSTR lpcsz);
+#ifdef UNICODE
+#define SetRectFromExtent SetRectFromExtentW
+#else
+#define SetRectFromExtent SetRectFromExtentA
+#endif // UNICODE
+
+#endif // NODIALOGHELPER
+
+
+//
+// Enhanced form of DrawText()
+//
+#ifndef NODRAWTEXT
+
+// Flags for MyDrawText()
+#define MDT_DRAWTEXT 0x00000001
+#define MDT_ELLIPSES 0x00000002
+#define MDT_LINK 0x00000004
+#define MDT_SELECTED 0x00000008
+#define MDT_DESELECTED 0x00000010
+#define MDT_DEPRESSED 0x00000020
+#define MDT_EXTRAMARGIN 0x00000040
+#define MDT_TRANSPARENT 0x00000080
+#define MDT_LEFT 0x00000100
+#define MDT_RIGHT 0x00000200
+#define MDT_CENTER 0x00000400
+#define MDT_VCENTER 0x00000800
+#define MDT_CLIPPED 0x00001000
+
+#ifndef CLR_DEFAULT // (usually defined in commctrl.h)
+#define CLR_DEFAULT 0xFF000000L
+#endif
+
+void
+PUBLIC
+MyDrawTextW(
+ HDC hdc,
+ LPCWSTR pwszText,
+ RECT FAR* prc,
+ UINT flags,
+ int cyChar,
+ int cxEllipses,
+ COLORREF clrText,
+ COLORREF clrTextBk);
+void
+PUBLIC
+MyDrawTextA(
+ HDC hdc,
+ LPCSTR pszText,
+ RECT FAR* prc,
+ UINT flags,
+ int cyChar,
+ int cxEllipses,
+ COLORREF clrText,
+ COLORREF clrTextBk);
+#ifdef UNICODE
+#define MyDrawText MyDrawTextW
+#else
+#define MyDrawText MyDrawTextA
+#endif // UNICODE
+
+
+void PUBLIC GetCommonMetrics(WPARAM wParam);
+
+extern int g_cxLabelMargin;
+extern int g_cxBorder;
+extern int g_cyBorder;
+
+extern COLORREF g_clrHighlightText;
+extern COLORREF g_clrHighlight;
+extern COLORREF g_clrWindowText;
+extern COLORREF g_clrWindow;
+
+extern HBRUSH g_hbrHighlight;
+extern HBRUSH g_hbrWindow;
+
+#endif // NODRAWTEXT
+
+//
+// Synchronization
+//
+#ifndef NOSYNC
+
+#if defined(WIN95)
+
+#define INIT_EXCLUSIVE() Common_InitExclusive();
+#define ENTER_EXCLUSIVE() Common_EnterExclusive();
+#define LEAVE_EXCLUSIVE() Common_LeaveExclusive();
+#define ASSERT_EXCLUSIVE() ASSERT(0 < g_cRefCommonCS)
+#define ASSERT_NOT_EXCLUSIVE() ASSERT(0 == g_cRefCommonCS)
+
+extern UINT g_cRefCommonCS;
+
+void PUBLIC Common_InitExclusive(void);
+void PUBLIC Common_EnterExclusive(void);
+void PUBLIC Common_LeaveExclusive(void);
+
+#endif // WIN95
+
+// Safe version of MsgWaitMultipleObjects()
+//
+DWORD PUBLIC MsgWaitObjectsSendMessage(DWORD cObjects, LPHANDLE phObjects, DWORD dwTimeout);
+
+#else // NOSYNC
+
+#if defined(WIN95)
+
+#define INIT_EXCLUSIVE()
+#define ENTER_EXCLUSIVE()
+#define LEAVE_EXCLUSIVE()
+#define ASSERT_EXCLUSIVE()
+#define ASSERT_NOT_EXCLUSIVE()
+
+#endif
+
+#endif // NOSYNC
+
+
+//
+// Path whacking functions
+//
+#if !defined(NOPATH) && defined(WIN95)
+
+BOOL PUBLIC WPPathIsRoot(LPCSTR pszPath);
+BOOL PUBLIC WPPathIsUNC(LPCSTR pszPath);
+LPSTR PUBLIC WPRemoveBackslash(LPSTR lpszPath);
+LPSTR PUBLIC WPRemoveExt(LPCSTR pszPath, LPSTR pszBuf);
+LPSTR PUBLIC WPFindNextComponentI(LPCSTR lpszPath);
+void PUBLIC WPMakePresentable(LPSTR pszPath);
+BOOL PUBLIC WPPathsTooLong(LPCSTR pszFolder, LPCSTR pszName);
+void PUBLIC WPCanonicalize(LPCSTR pszPath, LPSTR pszBuf);
+LPSTR PUBLIC WPFindFileName(LPCSTR pPath);
+BOOL PUBLIC WPPathExists(LPCSTR pszPath);
+LPCSTR PUBLIC WPFindEndOfRoot(LPCSTR pszPath);
+BOOL PUBLIC WPPathIsPrefix(LPCSTR lpcszPath1, LPCSTR lpcszPath2);
+
+#ifdef WANT_SHELL_SUPPORT
+LPSTR PUBLIC WPGetDisplayName(LPCSTR pszPath, LPSTR pszBuf);
+
+// Events for WPNotifyShell
+typedef enum _notifyshellevent
+ {
+ NSE_CREATE = 0,
+ NSE_MKDIR,
+ NSE_UPDATEITEM,
+ NSE_UPDATEDIR
+ } NOTIFYSHELLEVENT;
+
+void PUBLIC WPNotifyShell(LPCSTR pszPath, NOTIFYSHELLEVENT nse, BOOL bDoNow);
+#endif // WANT_SHELL_SUPPORT
+
+#endif // !defined(NOPATH) && defined(WIN95)
+
+
+//
+// Profile (.ini) support functions
+//
+// (Currently all profile functions are for DEBUG use only
+#ifndef DEBUG
+#define NOPROFILE
+#endif
+#ifndef NOPROFILE
+
+#ifndef SZ_DEBUGINI
+#pragma message("SZ_DEBUGINI is not #defined. Assuming \"rover.ini\".")
+#define SZ_DEBUGINI "rover.ini"
+#endif
+#ifndef SZ_DEBUGSECTION
+#pragma message("SZ_DEBUGSECTION is not #defined. Assuming [Debug].")
+#define SZ_DEBUGSECTION "Debug"
+#endif
+
+BOOL PUBLIC RovComm_ProcessIniFile(void);
+
+#else // NOPROFILE
+
+#define RovComm_ProcessIniFile() 1 ? (BOOL)TRUE : (void)0
+
+#endif // NOPROFILE
+
+
+//
+// Debug helper functions
+//
+
+
+// Break flags
+#define BF_ONVALIDATE 0x00000001
+#define BF_ONOPEN 0x00000002
+#define BF_ONCLOSE 0x00000004
+#define BF_ONRUNONCE 0x00000008
+#define BF_ONTHREADATT 0x00000010
+#define BF_ONTHREADDET 0x00000020
+#define BF_ONPROCESSATT 0x00000040
+#define BF_ONPROCESSDET 0x00000080
+#define BF_ONAPIENTER 0x00000100
+
+// Trace flags
+#define TF_ALWAYS 0x00000000
+#define TF_WARNING 0x00000001
+#define TF_ERROR 0x00000002
+#define TF_GENERAL 0x00000004 // Standard messages
+#define TF_FUNC 0x00000008 // Trace function calls
+// (Upper 16 bits reserved for user)
+
+#if defined(NODEBUGHELP) || !defined(DEBUG)
+
+#define DEBUG_BREAK 1 ? (void)0 : (void)
+#define ASSERT(f)
+#define EVAL(f) (f)
+#define ASSERT_MSG 1 ? (void)0 : (void)
+#define DEBUG_MSG 1 ? (void)0 : (void)
+#define TRACE_MSGA 1 ? (void)0 : (void)
+#define TRACE_MSGW 1 ? (void)0 : (void)
+#ifdef UNICODE
+#define TRACE_MSG TRACE_MSGW
+#else
+#define TRACE_MSG TRACE_MSGA
+#endif
+
+#define VERIFY_SZ(f, szFmt, x) (f)
+#define VERIFY_SZ2(f, szFmt, x1, x2) (f)
+
+#define DBG_ENTER(fn)
+#define DBG_ENTER_SZ(fn, sz)
+#define DBG_ENTER_DTOBJ(fn, pdtobj, sz)
+#define DBG_ENTER_RIID(fn, riid)
+#define DBG_ENTER_UL(fn, ul)
+
+#define DBG_EXIT(fn)
+#define DBG_EXIT_TYPE(fn, dw, pfnStrFromType)
+#define DBG_EXIT_INT(fn, n)
+#define DBG_EXIT_BOOL(fn, b)
+#define DBG_EXIT_US(fn, us)
+#define DBG_EXIT_UL(fn, ul)
+#define DBG_EXIT_DWORD DBG_EXIT_UL
+#define DBG_EXIT_PTR(fn, ptr)
+#define DBG_EXIT_HRES(fn, hres)
+
+#else // defined(NODEBUGHELP) || !defined(DEBUG)
+
+extern DWORD g_dwDumpFlags;
+extern DWORD g_dwBreakFlags;
+extern DWORD g_dwTraceFlags;
+
+// Debugging macros
+//
+#ifndef SZ_MODULEA
+#error SZ_MODULEA is not #defined
+#endif
+#if defined(UNICODE) && !defined(SZ_MODULEW)
+#error SZ_MODULEW is not #defined
+#endif
+
+#define DEBUG_CASE_STRING(x) case x: return #x
+
+#define DEBUG_STRING_MAPW(x) { x, TEXT(#x) }
+#define DEBUG_STRING_MAPA(x) { x, #x }
+#ifdef UNICODE
+#define DEBUG_STRING_MAP DEBUG_STRING_MAPW
+#else // UNICODE
+#define DEBUG_STRING_MAP DEBUG_STRING_MAPA
+#endif // UNICODE
+
+#define ASSERTSEG
+
+// Use this macro to declare message text that will be placed
+// in the CODE segment (useful if DS is getting full)
+//
+// Ex: DEBUGTEXT(szMsg, "Invalid whatever: %d");
+//
+#define DEBUGTEXT(sz, msg) \
+ static const CHAR ASSERTSEG sz[] = msg;
+
+void PUBLIC CommonDebugBreak(DWORD flag);
+void PUBLIC CommonAssertFailed(LPCSTR szFile, int line);
+
+void
+CPUBLIC
+CommonAssertMsgW(
+ BOOL f,
+ LPCWSTR pwszMsg, ...);
+void
+CPUBLIC
+CommonAssertMsgA(
+ BOOL f,
+ LPCSTR pszMsg, ...);
+#ifdef UNICODE
+#define CommonAssertMsg CommonAssertMsgW
+#else
+#define CommonAssertMsg CommonAssertMsgA
+#endif // UNICODE
+
+BOOL WINAPI
+DisplayDebug(
+ DWORD flag
+ );
+
+
+void
+CPUBLIC
+CommonDebugMsgW(
+ DWORD mask,
+ LPCSTR pszMsg, ...);
+void
+CPUBLIC
+CommonDebugMsgA(
+ DWORD mask,
+ LPCSTR pszMsg, ...);
+#ifdef UNICODE
+#define CommonDebugMsg CommonDebugMsgW
+#else
+#define CommonDebugMsg CommonDebugMsgA
+#endif // UNICODE
+
+LPCWSTR
+PUBLIC
+Dbg_SafeStrW(
+ LPCWSTR pwsz);
+LPCSTR
+PUBLIC
+Dbg_SafeStrA(
+ LPCSTR psz);
+#ifdef UNICODE
+#define Dbg_SafeStr Dbg_SafeStrW
+#else
+#define Dbg_SafeStr Dbg_SafeStrA
+#endif // UNICODE
+
+#define DEBUG_BREAK CommonDebugBreak
+
+// ASSERT(f) -- Generate "assertion failed in line x of file.c"
+// message if f is NOT true.
+//
+#define ASSERT(f) \
+ { \
+ DEBUGTEXT(szFile, __FILE__); \
+ if (!(f)) \
+ CommonAssertFailed(szFile, __LINE__); \
+ }
+#define EVAL ASSERT
+
+// ASSERT_MSG(f, msg, args...) -- Generate wsprintf-formatted
+// messsage w/params if f is NOT true.
+//
+#define ASSERT_MSG CommonAssertMsg
+
+// TRACE_MSG(mask, msg, args...) - Generate wsprintf-formatted msg using
+// specified debug mask. System debug mask
+// governs whether message is output.
+//
+#define TRACE_MSGW CommonDebugMsgW
+#define TRACE_MSGA CommonDebugMsgA
+#define TRACE_MSG CommonDebugMsg
+
+// VERIFY_SZ(f, msg, arg) -- Generate wsprintf-formatted msg w/ 1 param
+// if f is NOT true
+//
+#define VERIFY_SZ(f, szFmt, x) ASSERT_MSG(f, szFmt, x)
+
+
+// VERIFY_SZ2(f, msg, arg1, arg2) -- Generate wsprintf-formatted msg w/ 2
+// param if f is NOT true
+//
+#define VERIFY_SZ2(f, szFmt, x1, x2) ASSERT_MSG(f, szFmt, x1, x2)
+
+
+
+// DBG_ENTER(fn) -- Generates a function entry debug spew for
+// a function
+//
+#define DBG_ENTER(fn) \
+ TRACE_MSG(TF_FUNC, " > " #fn "()")
+
+
+// DBG_ENTER_SZ(fn, sz) -- Generates a function entry debug spew for
+// a function that accepts a string as one of its
+// parameters.
+//
+#define DBG_ENTER_SZ(fn, sz) \
+ TRACE_MSG(TF_FUNC, " > " #fn "(..., \"%s\",...)", Dbg_SafeStr(sz))
+
+
+// DBG_ENTER_UL(fn, ul) -- Generates a function entry debug spew for
+// a function that accepts a DWORD as one of its
+// parameters.
+//
+#define DBG_ENTER_UL(fn, ul) \
+ TRACE_MSG(TF_FUNC, " > " #fn "(..., %#08lx,...)", (ULONG)(ul))
+
+
+#ifdef WANT_OLE_SUPPORT
+// DBG_ENTER_RIID(fn, riid) -- Generates a function entry debug spew for
+// a function that accepts an riid as one of its
+// parameters.
+//
+#define DBG_ENTER_RIID(fn, riid) \
+ TRACE_MSG(TF_FUNC, " > " #fn "(..., %s,...)", Dbg_GetRiidName(riid))
+#endif
+
+
+// DBG_EXIT(fn) -- Generates a function exit debug spew
+//
+#define DBG_EXIT(fn) \
+ TRACE_MSG(TF_FUNC, " < " #fn "()")
+
+// DBG_EXIT_TYPE(fn, dw, pfnStrFromType) -- Generates a function exit debug
+// spew for functions that return <type>.
+//
+#define DBG_EXIT_TYPE(fn, dw, pfnStrFromType) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %s", (LPCTSTR)pfnStrFromType(dw))
+
+// DBG_EXIT_INT(fn, us) -- Generates a function exit debug spew for
+// functions that return an INT.
+//
+#define DBG_EXIT_INT(fn, n) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %d", (int)(n))
+
+// DBG_EXIT_BOOL(fn, b) -- Generates a function exit debug spew for
+// functions that return a boolean.
+//
+#define DBG_EXIT_BOOL(fn, b) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %s", (b) ? (LPTSTR)TEXT("TRUE") : (LPTSTR)TEXT("FALSE"))
+
+// DBG_EXIT_US(fn, us) -- Generates a function exit debug spew for
+// functions that return a USHORT.
+//
+#define DBG_EXIT_US(fn, us) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %#x", (USHORT)(us))
+
+// DBG_EXIT_UL(fn, ul) -- Generates a function exit debug spew for
+// functions that return a ULONG.
+//
+#define DBG_EXIT_UL(fn, ul) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %#08lx", (ULONG)(ul))
+#define DBG_EXIT_DWORD DBG_EXIT_UL
+
+// DBG_EXIT_PTR(fn, pv) -- Generates a function exit debug spew for
+// functions that return a pointer.
+//
+#define DBG_EXIT_PTR(fn, pv) \
+ TRACE_MSG(TF_FUNC, " < " #fn "() with %#lx", (LPVOID)(pv))
+
+// DBG_EXIT_HRES(fn, hres) -- Generates a function exit debug spew for
+// functions that return an HRESULT.
+//
+#define DBG_EXIT_HRES(fn, hres) DBG_EXIT_TYPE(fn, hres, Dbg_GetScode)
+
+#endif // defined(NODEBUGHELP) || !defined(DEBUG)
+
+
+//
+// Standard functions
+//
+
+BOOL PUBLIC RovComm_Init(HINSTANCE hinst);
+BOOL PUBLIC RovComm_Terminate(HINSTANCE hinst);
+
+
+// Admin related
+BOOL PUBLIC IsAdminUser(void);
+
+//
+// Device Installer wrappers and helper functions
+//
+
+#ifndef NODI
+
+#include <rovdi.h>
+
+#endif // NODI
+
+
+#endif // __ROVCOMM_H__
diff --git a/private/unimodem/inc/rovdbg.h b/private/unimodem/inc/rovdbg.h
new file mode 100644
index 000000000..fdb1808f1
--- /dev/null
+++ b/private/unimodem/inc/rovdbg.h
@@ -0,0 +1,56 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovdbg.h
+//
+// Provides debug macro code that is needed to allow the binary to
+// link.
+//
+// This file should be included by only one source in your project.
+// If you get multiple redefinitions of the supplied functions, then
+// you are not doing something right. Sorry to be so blunt.
+//
+// These functions are not declared if NODEBUGHELP is defined.
+//
+// History:
+// 09-21-95 ScottH Created
+//
+
+#ifndef __ROVDBG_H__
+#define __ROVDBG_H__
+
+#if !defined(__ROVCOMM_H__)
+#error ROVCOMM.H must be included to use the common debug macros!
+#endif
+
+#if !defined(NODEBUGHELP) && defined(DEBUG)
+
+#pragma data_seg(DATASEG_READONLY)
+
+#ifndef NOPROFILE
+
+WCHAR const FAR c_szRovIniFile[] = SZ_DEBUGINI;
+WCHAR const FAR c_szRovIniSecDebugUI[] = SZ_DEBUGSECTION;
+
+#endif
+
+#ifdef WINNT
+
+// We don't use the TEXT() macro's here, because we want to define these as
+// Unicode even when were in a non-unicode module.
+WCHAR const FAR c_wszNewline[] = L"\r\n";
+WCHAR const FAR c_wszTrace[] = L"t " SZ_MODULEW L" ";
+WCHAR const FAR c_wszAssertFailed[] = SZ_MODULEW L" Assertion failed in %s on line %d\r\n";
+
+#endif // WINNT
+
+CHAR const FAR c_szNewline[] = "\r\n";
+CHAR const FAR c_szTrace[] = "t " SZ_MODULEA " ";
+CHAR const FAR c_szAssertFailed[] = SZ_MODULEA " Assertion failed in %s on line %d\r\n";
+
+#pragma data_seg()
+
+
+#endif // !defined(NODEBUGHELP) && defined(DEBUG)
+
+#endif __ROVDBG_H__
diff --git a/private/unimodem/inc/rovdi.h b/private/unimodem/inc/rovdi.h
new file mode 100644
index 000000000..66be0a0ed
--- /dev/null
+++ b/private/unimodem/inc/rovdi.h
@@ -0,0 +1,292 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// rovdi.h
+//
+// History:
+// 11-13-95 ScottH Separated from NT modem class installer
+//
+
+#ifndef __ROVDI_H__
+#define __ROVDI_H__
+
+#ifdef WINNT
+
+#include <setupapi.h>
+
+//------------------------------------------------------------------------
+//------------------------------------------------------------------------
+
+//
+// Enumerate ports
+//
+DECLARE_HANDLE32(HPORTDATA);
+
+typedef BOOL (WINAPI FAR * ENUMPORTPROC)(HPORTDATA hportdata, LPARAM lParam);
+
+DWORD
+APIENTRY
+EnumeratePorts(
+ IN ENUMPORTPROC pfnDevice,
+ IN LPARAM lParam); OPTIONAL
+
+
+typedef struct tagPORTDATA_A
+ {
+ DWORD cbSize;
+ DWORD nSubclass;
+ CHAR szPort[MAX_BUF];
+ CHAR szFriendly[MAX_BUF];
+ } PORTDATA_A, FAR * LPPORTDATA_A;
+
+typedef struct tagPORTDATA_W
+ {
+ DWORD cbSize;
+ DWORD nSubclass;
+ WCHAR szPort[MAX_BUF];
+ WCHAR szFriendly[MAX_BUF];
+ } PORTDATA_W, FAR * LPPORTDATA_W;
+#ifdef UNICODE
+#define PORTDATA PORTDATA_W
+#define LPPORTDATA LPPORTDATA_W
+#else
+#define PORTDATA PORTDATA_A
+#define LPPORTDATA LPPORTDATA_A
+#endif
+
+// Port subclass values
+#define PORT_SUBCLASS_PARALLEL 0
+#define PORT_SUBCLASS_SERIAL 1
+
+
+BOOL
+APIENTRY
+PortData_GetPropertiesW(
+ IN HPORTDATA hportdata,
+ OUT LPPORTDATA_W pdataBuf);
+BOOL
+APIENTRY
+PortData_GetPropertiesA(
+ IN HPORTDATA hportdata,
+ OUT LPPORTDATA_A pdataBuf);
+#ifdef UNICODE
+#define PortData_GetProperties PortData_GetPropertiesW
+#else
+#define PortData_GetProperties PortData_GetPropertiesA
+#endif
+
+
+//
+// These set of routines map friendly names of ports to
+// (non-friendly) port names, and vice-versa.
+//
+
+DECLARE_HANDLE32(HPORTMAP);
+
+BOOL
+APIENTRY
+PortMap_Create(
+ OUT HPORTMAP FAR * phportmap);
+
+DWORD
+APIENTRY
+PortMap_GetCount(
+ IN HPORTMAP hportmap);
+
+BOOL
+APIENTRY
+PortMap_GetFriendlyW(
+ IN HPORTMAP hportmap,
+ IN LPCWSTR pwszPortName,
+ OUT LPWSTR pwszBuf,
+ IN DWORD cchBuf);
+BOOL
+APIENTRY
+PortMap_GetFriendlyA(
+ IN HPORTMAP hportmap,
+ IN LPCSTR pszPortName,
+ OUT LPSTR pszBuf,
+ IN DWORD cchBuf);
+#ifdef UNICODE
+#define PortMap_GetFriendly PortMap_GetFriendlyW
+#else
+#define PortMap_GetFriendly PortMap_GetFriendlyA
+#endif
+
+
+BOOL
+APIENTRY
+PortMap_GetPortNameW(
+ IN HPORTMAP hportmap,
+ IN LPCWSTR pwszFriendly,
+ OUT LPWSTR pwszBuf,
+ IN DWORD cchBuf);
+BOOL
+APIENTRY
+PortMap_GetPortNameA(
+ IN HPORTMAP hportmap,
+ IN LPCSTR pszFriendly,
+ OUT LPSTR pszBuf,
+ IN DWORD cchBuf);
+#ifdef UNICODE
+#define PortMap_GetPortName PortMap_GetPortNameW
+#else
+#define PortMap_GetPortName PortMap_GetPortNameA
+#endif
+
+BOOL
+APIENTRY
+PortMap_Free(
+ IN HPORTMAP hportmap);
+
+
+//-----------------------------------------------------------------------------------
+// Wrappers to insulate us a little bit if we need it. We need it.
+//-----------------------------------------------------------------------------------
+
+#define CplDiCreateDeviceInfoList SetupDiCreateDeviceInfoList
+#define CplDiGetDeviceInfoListClass SetupDiGetDeviceInfoListClass
+#define CplDiCreateDeviceInfo SetupDiCreateDeviceInfo
+#define CplDiOpenDeviceInfo SetupDiOpenDeviceInfo
+#define CplDiGetDeviceInstanceId SetupDiGetDeviceInstanceId
+#define CplDiDeleteDeviceInfo SetupDiDeleteDeviceInfo
+#define CplDiEnumDeviceInfo SetupDiEnumDeviceInfo
+#define CplDiDestroyDeviceInfoList SetupDiDestroyDeviceInfoList
+#define CplDiRegisterDeviceInfo SetupDiRegisterDeviceInfo
+#define CplDiBuildDriverInfoList SetupDiBuildDriverInfoList
+#define CplDiEnumDriverInfo SetupDiEnumDriverInfo
+#define CplDiGetSelectedDriver SetupDiGetSelectedDriver
+#define CplDiSetSelectedDriver SetupDiSetSelectedDriver
+#define CplDiGetDriverInfoDetail SetupDiGetDriverInfoDetail
+#define CplDiDestroyDriverInfoList SetupDiDestroyDriverInfoList
+#define CplDiGetClassDevs SetupDiGetClassDevs
+#define CplDiGetClassDescription SetupDiGetClassDescription
+#define CplDiOpenClassRegKey SetupDiOpenClassRegKey
+#define CplDiCreateDevRegKey SetupDiCreateDevRegKey
+#define CplDiOpenDevRegKey SetupDiOpenDevRegKey
+#define CplDiGetHwProfileList SetupDiGetHwProfileList
+#define CplDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryProperty
+#define CplDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryProperty
+#define CplDiGetClassInstallParams SetupDiGetClassInstallParams
+#define CplDiSetClassInstallParams SetupDiSetClassInstallParams
+#define CplDiGetDeviceInstallParams SetupDiGetDeviceInstallParams
+#define CplDiSetDeviceInstallParams SetupDiSetDeviceInstallParams
+#define CplDiGetDriverInstallParams SetupDiGetDriverInstallParams
+#define CplDiSetDriverInstallParams SetupDiSetDriverInstallParams
+#define CplDiClassNameFromGuid SetupDiClassNameFromGuid
+#define CplDiClassGuidsFromName SetupDiClassGuidsFromName
+#define CplDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyName
+#define CplDiGetWizardPage SetupDiGetWizardPage
+#define CplDiGetSelectedDevice SetupDiGetSelectedDevice
+#define CplDiSetSelectedDevice SetupDiSetSelectedDevice
+#define CplDiInstallDevice SetupDiInstallDevice
+#define CplDiCallClassInstaller SetupDiCallClassInstaller
+#define CplDiRemoveDevice SetupDiRemoveDevice
+#define CplDiGetActualSectionToInstall SetupDiGetActualSectionToInstall
+
+
+// Private modem properties structure
+typedef struct tagMODEM_PRIV_PROP
+ {
+ DWORD cbSize;
+ DWORD dwMask;
+ TCHAR szFriendlyName[MAX_BUF_REG];
+ DWORD nDeviceType;
+ TCHAR szPort[MAX_BUF_REG];
+ } MODEM_PRIV_PROP, FAR * PMODEM_PRIV_PROP;
+
+// Mask bitfield for MODEM_PRIV_PROP
+#define MPPM_FRIENDLY_NAME 0x00000001
+#define MPPM_DEVICE_TYPE 0x00000002
+#define MPPM_PORT 0x00000004
+
+BOOL
+PUBLIC
+CplDiGetPrivateProperties(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData,
+ OUT PMODEM_PRIV_PROP pmpp);
+
+// These ordinal values are bus types for CplDiGetBusType
+#define BUS_TYPE_ROOT 1
+#define BUS_TYPE_PCMCIA 2
+#define BUS_TYPE_SERENUM 3
+#define BUS_TYPE_LPTENUM 4
+#define BUS_TYPE_OTHER 5
+
+BOOL
+PUBLIC
+CplDiGetBusType(
+ IN HDEVINFO hdi,
+ IN PSP_DEVINFO_DATA pdevData, OPTIONAL
+ OUT LPDWORD pdwBusType);
+
+
+// Functions to support common device Responses key:
+
+// Common key flags for OpenCommonResponseskey() and OpenCommonDriverKey().
+typedef enum
+{
+ CKFLAG_OPEN = 0x0001,
+ CKFLAG_CREATE = 0x0002
+
+} CKFLAGS;
+
+
+BOOL
+PUBLIC
+OpenCommonDriverKey(
+ IN HKEY hkeyDrv, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ IN REGSAM samAccess,
+ OUT PHKEY phkeyComDrv);
+
+
+BOOL
+PUBLIC
+OpenCommonResponsesKey(
+ IN HKEY hkeyDrv,
+ IN CKFLAGS ckFlags,
+ IN REGSAM samAccess,
+ OUT PHKEY phkeyResp,
+ OUT LPDWORD lpdwExisted);
+
+
+BOOL
+PUBLIC
+OpenResponsesKey(
+ IN HKEY hkeyDrv,
+ OUT PHKEY phkeyResp);
+
+
+BOOL
+PUBLIC
+FindCommonDriverKeyName(
+ IN HKEY hkeyDrv,
+ IN DWORD cbKeyName,
+ OUT LPTSTR pszKeyName);
+
+
+BOOL
+PUBLIC
+GetCommonDriverKeyName(
+ IN HKEY hkeyDrv, OPTIONAL
+ IN PSP_DRVINFO_DATA pdrvData, OPTIONAL
+ IN DWORD cbKeyName,
+ OUT LPTSTR pszKeyName);
+
+
+BOOL
+PUBLIC
+DeleteCommonDriverKey(
+ IN HKEY hkeyDrv);
+
+
+BOOL
+PUBLIC
+DeleteCommonDriverKeyByName(
+ IN LPTSTR pszKeyName);
+
+#endif // WINNT
+
+#endif __ROVDI_H__
diff --git a/private/unimodem/inc/rovmem.h b/private/unimodem/inc/rovmem.h
new file mode 100644
index 000000000..26b429c8e
--- /dev/null
+++ b/private/unimodem/inc/rovmem.h
@@ -0,0 +1,297 @@
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// rovmem.h
+//
+// Memory management functions.
+//
+// History:
+// 09-27-94 ScottH Partially taken from commctrl
+// 04-29-95 ScottH Taken from briefcase and cleaned up
+//
+
+// This file is included by <rovcomm.h>
+
+#ifndef _ROVMEM_H_
+#define _ROVMEM_H_
+
+//
+// Memory routines
+//
+
+//
+// Non-shared memory allocation
+//
+
+// void * GAlloc(DWORD cbBytes)
+// Alloc a chunk of memory, quickly, with no 64k limit on size of
+// individual objects or total object size. Initialize to zero.
+//
+#define GAlloc(cbBytes) GlobalAlloc(GPTR, cbBytes)
+
+// void * GReAlloc(void * pv, DWORD cbNewSize)
+// Realloc one of above. If pv is NULL, then this function will do
+// an alloc for you. Initializes new portion to zero.
+//
+#define GReAlloc(pv, cbNewSize) GlobalReAlloc(pv, cbNewSize, GMEM_MOVEABLE | GMEM_ZEROINIT)
+
+// void GFree(void *pv)
+// Free pv if it is nonzero. Set pv to zero.
+//
+#define GFree(pv) do { (pv) ? GlobalFree(pv) : (void)0; pv = NULL; } while (0)
+
+// DWORD GGetSize(void *pv)
+// Get the size of a block allocated by Alloc()
+//
+#define GGetSize(pv) GlobalSize(pv)
+
+// type * GAllocType(type); (macro)
+// Alloc some memory the size of <type> and return pointer to <type>.
+//
+#define GAllocType(type) (type FAR *)GAlloc(sizeof(type))
+
+// type * GAllocArray(type, int cNum); (macro)
+// Alloc an array of data the size of <type>.
+//
+#define GAllocArray(type, cNum) (type FAR *)GAlloc(sizeof(type) * (cNum))
+
+// type * GReAllocArray(type, void * pb, int cNum);
+//
+#define GReAllocArray(type, pb, cNum) (type FAR *)GReAlloc(pb, sizeof(type) * (cNum))
+
+// (Re)allocates *ppszBuf and copies psz into *ppszBuf
+//
+BOOL
+PUBLIC
+SetStringW(
+ LPWSTR FAR * ppwszBuf,
+ LPCWSTR pwsz);
+BOOL
+PUBLIC
+SetStringA(
+ LPSTR FAR * ppszBuf,
+ LPCSTR psz);
+#ifdef UNICODE
+#define SetString SetStringW
+#else // UNICODE
+#define SetString SetStringA
+#endif // UNICODE
+
+
+// (Re)allocates *ppszBuf and concatenates psz onto *ppszBuf
+//
+BOOL
+PUBLIC
+CatStringW(
+ IN OUT LPWSTR FAR * ppszBuf,
+ IN LPCWSTR psz);
+BOOL
+PUBLIC
+CatStringA(
+ IN OUT LPSTR FAR * ppszBuf,
+ IN LPCSTR psz);
+#ifdef UNICODE
+#define CatString CatStringW
+#else // UNICODE
+#define CatString CatStringA
+#endif // UNICODE
+
+
+BOOL
+PUBLIC
+CatMultiStringW(
+ IN OUT LPWSTR FAR * ppszBuf,
+ IN LPCWSTR psz);
+BOOL
+PUBLIC
+CatMultiStringA(
+ IN OUT LPSTR FAR * ppszBuf,
+ IN LPCSTR psz);
+#ifdef UNICODE
+#define CatMultiString CatMultiStringW
+#else // UNICODE
+#define CatMultiString CatMultiStringA
+#endif // UNICODE
+
+
+//
+// Shared memory allocation functions.
+//
+#if !defined(NOSHAREDHEAP) && defined(WIN95)
+
+// SharedTerminate() must be called before the app/dll is terminated.
+//
+void PUBLIC SharedTerminate();
+
+// PVOID SharedAlloc(DWORD cb);
+// Alloc a chunk of memory, quickly, with no 64k limit on size of
+// individual objects or total object size. Initialize to zero.
+//
+PVOID PUBLIC SharedAlloc(DWORD cb);
+
+// PVOID SharedReAlloc(PVOID pv, DWORD cb);
+// Realloc one of above. If pb is NULL, then this function will do
+// an alloc for you. Initializes new portion to zero.
+//
+PVOID PUBLIC SharedReAlloc(PVOID pv, DWORD cb);
+
+// void SharedFree(PVOID pv);
+// If pv is nonzero, free it. Sets pv to zero.
+//
+void PUBLIC _SharedFree(PVOID pv);
+#define SharedFree(pv) do { (pv) ? _SharedFree(pv) : (void)0; pv = NULL; } while (0)
+
+// DWORD SharedGetSize(PVOID pv);
+// Get the size of a block allocated by Alloc()
+//
+DWORD PUBLIC SharedGetSize(PVOID pv);
+
+
+// type * SharedAllocType(type); (macro)
+// Alloc some memory the size of <type> and return pointer to <type>.
+//
+#define SharedAllocType(type) (type FAR *)SharedAlloc(sizeof(type))
+
+// type * SharedAllocArray(type, int cNum); (macro)
+// Alloc an array of data the size of <type>.
+//
+#define SharedAllocArray(type, cNum) (type FAR *)SharedAlloc(sizeof(type) * (cNum))
+
+// type * SharedReAllocArray(type, void * pb, int cNum);
+//
+#define SharedReAllocArray(type, pb, cNum) (type FAR *)SharedReAlloc(pb, sizeof(type) * (cNum))
+
+// (Re)allocates *ppszBuf and copies psz into *ppszBuf
+//
+BOOL PUBLIC SharedSetString(LPTSTR FAR * ppszBuf, LPCTSTR psz);
+
+#else // NOSHAREDHEAP
+
+#define SharedAlloc(cbBytes) GAlloc(cbBytes)
+#define SharedReAlloc(pv, cb) GReAlloc(pv, cb)
+#define SharedFree(pv) GFree(pv)
+#define SharedGetSize(pv) GGetSize(pv)
+#define SharedAllocType(type) (type FAR *)SharedAlloc(sizeof(type))
+#define SharedAllocArray(type, cNum) (type FAR *)SharedAlloc(sizeof(type) * (cNum))
+#define SharedReAllocArray(type, pb, cNum) (type FAR *)SharedReAlloc(pb, sizeof(type) * (cNum))
+#define SharedSetString(ppszBuf, psz) SetString(ppszBuf, psz)
+
+#endif // NOSHAREDHEAP
+
+
+#ifndef NODA
+//
+// Internal functions
+//
+
+#ifdef WIN32
+//
+// These macros are used in our controls, that in 32 bits we simply call
+// LocalAlloc as to have the memory associated with the process that created
+// it and as such will be cleaned up if the process goes away.
+//
+
+LPVOID PUBLIC MemAlloc(HANDLE hheap, DWORD cb);
+LPVOID PUBLIC MemReAlloc(HANDLE hheap, LPVOID pb, DWORD cb);
+BOOL PUBLIC MemFree(HANDLE hheap, LPVOID pb);
+DWORD PUBLIC MemSize(HANDLE hheap, LPVOID pb);
+
+#else // WIN32
+
+// In 16 bit code we need the Allocs to go from our heap code as we do not
+// want to limit them to 64K of data. If we have some type of notification of
+// 16 bit application termination, We may want to see if we can
+// dedicate different heaps for different processes to cleanup...
+
+#define MemAlloc(hheap, cb) Alloc(cb) /* calls to verify heap exists */
+#define MemReAlloc(hheap, pb, cb) ReAlloc(pb, cb)
+#define MemFree(hheap, pb) Free(pb)
+#define MemSize(hheap, pb) GetSize((LPCVOID)pb)
+
+#endif // WIN32
+
+
+//
+// Structure Array
+//
+#define SA_ERR (-1)
+#define SA_APPEND 0x7fffffff
+
+typedef struct _SA FAR * HSA;
+
+HSA PUBLIC SACreate(int cbItem, int cItemGrow, HANDLE hheap, DWORD dwFlags);
+
+// Flags for SACreate
+#define SAF_DEFAULT 0x0000
+#define SAF_SHARED 0x0001
+#define SAF_HEAP 0x0002
+
+BOOL PUBLIC SADestroy(HSA hsa);
+BOOL PUBLIC SAGetItem(HSA hsa, int i, LPVOID pitem);
+LPVOID PUBLIC SAGetItemPtr(HSA hsa, int i);
+BOOL PUBLIC SASetItem(HSA hsa, int i, LPVOID pitem);
+int PUBLIC SAInsertItem(HSA hsa, int i, LPVOID pitem);
+BOOL PUBLIC SADeleteItem(HSA hsa, int i);
+BOOL PUBLIC SADeleteAllItems(HSA hsa);
+#define SAGetCount(hsa) (*(int FAR*)(hsa))
+
+//
+// Pointer Array
+//
+#define PA_ERR (-1)
+#define PA_APPEND 0x7fffffff
+
+typedef struct _PA FAR * HPA;
+
+HPA PUBLIC PACreate(int cItemGrow, HANDLE hheap, DWORD dwFlags);
+
+// Flags for PACreate
+#define PAF_DEFAULT 0x0000
+#define PAF_SHARED 0x0001
+#define PAF_HEAP 0x0002
+
+typedef void (CALLBACK *PFNPAFREE)(LPVOID pv, LPARAM lParam);
+
+BOOL PUBLIC PADestroyEx(HPA hpa, PFNPAFREE pfnFree, LPARAM lParam);
+#define PADestroy(hpa) PADestroyEx(hpa, NULL, 0)
+
+HPA PUBLIC PAClone(HPA hpa, HPA hpaNew);
+LPVOID PUBLIC PAGetPtr(HPA hpa, int i);
+int PUBLIC PAGetPtrIndex(HPA hpa, LPVOID p);
+BOOL PUBLIC PAGrow(HPA pdpa, int cp);
+BOOL PUBLIC PASetPtr(HPA hpa, int i, LPVOID p);
+int PUBLIC PAInsertPtr(HPA hpa, int i, LPVOID p);
+LPVOID PUBLIC PADeletePtr(HPA hpa, int i);
+BOOL PUBLIC PADeleteAllPtrsEx(HPA hpa, PFNPAFREE pfnFree, LPARAM lParam);
+#define PADeleteAllPtrs(hpa) PADeleteAllPtrsEx(hpa, NULL, 0)
+#define PAGetCount(hpa) (*(int FAR*)(hpa))
+#define PAGetPtrPtr(hpa) (*((LPVOID FAR* FAR*)((BYTE FAR*)(hpa) + sizeof(int))))
+#define PAFastGetPtr(hpa, i) (PAGetPtrPtr(hpa)[i])
+
+typedef int (CALLBACK *PFNPACOMPARE)(LPVOID p1, LPVOID p2, LPARAM lParam);
+
+BOOL PUBLIC PASort(HPA hpa, PFNPACOMPARE pfnCompare, LPARAM lParam);
+
+// Search array. If PAS_SORTED, then array is assumed to be sorted
+// according to pfnCompare, and binary search algorithm is used.
+// Otherwise, linear search is used.
+//
+// Searching starts at iStart (0 to start search at beginning).
+//
+// PAS_INSERTBEFORE/AFTER govern what happens if an exact match is not
+// found. If neither are specified, this function returns -1 if no exact
+// match is found. Otherwise, the index of the item before or after the
+// closest (including exact) match is returned.
+//
+// Search option flags
+//
+#define PAS_SORTED 0x0001
+#define PAS_INSERTBEFORE 0x0002
+#define PAS_INSERTAFTER 0x0004
+
+int PUBLIC PASearch(HPA hpa, LPVOID pFind, int iStart,
+ PFNPACOMPARE pfnCompare,
+ LPARAM lParam, UINT options);
+#endif // NODA
+
+#endif // _ROVMEM_H_
diff --git a/private/unimodem/inc/slot.h b/private/unimodem/inc/slot.h
new file mode 100644
index 000000000..a8ea4fbe9
--- /dev/null
+++ b/private/unimodem/inc/slot.h
@@ -0,0 +1,32 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Interface to the unimodem TSP notification mechanism:
+// The lower level (notifXXXX) APIs
+//
+//****************************************************************************
+
+#define MAX_NOTIFICATION_NAME_SIZE 256
+
+
+typedef DWORD HNOTIFICATION;
+
+HNOTIFICATION notifCreate(BOOL fServer, LPCTSTR lptszName, DWORD dwMaxSize,
+ DWORD dwMaxPending);
+void notifFree(HNOTIFICATION hn);
+
+HANDLE notifGetObj(HNOTIFICATION hn);
+DWORD notifGetMaxSize(HNOTIFICATION hn);
+BOOL notifReadMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb, LPDWORD lpdwRead);
+BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb);
+BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb);
diff --git a/private/unimodem/inc/tspnotif.h b/private/unimodem/inc/tspnotif.h
new file mode 100644
index 000000000..a8dec23c7
--- /dev/null
+++ b/private/unimodem/inc/tspnotif.h
@@ -0,0 +1,62 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: TSPNOTIF.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Interface to the Unimodem TSP notification mechanism:
+// the UnimodemNotifyTSP function, and related typedefs...
+// UnimodemNotifyTSP is private export of the tsp.
+//
+//****************************************************************************
+#ifndef _TSPNOTIF_H_
+
+#define _TSPNOTIF_H_
+
+#define SLOTNAME_UNIMODEM_NOTIFY_TSP TEXT("UnimodemNotifyTSP")
+#define dwNFRAME_SIG (0x8cb45651L)
+#define MAX_NOTIFICATION_FRAME_SIZE 512
+
+
+//------------------- Types of notifications --------------------
+
+#define TSPNOTIF_TYPE_CPL 0x1000 // Modem CPL Event Notification
+
+#define TSPNOTIF_TYPE_DEBUG 0x2000 // DEBUG Event Notification
+
+//------------------- Common flags ------------------------------
+#define fTSPNOTIF_FLAG_UNICODE (0x1L<<31) // If set, all embedded text is
+ // in UNICODE.
+
+
+#define TSP_VALID_FRAME(_frame) ((_frame)->dwSig==dwNFRAME_SIG)
+#define TSP_DEBUG_FRAME(_frame) ((_frame)->dwType==TSPNOTIF_TYPE_DEBUG)
+#define TSP_CPL_FRAME(_frame) ((_frame)->dwType==TSPNOTIF_TYPE_CPL)
+
+// The basic frame used to send data to the TSP
+typedef struct
+{
+ DWORD dwSig; // MUST be dwNFRAME_SIG
+ DWORD dwSize; // Entire size of this structure
+ DWORD dwType; // One of the TSPNOTIF_TYPE_ constants
+ DWORD dwFlags; // Zero or more fTSPNOTIF_FLAGS_ constants
+ BYTE rgb[]; // Type-dependant data
+} NOTIFICATION_FRAME, *PNOTIFICATION_FRAME;
+
+// --------- CPL Notification Structure ---------------------
+#define fTSPNOTIF_FLAG_CPL_REENUM 0x1
+#define fTSPNOTIF_FLAG_CPL_DEFAULT_COMMCONFIG_CHANGE 0x2
+
+
+// The top-level client-side api to send a notification to the TSP
+// If it returns FALSE, GetLastError() will report the reason for failure.
+BOOL WINAPI UnimodemNotifyTSP(PNOTIFICATION_FRAME pnf);
+
+#endif // _TSPNOTIF_H_
diff --git a/private/unimodem/inf/makefile b/private/unimodem/inf/makefile
new file mode 100644
index 000000000..14f79b701
--- /dev/null
+++ b/private/unimodem/inf/makefile
@@ -0,0 +1 @@
+!include $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/inf/makefile.inc b/private/unimodem/inf/makefile.inc
new file mode 100644
index 000000000..4167c83c6
--- /dev/null
+++ b/private/unimodem/inf/makefile.inc
@@ -0,0 +1,809 @@
+#
+#
+
+_INX=.
+_INF=obj\$(TARGET_DIRECTORY)
+
+make_infs:$(_INF)\mdmati.inf \
+ $(_INF)\mdmatt.inf \
+ $(_INF)\mdmaus.inf \
+ $(_INF)\mdmboca.inf \
+ $(_INF)\mdmcommu.inf \
+ $(_INF)\mdmcpi.inf \
+ $(_INF)\mdmcpq.inf \
+ $(_INF)\mdmdgitn.inf \
+ $(_INF)\mdmdsi.inf \
+ $(_INF)\mdmexp.inf \
+ $(_INF)\mdmgatew.inf \
+ $(_INF)\mdmgen.inf \
+ $(_INF)\mdmgvc.inf \
+ $(_INF)\mdmhayes.inf \
+ $(_INF)\mdminfot.inf \
+ $(_INF)\mdmintel.inf \
+ $(_INF)\mdmintpc.inf \
+ $(_INF)\mdmmcom.inf \
+ $(_INF)\mdmmetri.inf \
+ $(_INF)\mdmmhrtz.inf \
+ $(_INF)\mdmmoto.inf \
+ $(_INF)\mdmmts.inf \
+ $(_INF)\mdmnokia.inf \
+ $(_INF)\mdmnova.inf \
+ $(_INF)\mdmosi.inf \
+ $(_INF)\mdmpace.inf \
+ $(_INF)\mdmpnb.inf \
+ $(_INF)\mdmpp.inf \
+ $(_INF)\mdmracal.inf \
+ $(_INF)\mdmrock.inf \
+ $(_INF)\mdmrock2.inf \
+ $(_INF)\mdmrock3.inf \
+ $(_INF)\mdmrock4.inf \
+ $(_INF)\mdmsier.inf \
+ $(_INF)\mdmsnitn.inf \
+ $(_INF)\mdmsonix.inf \
+ $(_INF)\mdmspec.inf \
+ $(_INF)\mdmsupra.inf \
+ $(_INF)\mdmtdk.inf \
+ $(_INF)\mdmtelbt.inf \
+ $(_INF)\mdmti.inf \
+ $(_INF)\mdmtosh.inf \
+ $(_INF)\mdmusrcr.inf \
+ $(_INF)\mdmusrsp.inf \
+ $(_INF)\mdmusrwp.inf \
+ $(_INF)\mdmvv.inf \
+ $(_INF)\mdmzoom.inf \
+ $(_INF)\mdmzyp.inf \
+ $(_INF)\mdmzyxel.inf \
+ $(_INF)\mdm3x.inf \
+ $(_INF)\mdmaceex.inf \
+ $(_INF)\mdmarcht.inf \
+ $(_INF)\mdmarn.inf \
+ $(_INF)\mdmblatz.inf \
+ $(_INF)\mdmbsb.inf \
+ $(_INF)\mdmbsch.inf \
+ $(_INF)\mdmcmcm.inf \
+ $(_INF)\mdmcodex.inf \
+ $(_INF)\mdmcom1.inf \
+ $(_INF)\mdmcpv.inf \
+ $(_INF)\mdmcrtix.inf \
+ $(_INF)\mdmdgitn.inf \
+ $(_INF)\mdmdicom.inf \
+ $(_INF)\mdmdisco.inf \
+ $(_INF)\mdmdyna.inf \
+ $(_INF)\mdmelink.inf \
+ $(_INF)\mdmelpro.inf \
+ $(_INF)\mdmelsa.inf \
+ $(_INF)\mdmeric.inf \
+ $(_INF)\mdmetech.inf \
+ $(_INF)\mdmeyp.inf \
+ $(_INF)\mdmgal.inf \
+ $(_INF)\mdmgvcd.inf \
+ $(_INF)\mdmhaeu.inf \
+ $(_INF)\mdmhaeus.inf \
+ $(_INF)\mdmhandy.inf \
+ $(_INF)\mdmico.inf \
+ $(_INF)\mdminsys.inf \
+ $(_INF)\mdmitex.inf \
+ $(_INF)\mdmke.inf \
+ $(_INF)\mdmkortx.inf \
+ $(_INF)\mdmlasat.inf \
+ $(_INF)\mdmlasno.inf \
+ $(_INF)\mdmlce.inf \
+ $(_INF)\mdmlight.inf \
+ $(_INF)\mdmlngsh.inf \
+ $(_INF)\mdmmart.inf \
+ $(_INF)\mdmmix.inf \
+ $(_INF)\mdmmoton.inf \
+ $(_INF)\mdmmtd.inf \
+ $(_INF)\mdmmulog.inf \
+ $(_INF)\mdmneuhs.inf \
+ $(_INF)\mdmnokno.inf \
+ $(_INF)\mdmnovfx.inf \
+ $(_INF)\mdmolive.inf \
+ $(_INF)\mdmopt1.inf \
+ $(_INF)\mdmoptn.inf \
+ $(_INF)\mdmpbit.inf \
+ $(_INF)\mdmphils.inf \
+ $(_INF)\mdmprodm.inf \
+ $(_INF)\mdmrfi.inf \
+ $(_INF)\mdmsmart.inf \
+ $(_INF)\mdmsnitn.inf \
+ $(_INF)\mdmsrt.inf \
+ $(_INF)\mdmtelin.inf \
+ $(_INF)\mdmtelnk.inf \
+ $(_INF)\mdmtexas.inf \
+ $(_INF)\mdmtger.inf \
+ $(_INF)\mdmtkr.inf \
+ $(_INF)\mdmtripl.inf \
+ $(_INF)\mdmtron.inf \
+ $(_INF)\mdmtrust.inf \
+ $(_INF)\mdmucom.inf \
+ $(_INF)\mdmusrf.inf \
+ $(_INF)\mdmusrg.inf \
+ $(_INF)\mdmvayrs.inf \
+ $(_INF)\mdmvdot.inf \
+ $(_INF)\mdmvict.inf \
+ $(_INF)\mdmwoer.inf \
+ $(_INF)\mdmyorik.inf \
+ $(_INF)\mdmzyxld.inf \
+ $(_INF)\mdmzyxlg.inf \
+ $(_INF)\mdmzyxln.inf \
+ $(_INF)\mdmsecdy.inf \
+ $(_INF)\mdmdefd.inf \
+ $(_INF)\mdmhay2.inf \
+ $(_INF)\mdmadc.inf \
+ $(_INF)\mdmairte.inf \
+ $(_INF)\mdmar1.inf \
+ $(_INF)\mdmcomm1.inf \
+ $(_INF)\mdmmotou.inf \
+ $(_INF)\mdmpn1.inf \
+ $(_INF)\mdmsnit1.inf \
+ $(_INF)\mdmtaicm.inf \
+ $(_INF)\mdmtorn.inf \
+ $(_INF)\mdmwell.inf \
+ $(_INF)\mdmarch.inf \
+ $(_INF)\mdmcm28.inf \
+ $(_INF)\mdmcpqpr.inf \
+ $(_INF)\mdmeiger.inf \
+ $(_INF)\mdmgv.inf \
+ $(_INF)\mdmrock5.inf \
+ $(_INF)\mdmsimpl.inf \
+ $(_INF)\mdmspq28.inf \
+ $(_INF)\mdmsupr3.inf \
+ $(_INF)\mdmsuprv.inf \
+ $(_INF)\mdm3com.inf \
+ $(_INF)\mdmadtn.inf \
+ $(_INF)\mdmsmplt.inf \
+ $(_INF)\mdmquant.inf \
+ $(_INF)\mdmgar.inf \
+ $(_INF)\mdmolic.inf \
+ $(_INF)\mdmpctel.inf \
+ $(_INF)\mdmniss.inf \
+ $(_INF)\mdmpcsi.inf \
+ $(_INF)\mdmwhql0.inf \
+ $(_INF)\mdmpenr.inf
+
+!IFDEF SERVERINF
+!IFDEF BINPLACE_CMD
+BINPLACE_CMD=$(BINPLACE_CMD:binplace=binplace -b srvinf)
+!ENDIF
+!ENDIF
+
+#
+# Explicit dependencies. We do it this way instead of trying to use rules
+# because !#@&^$#% nmake doesn't allow multiple 'source' extensions
+# when defining a rule, and we need to express a dependency between
+# .txt OR .inx to the final .inf.
+#
+
+#
+# 'Standard' (win95-style) infs. The rules are all the same.
+#
+
+$(_INF)\mdmati.inf: $(_INX)\mdmati.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmatt.inf: $(_INX)\mdmatt.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmaus.inf: $(_INX)\mdmaus.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmboca.inf: $(_INX)\mdmboca.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcommu.inf: $(_INX)\mdmcommu.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcpi.inf: $(_INX)\mdmcpi.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcpq.inf: $(_INX)\mdmcpq.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdgitn.inf: $(_INX)\mdmdgitn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdsi.inf: $(_INX)\mdmdsi.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmexp.inf: $(_INX)\mdmexp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgatew.inf: $(_INX)\mdmgatew.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgen.inf: $(_INX)\mdmgen.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgvc.inf: $(_INX)\mdmgvc.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmhayes.inf: $(_INX)\mdmhayes.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdminfot.inf: $(_INX)\mdminfot.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmintel.inf: $(_INX)\mdmintel.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmintpc.inf: $(_INX)\mdmintpc.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmcom.inf: $(_INX)\mdmmcom.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmetri.inf: $(_INX)\mdmmetri.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmhrtz.inf: $(_INX)\mdmmhrtz.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmoto.inf: $(_INX)\mdmmoto.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmts.inf: $(_INX)\mdmmts.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmnokia.inf: $(_INX)\mdmnokia.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmnova.inf: $(_INX)\mdmnova.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmosi.inf: $(_INX)\mdmosi.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpace.inf: $(_INX)\mdmpace.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpnb.inf: $(_INX)\mdmpnb.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpp.inf: $(_INX)\mdmpp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmracal.inf: $(_INX)\mdmracal.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrock.inf: $(_INX)\mdmrock.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrock2.inf: $(_INX)\mdmrock2.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrock3.inf: $(_INX)\mdmrock3.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrock4.inf: $(_INX)\mdmrock4.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsier.inf: $(_INX)\mdmsier.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsnitn.inf: $(_INX)\mdmsnitn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsonix.inf: $(_INX)\mdmsonix.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmspec.inf: $(_INX)\mdmspec.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsupra.inf: $(_INX)\mdmsupra.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtdk.inf: $(_INX)\mdmtdk.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtelbt.inf: $(_INX)\mdmtelbt.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmti.inf: $(_INX)\mdmti.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtosh.inf: $(_INX)\mdmtosh.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmusrcr.inf: $(_INX)\mdmusrcr.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmusrsp.inf: $(_INX)\mdmusrsp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmusrwp.inf: $(_INX)\mdmusrwp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmvv.inf: $(_INX)\mdmvv.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzoom.inf: $(_INX)\mdmzoom.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzyp.inf: $(_INX)\mdmzyp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzyxel.inf: $(_INX)\mdmzyxel.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdm3x.inf: $(_INX)\mdm3x.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmaceex.inf: $(_INX)\mdmaceex.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmarcht.inf: $(_INX)\mdmarcht.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmarn.inf: $(_INX)\mdmarn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmblatz.inf: $(_INX)\mdmblatz.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmbsb.inf: $(_INX)\mdmbsb.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmbsch.inf: $(_INX)\mdmbsch.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcmcm.inf: $(_INX)\mdmcmcm.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcodex.inf: $(_INX)\mdmcodex.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcom1.inf: $(_INX)\mdmcom1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcpv.inf: $(_INX)\mdmcpv.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcrtix.inf: $(_INX)\mdmcrtix.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdgitn.inf: $(_INX)\mdmdgitn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdicom.inf: $(_INX)\mdmdicom.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdisco.inf: $(_INX)\mdmdisco.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdyna.inf: $(_INX)\mdmdyna.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmelink.inf: $(_INX)\mdmelink.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmelpro.inf: $(_INX)\mdmelpro.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmelsa.inf: $(_INX)\mdmelsa.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmeric.inf: $(_INX)\mdmeric.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmetech.inf: $(_INX)\mdmetech.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmeyp.inf: $(_INX)\mdmeyp.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgal.inf: $(_INX)\mdmgal.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgvcd.inf: $(_INX)\mdmgvcd.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmhaeu.inf: $(_INX)\mdmhaeu.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmhaeus.inf: $(_INX)\mdmhaeus.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmhandy.inf: $(_INX)\mdmhandy.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmico.inf: $(_INX)\mdmico.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdminsys.inf: $(_INX)\mdminsys.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmitex.inf: $(_INX)\mdmitex.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmke.inf: $(_INX)\mdmke.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmkortx.inf: $(_INX)\mdmkortx.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmlasat.inf: $(_INX)\mdmlasat.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmlasno.inf: $(_INX)\mdmlasno.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmlce.inf: $(_INX)\mdmlce.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmlight.inf: $(_INX)\mdmlight.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmlngsh.inf: $(_INX)\mdmlngsh.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmart.inf: $(_INX)\mdmmart.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmix.inf: $(_INX)\mdmmix.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmoton.inf: $(_INX)\mdmmoton.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmtd.inf: $(_INX)\mdmmtd.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmulog.inf: $(_INX)\mdmmulog.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmneuhs.inf: $(_INX)\mdmneuhs.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmnokno.inf: $(_INX)\mdmnokno.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmnovfx.inf: $(_INX)\mdmnovfx.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmolive.inf: $(_INX)\mdmolive.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmopt1.inf: $(_INX)\mdmopt1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmoptn.inf: $(_INX)\mdmoptn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpbit.inf: $(_INX)\mdmpbit.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmphils.inf: $(_INX)\mdmphils.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmprodm.inf: $(_INX)\mdmprodm.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrfi.inf: $(_INX)\mdmrfi.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsmart.inf: $(_INX)\mdmsmart.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsnitn.inf: $(_INX)\mdmsnitn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsrt.inf: $(_INX)\mdmsrt.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtelin.inf: $(_INX)\mdmtelin.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtelnk.inf: $(_INX)\mdmtelnk.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtexas.inf: $(_INX)\mdmtexas.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtger.inf: $(_INX)\mdmtger.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtkr.inf: $(_INX)\mdmtkr.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtripl.inf: $(_INX)\mdmtripl.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtron.inf: $(_INX)\mdmtron.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtrust.inf: $(_INX)\mdmtrust.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmucom.inf: $(_INX)\mdmucom.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmusrf.inf: $(_INX)\mdmusrf.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmusrg.inf: $(_INX)\mdmusrg.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmvayrs.inf: $(_INX)\mdmvayrs.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmvdot.inf: $(_INX)\mdmvdot.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmvict.inf: $(_INX)\mdmvict.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmwoer.inf: $(_INX)\mdmwoer.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmyorik.inf: $(_INX)\mdmyorik.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzyxld.inf: $(_INX)\mdmzyxld.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzyxlg.inf: $(_INX)\mdmzyxlg.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmzyxln.inf: $(_INX)\mdmzyxln.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsecdy.inf: $(_INX)\mdmsecdy.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmdefd.inf: $(_INX)\mdmdefd.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmhay2.inf: $(_INX)\mdmhay2.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmadc.inf: $(_INX)\mdmadc.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmairte.inf: $(_INX)\mdmairte.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmar1.inf: $(_INX)\mdmar1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcomm1.inf: $(_INX)\mdmcomm1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmmotou.inf: $(_INX)\mdmmotou.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpn1.inf: $(_INX)\mdmpn1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsnit1.inf: $(_INX)\mdmsnit1.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtaicm.inf: $(_INX)\mdmtaicm.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmtorn.inf: $(_INX)\mdmtorn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmwell.inf: $(_INX)\mdmwell.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmarch.inf: $(_INX)\mdmarch.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcm28.inf: $(_INX)\mdmcm28.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmcpqpr.inf: $(_INX)\mdmcpqpr.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmeiger.inf: $(_INX)\mdmeiger.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgv.inf: $(_INX)\mdmgv.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmrock5.inf: $(_INX)\mdmrock5.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsimpl.inf: $(_INX)\mdmsimpl.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmspq28.inf: $(_INX)\mdmspq28.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsupr3.inf: $(_INX)\mdmsupr3.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsuprv.inf: $(_INX)\mdmsuprv.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+
+$(_INF)\mdm3com.inf: $(_INX)\mdm3com.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmadtn.inf: $(_INX)\mdmadtn.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmsmplt.inf: $(_INX)\mdmsmplt.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmquant.inf: $(_INX)\mdmquant.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmgar.inf: $(_INX)\mdmgar.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmolic.inf: $(_INX)\mdmolic.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpctel.inf: $(_INX)\mdmpctel.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmniss.inf: $(_INX)\mdmniss.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpcsi.inf: $(_INX)\mdmpcsi.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmwhql0.inf: $(_INX)\mdmwhql0.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
+
+$(_INF)\mdmpenr.inf: $(_INX)\mdmpenr.inx
+ copy $(_INX)\$(@B).inx $(_INF)\$(@B).inf
+ $(BINPLACE_CMD)
diff --git a/private/unimodem/inf/mdm3com.inx b/private/unimodem/inf/mdm3com.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdm3com.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdm3x.inx b/private/unimodem/inf/mdm3x.inx
new file mode 100644
index 000000000..fc6f6e978
--- /dev/null
+++ b/private/unimodem/inf/mdm3x.inx
@@ -0,0 +1,533 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: 3X
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEME86BD8FA
+%Modem2% = Modem2, 3X_Modem2
+%Modem4% = Modem4, UNIMODEMB07C86C0
+%Modem5% = Modem5, UNIMODEM04D19EE2
+%Modem6% = Modem6, UNIMODEM6EF972F3
+%Modem8% = Modem8, UNIMODEM0B5DFC99
+%Modem9% = Modem9, 3X_Modem9
+%Modem10% = Modem10, UNIMODEM76705211
+%Modem11% = Modem11, UNIMODEM7DDACD69
+%Modem12% = Modem12, 3X_Modem12, UNIMODEMADDF16B2
+%Modem13% = Modem13, 3X_Modem13
+%Modem14% = Modem14, UNIMODEM90F8B251
+%Modem15% = Modem15, UNIMODEM70AD55C2
+%Modem16% = Modem16, UNIMODEM4E9E6F38
+%Modem17% = Modem17, UNIMODEM54D5E4E6
+%Modem18% = Modem18, UNIMODEM655CE017
+%Modem19% = Modem19, UNIMODEMF848E375
+%Modem20% = Modem20, 3X_Modem20
+%Modem21% = Modem21, 3X_Modem21
+%Modem22% = Modem22, 3X_Modem22
+%Modem23% = Modem23, 3X_Modem23
+%Modem24% = Modem24, UNIMODEM8455F942
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg,Internal
+
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, External
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, External
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, PCMCIA
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, Internal
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, Internal
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, External
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, External
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, External
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, PCMCIA
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, PCMCIA
+
+[Modem22]
+AddReg=All, MfgAddReg, Modem22.AddReg, Internal
+
+[Modem23]
+AddReg=All, MfgAddReg, Modem23.AddReg, Internal
+
+[Modem24]
+AddReg=All, MfgAddReg, Modem24.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, b0,04,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem22.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem23.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem24.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "3X"
+
+; Model strings
+
+Modem1 ="3X Wysiwyf 296D"
+Modem2 ="3X Wysiwyf 296DBX"
+Modem4 ="3X Wysiwyf 396DBX"
+Modem5 ="3X Wysiwyf 396DP"
+Modem6 ="3X Wysiwyf 396DS"
+Modem8 ="3X Wysiwyf 496D"
+Modem9 ="3X Wysiwyf 496DB"
+Modem10="3X Wysiwyf 514D"
+Modem11="3X Wysiwyf 514DB"
+Modem12="3X Wysiwyf 514DBX"
+Modem13="3X Wysiwyf 514DP"
+Modem14="3X Wysiwyf 514DPX"
+Modem15="3X Wysiwyf 514DS"
+Modem16="3X Wysiwyf 514DSX"
+Modem17="3X Wysiwyf 628D"
+Modem18="3X Wysiwyf 628DB"
+Modem19="3X Wysiwyf 628DBX"
+Modem20="3X Wysiwyf 628DP"
+Modem21="3X Wysiwyf 628DPX"
+Modem22="3X Wysiwyf 628DS"
+Modem23="3X Wysiwyf 628DSX"
+Modem24="Djinn PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&F E0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmaceex.inx b/private/unimodem/inf/mdmaceex.inx
new file mode 100644
index 000000000..a4d1db28c
--- /dev/null
+++ b/private/unimodem/inf/mdmaceex.inx
@@ -0,0 +1,545 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Aceex
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM31105B19, UNIMODEMD67E6AB1, UNIMODEM54542A45
+
+[Models]
+%Modem14% = Modem14, Aceex_Modem14
+%Modem13% = Modem13, UNIMODEMADAA259D
+%Modem12% = Modem12, Aceex_Modem12
+
+%Modem11% = Modem11, PCMCIA\ACEEX_CORP.-DM-9624PC-C2B4
+%Modem11% = Modem11, Aceex_Modem11, UNIMODEM54542A45
+
+%Modem10% = Modem10, UNIMODEMD0629842
+%Modem9% = Modem9, UNIMODEM982ABDE6
+%Modem8% = Modem8, Aceex_Modem8, UNIMODEM54542A45
+%Modem7% = Modem7, Aceex_Modem7, UNIMODEMD67E6AB1
+
+%Modem6% = Modem6, PCMCIA\ACEEX_CORP.-FAX&MODEM-AAF1
+%Modem6% = Modem6, UNIMODEM8AE45548
+
+%Modem5% = Modem5, Aceex_Modem5
+%Modem2% = Modem2, UNIMODEM6D8E22A9
+
+%Modem16% = Modem3, UNIMODEM31105B19
+%Modem15% = Modem15, Aceex_Modem15, UNIMODEM31105B19
+%Modem3% = Modem3, Aceex_Modem3, UNIMODEM31105B19
+%Modem1% = Modem1, Aceex_Modem1, UNIMODEM31105B19
+%Modem4% = Modem4, Aceex_Modem4, UNIMODEM31105B19
+
+%Modem17% = Modem17, UNIMODEMD67E6AB1 ; Generic 14.4 Fax
+
+%Modem18% = Modem8, UNIMODEM54542A45 ; Generic 9624e, 9624PC
+
+; Installtion sections
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, External
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, External
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, Internal
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, External
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, External
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, PCMCIA
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, Internal
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f3,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q0"
+HKR, Settings, ErrorControl_Forced,, "&Q0"
+HKR, Settings, Compression_On,, "&Q5"
+HKR, Settings, Compression_Off,, "&Q0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT S0=0 E0 V1 X3 S95=47<cr>"
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,e1,00,00, 80,70,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 60,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 60,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q0"
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 70,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1 S0=0<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0 S95=47<cr>"
+HKR,, Reset,, "AT&FS0=0S95=45<cr>"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 70,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f3,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Aceex"
+
+; Model strings
+
+Modem16="Aceex DM-2814 & DM-1414 Series"
+Modem15="Aceex DM-2814 & DM-1414VH"
+Modem14="Aceex DM-2400H"
+Modem13="Aceex DM-2400E"
+Modem12="Aceex DM-2400V"
+Modem11="Aceex DM-9624PC"
+Modem10="Aceex DM-9624H"
+Modem9="Aceex DM-9624V"
+Modem8="Aceex DM-9624E"
+Modem7="Aceex DM-1414P"
+Modem6="Aceex DM-1414PC"
+Modem5="Aceex DM-2814PC"
+Modem4="Aceex DM-2814VH"
+Modem3="Aceex DM-1414VH"
+Modem2="Aceex DM-1414V"
+Modem1="Aceex DM-2814V"
+Modem17="14.4K Faxmodem"
+Modem18="Aceex DM-9624E & DM-9624PC"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F E0 V1 W1 S0=0 S95=47 S36=7 S48=7<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FW0S0=0S95=47<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Off,, "&Q0\N1"
+HKR, Settings, Compression_On,, "%%C1S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, ""
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmadc.inx b/private/unimodem/inf/mdmadc.inx
new file mode 100644
index 000000000..70be27ed0
--- /dev/null
+++ b/private/unimodem/inf/mdmadc.inx
@@ -0,0 +1,159 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Anchor Datacomm BV
+; Suported models: SXPro 144/288
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\ADC0001 ;SxPro144
+ExcludeFromSelect=SERENUM\ADC0002 ;SxPro288
+
+[Modem144.NoResDup]
+UNIMODEMB5918E83
+
+[Modem288.NoResDup]
+UNIMODEM2D635A06
+
+[Manufacturer]
+%Mfg%=Anchor
+
+[Anchor]
+%Modem144%=Modem144,UNIMODEMB5918E83
+%Modem144PNP%=Modem144,SERENUM\ADC0001
+%Modem288%=Modem288,UNIMODEM2D635A06
+%Modem288PNP%=Modem288,SERENUM\ADC0002
+
+
+[Modem144]
+AddReg=All,MfgAddReg,Modem144.AddReg,EXTERNAL
+
+[Modem288]
+AddReg=All,MfgAddReg,Modem288.AddReg,EXTERNAL
+
+
+;AddReg sections
+
+[Modem144.AddReg]
+HKR,,Properties,1,80,01,00,00,ff,00,00,00,ff,00,00,00,07,00,00,00,07,00,00,00,37,01,00,00,00,c2,01,00,40,38,00,00
+
+[Modem288.AddReg]
+HKR,,Properties,1,80,01,00,00,ff,00,00,00,ff,00,00,00,07,00,00,00,07,00,00,00,37,01,00,00,00,c2,01,00,80,70,00,00
+
+
+;Strings
+
+[Strings]
+ClassName="Modem"
+Mfg="Anchor Datacomm"
+Modem144="SXPro 144 External Data Fax Modem"
+Modem144PNP="SXPro 144 External Data Fax Modem Plug & Play"
+Modem288="SXPro 288 External Data Fax Modem"
+Modem288PNP="SXPro 288 External Data Fax Modem Plug & Play"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,Enumerator,,serwave.vxd
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,Init, 1,, "AT<cr>"
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+
+[EXTERNAL]
+HKR,,DeviceType,1,01
+
+[MfgAddReg]
+HKR,,InactivityScale, 1, 3c,00,00,00
+HKR,Init, 2,,"AT&FEW5&SS21=0S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR,Monitor, 2,, "None"
+HKR,Hangup, 1,, "ATH<cr>"
+HKR,Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR,Settings,Prefix,,"AT"
+HKR,Settings,Terminator,,"<cr>"
+HKR,Settings,DialPrefix,,"D"
+HKR,Settings,DialSuffix,,""
+HKR,Settings,SpeakerVolume_Low,,"L0"
+HKR,Settings,SpeakerVolume_Med,,"L1"
+HKR,Settings,SpeakerVolume_High,,"L2"
+HKR,Settings,SpeakerMode_Off,,"M0"
+HKR,Settings,SpeakerMode_Dial,,"M1"
+HKR,Settings,SpeakerMode_On,,"M2"
+HKR,Settings,FlowControl_Off,,"\Q"
+HKR,Settings,FlowControl_Hard,,"\Q3"
+HKR,Settings,FlowControl_Soft,,"\Q1"
+HKR,Settings,ErrorControl_On,,"\N3"
+HKR,Settings,ErrorControl_Off,,"\N"
+HKR,Settings,ErrorControl_Forced,,"\N2"
+HKR,Settings,Compression_On,,"%%C1"
+HKR,Settings,Compression_Off,,"%%C0"
+HKR,Settings,Blind_Off,, "X4"
+HKR,Settings,Blind_On,, "X3"
+HKR,Settings,Pulse,,"P"
+HKR,Settings,Tone,,"T"
+HKR,Settings,CallSetupFailTimer,,"S7=<#>"
+HKR,Settings,InactivityTimeout,,"\T<#>"
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RING<cr><lf>",1,08,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO CARRIER<cr><lf>",1,04,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIALTONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>BUSY<cr><lf>",1,06,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO ANSWER<cr><lf>",1,07,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>DELAYED<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>BLACKLISTED<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>+FC ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CONNECT<cr><lf>",1,02,00,00,00,00,00,2c,01,00,00
+HKR,Responses,"<cr><lf>CONNECT 1200<cr><lf>",1,02,00,00,00,00,00,b0,04,00,00
+HKR,Responses,"<cr><lf>CONNECT 2400<cr><lf>",1,02,00,00,00,00,00,60,09,00,00
+HKR,Responses,"<cr><lf>CONNECT 4800<cr><lf>",1,02,00,00,00,00,00,c0,12,00,00
+HKR,Responses,"<cr><lf>CONNECT 7200<cr><lf>",1,02,00,00,00,00,00,20,1c,00,00
+HKR,Responses,"<cr><lf>CONNECT 9600<cr><lf>",1,02,00,00,00,00,00,80,25,00,00
+HKR,Responses,"<cr><lf>CONNECT 12000<cr><lf>",1,02,00,00,00,00,00,e0,2e,00,00
+HKR,Responses,"<cr><lf>CONNECT 14400<cr><lf>",1,02,00,00,00,00,00,40,38,00,00
+HKR,Responses,"<cr><lf>CONNECT 16800<cr><lf>",1,02,00,00,00,00,00,a0,41,00,00
+HKR,Responses,"<cr><lf>CONNECT 19200<cr><lf>",1,02,00,00,00,00,00,00,4b,00,00
+HKR,Responses,"<cr><lf>CONNECT 21600<cr><lf>",1,02,00,00,00,00,00,60,54,00,00
+HKR,Responses,"<cr><lf>CONNECT 24000<cr><lf>",1,02,00,00,00,00,00,c0,5d,00,00
+HKR,Responses,"<cr><lf>CONNECT 26400<cr><lf>",1,02,00,00,00,00,00,20,67,00,00
+HKR,Responses,"<cr><lf>CONNECT 28800<cr><lf>",1,02,00,00,00,00,00,80,70,00,00
+HKR,Responses,"<cr><lf>CONNECT 31200<cr><lf>",1,02,00,00,00,00,00,e0,79,00,00
+HKR,Responses,"<cr><lf>CONNECT 33600<cr><lf>",1,02,00,00,00,00,00,40,83,00,00
+HKR,Responses,"<cr><lf>CONNECT 38400<cr><lf>",1,02,00,00,00,00,00,00,96,00,00
+HKR,Responses,"<cr><lf>CONNECT 57600<cr><lf>",1,02,00,00,00,00,00,00,e1,00,00
+HKR,Responses,"<cr><lf>CONNECT 115200<cr><lf>",1,02,00,00,00,00,00,00,c2,01,00
+HKR,Responses,"<cr><lf>CARRIER 300<cr><lf>",1,01,00,2c,01,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 1200<cr><lf>",1,01,00,b0,04,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 2400<cr><lf>",1,01,00,60,09,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 4800<cr><lf>",1,01,00,c0,12,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 7200<cr><lf>",1,01,00,20,1c,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 9600<cr><lf>",1,01,00,80,25,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 12000<cr><lf>",1,01,00,e0,2e,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 14400<cr><lf>",1,01,00,40,38,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 16800<cr><lf>",1,01,00,a0,41,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 19200<cr><lf>",1,01,00,00,4b,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 21600<cr><lf>",1,01,00,60,54,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 24000<cr><lf>",1,01,00,c0,5d,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 26400<cr><lf>",1,01,00,20,67,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 28800<cr><lf>",1,01,00,80,70,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 31200<cr><lf>",1,01,00,e0,79,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CARRIER 33600<cr><lf>",1,01,00,40,83,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>COMPRESSION: CLASS5<cr><lf>",1,01,01,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>COMPRESSION: V.42BIS<cr><lf>",1,01,01,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>COMPRESSION: NONE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: V.42BIS<cr><lf>",1,01,03,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: NONE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: LAP-M<cr><lf>",1,01,02,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: ALT<cr><lf>",1,01,02,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: MNP2<cr><lf>",1,01,02,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: MNP3<cr><lf>",1,01,02,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>PROTOCOL: MNP4<cr><lf>",1,01,02,00,00,00,00,00,00,00,00
diff --git a/private/unimodem/inf/mdmadtn.inx b/private/unimodem/inf/mdmadtn.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmadtn.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmairte.inx b/private/unimodem/inf/mdmairte.inx
new file mode 100644
index 000000000..f126c08fd
--- /dev/null
+++ b/private/unimodem/inf/mdmairte.inx
@@ -0,0 +1,363 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Racal-Airtech
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+[Models]
+%Modem1% = Modem1, PCMCIA\RACAL-SAFEDial_V.34-18BC
+%Modem1% = Modem1, UNIMODEM719F6513
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Racal-Airtech"
+
+; Model strings
+
+Modem1="SAFEDial V.34"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F0 &D2 &C1 E0 -K0 %E2<cr>"
+HKR, Init, 3,, "AT V1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: RLP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmar1.inx b/private/unimodem/inf/mdmar1.inx
new file mode 100644
index 000000000..72062eb59
--- /dev/null
+++ b/private/unimodem/inf/mdmar1.inx
@@ -0,0 +1,593 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ARN
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEMD340A01A ; ARNIS-MD PC
+%Modem2% = Modem2, ARN_Modem2, UNIMODEMD340A01A ; ARNIS-MD PC Synchronous PPP
+%Modem3% = Modem3, ARN_Modem3, UNIMODEMD340A01A ; ARNIS-MD PC V.14 57,6Kbps
+%Modem4% = Modem4, ARN_Modem4, UNIMODEMD340A01A ; ARNIS-MD PC X.25 Transparent
+%Modem5% = Modem5, ARN_Modem5, UNIMODEMD340A01A ; ARNIS-MD PC V.120
+%Modem6% = Modem2, UNIMODEM08E17403 ; ARNIS PC Synchronous PPP
+%Modem7% = Modem3, ARN_Modem7, UNIMODEM08E17403 ; ARNIS PC V.14 57,6Kbps
+%Modem8% = Modem4, ARN_Modem8, UNIMODEM08E17403 ; ARNIS PC X.25 Transparent
+%Modem9% = Modem5, ARN_Modem9, UNIMODEM08E17403 ; ARNIS PC V.120
+%Modem10% = Modem6, PCMCIA\ARN_INFORMATIQUE-ARNIS-MC2-C1FD ; ARNIS MC2 Synchronous PPP
+%Modem10% = Modem6, ARN_Modem10, UNIMODEM08E17403 ; ARNIS MC2
+%Modem11% = Modem7, ARN_Modem11, PCMCIA\ARN_INFORMATIQUE-ARNIS-MC2-C1FD ; ARNIS MC2 V.14 57,6Kpbs
+%Modem12% = Modem8, ARN_Modem12, PCMCIA\ARN_INFORMATIQUE-ARNIS-MC2-C1FD ; ARNIS MC2 X.25 Trasparent
+%Modem13% = Modem9, ARN_Modem13, PCMCIA\ARN_INFORMATIQUE-ARNIS-MC2-C1FD ; V.120
+
+; Installation sections
+
+[Modem1] ; ARNIS MD PC
+AddReg=All, MfgAddReg, Modem1.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem2] ; ARNIS Synchronous PPP
+AddReg=All, MfgAddReg, Modem2.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem3] ; ARNIS V.14 57,6Kbps
+AddReg=All, MfgAddReg, Modem3.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem4] ; ARNIS X.25 Transparent
+AddReg=All, MfgAddReg, Modem4.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem5] ; ARNIS V.120
+AddReg=All, MfgAddReg, Modem5.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem6] ; ARNIS MC2 Synchronous PPP
+AddReg=All, MfgAddReg, Modem2.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem7] ; ARNIS MC2 V.14 57,6Kbps
+AddReg=All, MfgAddReg, Modem3.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem8] ; ARNIS MC2 X.25 Transparent
+AddReg=All, MfgAddReg, Modem4.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem9] ; ARNIS MC2 V.120
+AddReg=All, MfgAddReg, Modem5.AddReg, VerboseResultCodes, PCMCIA
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=11,0,300,28800"
+HKR, Settings, SpeedNegotiation_On,, "+MS=11,1,300,28800"
+
+[Modem2.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=6<cr>"
+
+[Modem3.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=5<cr>"
+
+[Modem4.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=3<cr>"
+
+[Modem5.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=2<cr>"
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ARN"
+
+Modem1="ARNIS-MD PC"
+Modem2="ARNIS-MD PC ISDN Sync. PPP"
+Modem3="ARNIS-MD PC ISDN V.14 57,6Kbps"
+Modem4="ARNIS-MD PC ISDN X.25 Transparent"
+Modem5="ARNIS-MD PC ISDN V.120"
+Modem6="ARNIS PC ISDN Sync. PPP"
+Modem7="ARNIS PC ISDN V.14 57,6Kbps"
+Modem8="ARNIS PC ISDN X.25 Transparent"
+Modem9="ARNIS PC ISDN V.120"
+Modem10="ARNIS MC2 ISDN Sync. PPP"
+Modem11="ARNIS MC2 ISDN V.14 57,6Kps"
+Modem12="ARNIS MC2 ISDN X.25 Transparent"
+Modem13="ARNIS MC2 ISDN V.120"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 Q0 W1 X4 V1 S95=45 &C1<cr>"
+HKR, Init, 3,, "AT &D2 &S0 S0=0 \N3 %%C3<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1S37=5"
+HKR, Settings, SpeedNegotiation_On,, "N1S37=0"
+HKR, Settings, SpeedNegotiation_Off,, "N0S37=0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1)M1*H0"
+HKR, Settings, Cellular_Off,, "-K0)M0"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "&K0"
+HKR, Fax, Class1FlowHW,, "&K3"
+HKR, Fax, Class1FlowSW,, "&K4"
+HKR, Fax, Class2FlowOff,, "&K0"
+HKR, Fax, Class2FlowHW,, "&K3"
+HKR, Fax, Class2FlowSW,, "&K4"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 58,02,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,e1,00,00, 00,e1,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,c2,01,00, 00,c2,01,00
+HKR, Responses, "22<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "24<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+; 28800
+HKR, Responses, "58<cr>70<cr>66<cr>64<cr>", 1, 02, 01, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>67<cr>64<cr>", 1, 02, 01, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>69<cr>64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>66<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>67<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>69<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>66<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>67<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>69<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>66<cr>64<cr>", 1, 02, 0B, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>67<cr>64<cr>", 1, 02, 0B, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>69<cr>64<cr>", 1, 02, 0A, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>64<cr>", 1, 02, 0A, 80,70,00,00, 00,00,00,00
+
+; 26400
+HKR, Responses, "57<cr>70<cr>66<cr>63<cr>", 1, 02, 01, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>67<cr>63<cr>", 1, 02, 01, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>69<cr>63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>66<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>67<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>69<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>66<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>67<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>69<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>66<cr>63<cr>", 1, 02, 0B, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>67<cr>63<cr>", 1, 02, 0B, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>69<cr>63<cr>", 1, 02, 0A, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>63<cr>", 1, 02, 0A, 20,67,00,00, 00,00,00,00
+
+; 24000
+HKR, Responses, "56<cr>70<cr>66<cr>62<cr>", 1, 02, 01, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>67<cr>62<cr>", 1, 02, 01, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>69<cr>62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>66<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>67<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>69<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>66<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>67<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>69<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>66<cr>62<cr>", 1, 02, 0B, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>67<cr>62<cr>", 1, 02, 0B, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>69<cr>62<cr>", 1, 02, 0A, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>62<cr>", 1, 02, 0A, C0,5D,00,00, 00,00,00,00
+
+; 21600
+HKR, Responses, "55<cr>70<cr>66<cr>61<cr>", 1, 02, 01, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>67<cr>61<cr>", 1, 02, 01, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>69<cr>61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>66<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>67<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>69<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>66<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>67<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>69<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>66<cr>61<cr>", 1, 02, 0B, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>67<cr>61<cr>", 1, 02, 0B, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>69<cr>61<cr>", 1, 02, 0A, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>61<cr>", 1, 02, 0A, 60,54,00,00, 00,00,00,00
+
+; 19200
+HKR, Responses, "54<cr>70<cr>66<cr>16<cr>", 1, 02, 01, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>67<cr>16<cr>", 1, 02, 01, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>69<cr>16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>66<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>67<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>69<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>66<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>67<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>69<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>66<cr>16<cr>", 1, 02, 0B, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>67<cr>16<cr>", 1, 02, 0B, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>69<cr>16<cr>", 1, 02, 0A, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>16<cr>", 1, 02, 0A, 00,4B,00,00, 00,00,00,00
+
+;16800
+HKR, Responses, "53<cr>70<cr>66<cr>59<cr>", 1, 02, 01, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>67<cr>59<cr>", 1, 02, 01, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>69<cr>59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>66<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>67<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>69<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>66<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>67<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>69<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>66<cr>59<cr>", 1, 02, 0B, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>67<cr>59<cr>", 1, 02, 0B, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>69<cr>59<cr>", 1, 02, 0A, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>59<cr>", 1, 02, 0A, A0,41,00,00, 00,00,00,00
+
+; 14400
+HKR, Responses, "52<cr>70<cr>66<cr>15<cr>", 1, 02, 01, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>67<cr>15<cr>", 1, 02, 01, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>69<cr>15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>66<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>67<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>69<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>66<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>67<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>69<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>66<cr>15<cr>", 1, 02, 0B, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>67<cr>15<cr>", 1, 02, 0B, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>69<cr>15<cr>", 1, 02, 0A, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>15<cr>", 1, 02, 0A, 40,38,00,00, 00,00,00,00
+
+; 12000
+HKR, Responses, "51<cr>70<cr>66<cr>14<cr>", 1, 02, 01, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>67<cr>14<cr>", 1, 02, 01, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>69<cr>14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>66<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>67<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>69<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>66<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>67<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>69<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>66<cr>14<cr>", 1, 02, 0B, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>67<cr>14<cr>", 1, 02, 0B, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>69<cr>14<cr>", 1, 02, 0A, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>14<cr>", 1, 02, 0A, E0,2E,00,00, 00,00,00,00
+
+; 9600
+HKR, Responses, "50<cr>70<cr>66<cr>12<cr>", 1, 02, 01, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>67<cr>12<cr>", 1, 02, 01, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>69<cr>12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>66<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>67<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>69<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>66<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>67<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>69<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>66<cr>12<cr>", 1, 02, 0B, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>67<cr>12<cr>", 1, 02, 0B, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>69<cr>12<cr>", 1, 02, 0A, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>12<cr>", 1, 02, 0A, 80,25,00,00, 00,00,00,00
+
+; 7200
+HKR, Responses, "49<cr>70<cr>66<cr>13<cr>", 1, 02, 01, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>67<cr>13<cr>", 1, 02, 01, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>69<cr>13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>66<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>67<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>69<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>66<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>67<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>69<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>66<cr>13<cr>", 1, 02, 0B, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>67<cr>13<cr>", 1, 02, 0B, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>69<cr>13<cr>", 1, 02, 0A, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>13<cr>", 1, 02, 0A, 20,1C,00,00, 00,00,00,00
+
+; 4800
+HKR, Responses, "48<cr>70<cr>66<cr>11<cr>", 1, 02, 01, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>67<cr>11<cr>", 1, 02, 01, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>69<cr>11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>66<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>67<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>69<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>66<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>67<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>69<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>66<cr>11<cr>", 1, 02, 0B, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>67<cr>11<cr>", 1, 02, 0B, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>69<cr>11<cr>", 1, 02, 0A, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>11<cr>", 1, 02, 0A, C0,12,00,00, 00,00,00,00
+
+; 2400
+HKR, Responses, "47<cr>70<cr>66<cr>10<cr>", 1, 02, 01, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>67<cr>10<cr>", 1, 02, 01, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>69<cr>10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>66<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>67<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>69<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>66<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>67<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>69<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>66<cr>10<cr>", 1, 02, 0B, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>67<cr>10<cr>", 1, 02, 0B, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>69<cr>10<cr>", 1, 02, 0A, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>10<cr>", 1, 02, 0A, 60,09,00,00, 00,00,00,00
+
+; 1200
+HKR, Responses, "46<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 75TX/1200RX
+HKR, Responses, "45<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 1200TX/75RX
+HKR, Responses, "44<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 300
+HKR, Responses, "40<cr>70<cr>66<cr>01<cr>", 1, 02, 01, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>67<cr>01<cr>", 1, 02, 01, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>69<cr>01<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>01<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>66<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>67<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>69<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>66<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>67<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>69<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>66<cr>01<cr>", 1, 02, 0B, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>67<cr>01<cr>", 1, 02, 0B, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>69<cr>01<cr>", 1, 02, 0A, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>01<cr>", 1, 02, 0A, 2C,01,00,00, 00,00,00,00
+
+[VerboseResultCodes]
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64K<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/VFC<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800/VFC<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/VFC<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/VFC<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/VFC<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/VFC<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmarch.inx b/private/unimodem/inf/mdmarch.inx
new file mode 100644
index 000000000..2e9dae681
--- /dev/null
+++ b/private/unimodem/inf/mdmarch.inx
@@ -0,0 +1,720 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Supports Archtek modems using following chipsets: Rockwell, Cirrus, TI, AT&T
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+%Phoebe% = Phoebe
+
+[ControlFlags]
+ExcludeFromSelect=ISAPNP\GVC000F
+ExcludeFromSelect=ISAPNP\AAC000F
+ExcludeFromSelect=SERENUM\UAC000F
+ExcludeFromSelect=UNIMODEMEF013CA3
+ExcludeFromSelect=SERENUM\TEX0011
+ExcludeFromSelect=ISAPNP\TEX0011
+
+[Modem15.PosDup]
+*PNP0500
+
+[Modem15.NoResDup]
+UNIMODEM22AEFBA6,UNIMODEMFC8C3F8A,UNIMODEMCB1E9421
+
+[Phoebe]
+%Phoebe1PNP% = Modem15, SERENUM\TEX0011
+%Phoebe1PNP% = Modem15, ISAPNP\TEX0011
+%Phoebe1% = Modem15, Arch_Phoebe1
+
+[Models]
+%Modem16PNP% = Modem15, SERENUM\UAC000F ; Archtek SmartLink 3334BT
+%Modem15PNP% = Modem15, ISAPNP\AAC000F ; Archtek SmartLink 3334BT
+%Modem15PNP% = Modem15, ISAPNP\GVC000F ; Archtek SmartLink 3334BT
+%Modem15% = Modem15, UNIMODEM22AEFBA6 ; Archtek SmartLink 3334BT
+%Modem15% = Modem15, UNIMODEMFC8C3F8A ; Archtek SmartLink 3334BT
+%Modem15% = Modem15, UNIMODEMCB1E9421 ; Archtek SmartLink 3334BT
+%Modem10% = Modem10, UNIMODEMA0348579 ; SmartLink V32Te
+%Modem9% = Modem9, Arch_Modem9, UNIMODEM16E3BF9F ; SmartLink 1414BCV/BCL
+%Modem4% = Modem4, Arch_Modem4, UNIMODEMEF013CA3 ; SmartLink 2834BA
+%Modem2% = Modem2, Arch_Modem2, UNIMODEMEF013CA3 ; SmartLink 2834A-1
+%Modem2a% = Modem2, UNIMODEMEF013CA3 ; SmartLink 2834A-1 and 2834BA
+%Modem1% = Modem2, UNIMODEM9E7EE592 ; SmartLink 2834A
+
+[Modem15] ; SmartLink 3334BT
+AddReg=All, MfgAddReg, Modem15.AddReg, INTERNAL, 3334BT_Responses
+
+[Modem10] ; SmartLink V32Te
+AddReg=All, MfgAddReg, Modem10.AddReg, EXTERNAL, Rock_Cirrus_Responses
+
+[Modem9] ; SmartLink 1414BCV/BCL
+AddReg=All, MfgAddReg, Modem9.AddReg, INTERNAL, Rock_Cirrus_Responses
+
+[Modem4] ; SmartLink 2834BA
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL, Rock_Cirrus_Responses
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL, Rock_Cirrus_Responses
+
+[Modem15.AddReg] ; SmartLink 3334BT
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,83,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F1<cr>"
+HKR, Init, 3,, "AT S0=0<cr>"
+HKR, Init, 4,, "AT E0 V1 &C1 &D2 Q0 &B1 &A3<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem10.AddReg] ; SmartLink V32Te
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,E1,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 3,, "AT E0 V1 &D2 &C1 S0=0 S95=47<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem9.AddReg] ; SmartLink 1414BCV/BCL
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,E1,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 3,, "AT E0 &D2 &C1 S0=0 V1 \V2<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 4,, "AT W2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[Strings]
+ClassName = "Modem"
+
+Phoebe = "Phoebe Micro"
+Phoebe1PNP="Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play"
+Phoebe1="Phoebe Micro 33.6 Data Fax 1433VQH"
+
+Mfg = "Archtek America Corp."
+Modem16PNP = "Archtek SmartLink Modem 3334BT Plug & Play"
+Modem15PNP = "Archtek SmartLink Modem 3334BT Plug & Play"
+Modem15 = "Archtek SmartLink Modem 3334BT"
+Modem10="Archtek SmartLink Modem V32Te"
+Modem9="Archtek SmartLink Modem 1414BCV-BCL"
+Modem4="Archtek SmartLink Modem 2834BA"
+Modem2="Archtek SmartLink Modem 2834A-1"
+Modem2a="Archtek Smartlink 28.8 Data Fax Modem" ; generic
+Modem1="Archtek SmartLink Modem 2834A"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 &D2 &C1 S0=0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1""H3-J1"
+HKR, Settings, Compression_Off,, "%%C0""H0-J0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Rock_Cirrus_Responses]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT - CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: MNP2,4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3,4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300/V42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+[3334BT_Responses]
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V34<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V34/NONE<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V34<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V34/MNP<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/LAPM/V42BIS<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V34<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V34/NONE<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V34<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V34<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V32<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V34/NONE<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V32/NONE<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V34<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/MNP<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V34/MNP<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/MNP/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V32<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V34<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V32/NONE<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V34/NONE<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V34<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/MNP/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V32<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V34<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V32/NONE<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V34/NONE<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V34<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/MNP/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V32<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V34<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V32/NONE<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V34/NONE<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V34<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32/MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V34/MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32/MNP/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V32<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V34<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V32/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V34/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/VFC/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V34<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/VFC<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32/MNP/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V34<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/VFC<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V34/NONE<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/VFC/NONE<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V34<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/VFC<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V34/MNP<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V34<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/VFC<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V34/NONE<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/VFC/NONE<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V34<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/VFC<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V34<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/VFC<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V34/NONE<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/VFC/NONE<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V34<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/VFC<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V34<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/VFC<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V34/NONE<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/VFC/NONE<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V34<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/VFC<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V34/MNP<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V34<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/VFC<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V34/NONE<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/VFC/NONE<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V34<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/VFC<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V34<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/VFC<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V34/NONE<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/VFC/NONE<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V34<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/VFC<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/VFC/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/VFC/LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/VFC/MNP/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200<cr><lf>", 1, 02, 00, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/V34<cr><lf>", 1, 02, 00, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/V34/NONE<cr><lf>", 1, 02, 00, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V34<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V34/MNP<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600<cr><lf>", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/V34<cr><lf>", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/V34/NONE<cr><lf>", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V34<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V34/MNP<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V34/LAPM<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V34/MNP/MNP5<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V34/LAPM/V42BIS<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmarcht.inx b/private/unimodem/inf/mdmarcht.inx
new file mode 100644
index 000000000..d090c4ee9
--- /dev/null
+++ b/private/unimodem/inf/mdmarcht.inx
@@ -0,0 +1,421 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Archtek
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM11E533F0
+
+[Models]
+%Modem1% = Modem1,, UNIMODEM11E533F0
+%Modem2% = Modem1, UNIMODEM11E533F0
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Archtek Telecom Corp."
+
+; Model strings
+
+Modem1="SmartLink 1414AV DUT"
+Modem2="1414AV Terbo" ; Generic Archtek/Bausch
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1,01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&F&D2&K3&C1%%C0W0-J1S95=122<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps (found by experimentation)
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps (found by experimentation)
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps (found by experimentation)
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - DATA connection
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps (found by experimentation)
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC - Hayes Adaptive Data Compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB - LAPB error-control negotiated
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX - LAPB half-duplex error-control negotiated
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT - LAPB Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB - X.25 error-control negotiated
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX - X.25 half-duplex error-control negotiated
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT - X.25 Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX - V.42 LAPM half-duplex error-control negotiated
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT - V.42 LAPM Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmarn.inx b/private/unimodem/inf/mdmarn.inx
new file mode 100644
index 000000000..5e62261a7
--- /dev/null
+++ b/private/unimodem/inf/mdmarn.inx
@@ -0,0 +1,690 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ARN
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM4EA1F97D, UNIMODEM5866042E, UNIMODEM4CC9E873, UNIMODEM4B27BE1D, UNIMODEM384B7467, UNIMODEM0CE292E1, UNIMODEM47F840CF, UNIMODEM5392DE12, UNIMODEM77FC7FD7, UNIMODEM3CE6ADF9
+
+[Models]
+%Modem1% = Modem1, PCMCIA\ARN_INFORMATIQUE-DX-MC2-DB34
+%Modem1% = Modem1, ARN_Modem1, UNIMODEM4EA1F97D ; ARN DX MC2
+%Modem1% = Modem1, ARN_Modem1, UNIMODEM4B27BE1D ; ARN DX MC2
+%Modem1% = Modem1, UNIMODEM263434DC ; ARN DX MC2 DPi
+%Modem1% = Modem1, UNIMODEMC6AE76A6 ; ARN DX MC2 DPi TEL
+%Modem1% = Modem1, UNIMODEMACE5B14B ; ARN DX MC2 DPi TELPRO
+%Modem1% = Modem1, UNIMODEMCF3F4085 ; ARN DX MC2 DPi COMPRO
+%Modem1% = Modem1, ARN_Modem1, UNIMODEM384B7467 ; ARN DX MC2 DPL TEL
+%Modem1% = Modem1, ARN_Modem1, UNIMODEM0CE292E1 ; ARN DX MC2 DPL TELPRO
+%Modem1% = Modem1, ARN_Modem1, UNIMODEM47F840CF ; ARN DX MC2 DPL COMPRO
+%Modem2% = Modem2, UNIMODEM5ADB076A ; ARN DX NOTA
+%Modem2% = Modem2, UNIMODEM9C620C98 ; ARN DX NOTA
+%Modem2% = Modem2, UNIMODEME8F9A165 ; ARN DX NOTA TEL
+%Modem2% = Modem2, UNIMODEMD646A5A5 ; ARN DX NOTA TELPRO
+%Modem2% = Modem2, UNIMODEM9D5C778B ; ARN DX NOTA COMPRO
+%Modem3% = Modem3, ARN_Modem3, UNIMODEM4EA1F97D ; ARN DX PC
+%Modem3% = Modem3, ARN_Modem3, UNIMODEM4B27BE1D ; ARN DX PC
+%Modem3% = Modem3, ARN_Modem3, UNIMODEM384B7467 ; ARN DX PC TEL
+%Modem3% = Modem3, ARN_Modem3, UNIMODEM0CE292E1 ; ARN DX PC TELPRO
+%Modem3% = Modem3, ARN_Modem3, UNIMODEM47F840CF ; ARN DX PC COMPRO
+%Modem4% = Modem4, PCMCIA\ARN_INFORMATIQUE-ARNDX+_MC2-1E2C
+%Modem4% = Modem4, ARN_Modem4, UNIMODEM5866042E ; ARN DX+ MC2
+%Modem5% = Modem5, UNIMODEM3CE6E21E ; ARN DX+ NOTA
+%Modem6% = Modem6, ARN_Modem6, UNIMODEM5866042E ; ARN DX+ PC
+%Modem7% = Modem7, PCMCIA\ARN_INFORMATIQUE-ARNMD-MC2-4600
+%Modem7% = Modem7, ARN_Modem7, UNIMODEM4CC9E873 ; ARN MD MC2
+%Modem7% = Modem7, ARN_Modem7, UNIMODEM5392DE12 ; ARN MD MC2 TEL
+%Modem7% = Modem7, ARN_Modem7, UNIMODEM77FC7FD7 ; ARN MD MC2 TELPRO
+%Modem7% = Modem7, ARN_Modem7, UNIMODEM3CE6ADF9 ; ARN MD MC2 COMPRO
+%Modem8% = Modem8, UNIMODEMB17BC3A8 ; ARN MD NOTA
+%Modem8% = Modem8, UNIMODEM81512BF7 ; ARN MD NOTA TEL
+%Modem8% = Modem8, UNIMODEMB373EBBC ; ARN MD NOTA TELPRO
+%Modem8% = Modem8, UNIMODEMF8693992 ; ARN MD NOTA COMPRO
+%Modem9% = Modem9, ARN_Modem9, UNIMODEM4CC9E873 ; ARN MD PC
+%Modem9% = Modem9, ARN_Modem9, UNIMODEM5392DE12 ; ARN MD PC TEL
+%Modem9% = Modem9, ARN_Modem9, UNIMODEM77FC7FD7 ; ARN MD PC TELPRO
+%Modem9% = Modem9, ARN_Modem9, UNIMODEM3CE6ADF9 ; ARN MD PC COMPRO
+%Modem10% = Modem10, UNIMODEM50CB5363 ; ARNIS-DX PC
+%Modem11% = Modem3, UNIMODEM4EA1F97D ; ARN DX MC2 or ARN DX PC
+%Modem11% = Modem3, UNIMODEM4B27BE1D ; ARN DX MC2 or ARN DX PC
+%Modem11% = Modem3, UNIMODEM384B7467 ; ARN DX MC2 or ARN DX PC TEL
+%Modem11% = Modem3, UNIMODEM0CE292E1 ; ARN DX MC2 or ARN DX PC TELPRO
+%Modem11% = Modem3, UNIMODEM47F840CF ; ARN DX MC2 or ARN DX PC COMPRO
+%Modem12% = Modem6, UNIMODEM5866042E ; ARN DX+ PC or ARN DX+ MC2
+%Modem13% = Modem9, UNIMODEM4CC9E873 ; ARN MD PC or ARN MD MC2
+%Modem13% = Modem9, UNIMODEM5392DE12 ; ARN MD PC or ARN MD MC2 TEL
+%Modem13% = Modem9, UNIMODEM77FC7FD7 ; ARN MD PC or ARN MD MC2 TELPRO
+%Modem13% = Modem9, UNIMODEM3CE6ADF9 ; ARN MD PC or ARN MD MC2 COMPRO
+%Modem14% = Modem14, ARN_Modem14, UNIMODEM50CB5363 ; ARNIS-DX PC Synchronous PPP
+%Modem15% = Modem15, ARN_Modem15, UNIMODEM50CB5363 ; ARNIS-DX PC V.14 57,6Kbps
+%Modem16% = Modem16, ARN_Modem16, UNIMODEM50CB5363 ; ARNIS-DX PC X.25 Transparent
+%Modem17% = Modem17, ARN_Modem17, UNIMODEM50CB5363 ; ARNIS-DX PC V.120
+
+; Installation sections
+
+[Modem1] ; ARN DX MC2
+AddReg=All, MfgAddReg, Modem1.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem2] ; ARN DX NOTA
+AddReg=All, MfgAddReg, Modem2.AddReg, VerboseResultCodes, EXTERNAL
+
+[Modem3] ; ARN DX PC
+AddReg=All, MfgAddReg, Modem3.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem4] ; ARN DX+ MC2
+AddReg=All, MfgAddReg, Modem4.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem5] ; ARN DX+ Nota
+AddReg=All, MfgAddReg, Modem5.AddReg, VerboseResultCodes, External
+
+[Modem6] ; ARN DX+ PC
+AddReg=All, MfgAddReg, Modem6.AddReg, VerboseResultCodes, Internal
+
+[Modem7] ; ARN MD MC2
+AddReg=All, MfgAddReg, Modem7.AddReg, VerboseResultCodes, PCMCIA
+
+[Modem8] ; ARN MD Nota
+AddReg=All, MfgAddReg, Modem8.AddReg, VerboseResultCodes, External
+
+[Modem9] ; ARN MD PC
+AddReg=All, MfgAddReg, Modem9.AddReg, VerboseResultCodes, Internal
+
+[Modem10] ; ARNIS-DX PC
+AddReg=All, MfgAddReg, Modem10.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem14] ; ARNIS Synchronous PPP
+AddReg=All, MfgAddReg, Modem14.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem15] ; ARNIS V.14 57,6Kbps
+AddReg=All, MfgAddReg, Modem15.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem16] ; ARNIS X.25 Transparent
+AddReg=All, MfgAddReg, Modem16.AddReg, VerboseResultCodes, INTERNAL
+
+[Modem17] ; ARNIS V.120
+AddReg=All, MfgAddReg, Modem17.AddReg, VerboseResultCodes, INTERNAL
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=74,0,300,28800"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=74,0,300,28800"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=74,0,300,28800"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=11,0,300,28800"
+HKR, Settings, SpeedNegotiation_On,, "+MS=11,1,300,28800"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=11,0,300,28800"
+HKR, Settings, SpeedNegotiation_On,, "+MS=11,1,300,28800"
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, SpeedNegotiation_Off,, "+MS=11,0,300,28800"
+HKR, Settings, SpeedNegotiation_On,, "+MS=11,1,300,28800"
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Modem14.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=6<cr>"
+
+[Modem15.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=5<cr>"
+
+[Modem16.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=3<cr>"
+
+[Modem17.AddReg]
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, Default, 1, 00,00,00,00, 00,00,00,00, 01,00,00,00, 01,00,00,00, 10,01,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "AT&FV0S0=0S122=2<cr>"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ARN"
+
+Modem1="ARN DX MC2"
+Modem2="ARN DX Nota"
+Modem3="ARN DX PC"
+Modem4="ARN DX+ MC2"
+Modem5="ARN DX+ Nota"
+Modem6="ARN DX+ PC"
+Modem7="ARN MD MC2"
+Modem8="ARN MD Nota"
+Modem9="ARN MD PC"
+Modem10="ARN IS-DX PC"
+Modem11="ARN DX PC & ARN DX MC2"
+Modem12="ARN DX+ PC & ARN DX+ MC2"
+Modem13="ARN MD PC & ARN MD MC2"
+Modem14="ARNIS-DX PC ISDN Sync. PPP"
+Modem15="ARNIS-DX PC ISDN V.14 57,6Kbps"
+Modem16="ARNIS-DX PC ISDN X.25 Transparent"
+Modem17="ARNIS-DX PC ISDN V.120"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 Q0 W1 X4 V1 S95=45 &C1<cr>"
+HKR, Init, 3,, "AT &D2 &S0 S0=0 \N3 %%C3<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1S37=5"
+HKR, Settings, SpeedNegotiation_On,, "N1S37=0"
+HKR, Settings, SpeedNegotiation_Off,, "N0S37=0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1)M1*H0"
+HKR, Settings, Cellular_Off,, "-K0)M0"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "&K0"
+HKR, Fax, Class1FlowHW,, "&K3"
+HKR, Fax, Class1FlowSW,, "&K4"
+HKR, Fax, Class2FlowOff,, "&K0"
+HKR, Fax, Class2FlowHW,, "&K3"
+HKR, Fax, Class2FlowSW,, "&K4"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 58,02,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,e1,00,00, 00,e1,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,c2,01,00, 00,c2,01,00
+HKR, Responses, "22<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "24<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+; 28800
+HKR, Responses, "58<cr>70<cr>66<cr>64<cr>", 1, 02, 01, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>67<cr>64<cr>", 1, 02, 01, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>69<cr>64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>70<cr>64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>66<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>67<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>69<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>77<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>66<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>67<cr>64<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>69<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>80<cr>64<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>66<cr>64<cr>", 1, 02, 0B, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>67<cr>64<cr>", 1, 02, 0B, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>69<cr>64<cr>", 1, 02, 0A, 80,70,00,00, 00,00,00,00
+HKR, Responses, "58<cr>81<cr>64<cr>", 1, 02, 0A, 80,70,00,00, 00,00,00,00
+
+; 26400
+HKR, Responses, "57<cr>70<cr>66<cr>63<cr>", 1, 02, 01, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>67<cr>63<cr>", 1, 02, 01, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>69<cr>63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>70<cr>63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>66<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>67<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>69<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>77<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>66<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>67<cr>63<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>69<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>80<cr>63<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>66<cr>63<cr>", 1, 02, 0B, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>67<cr>63<cr>", 1, 02, 0B, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>69<cr>63<cr>", 1, 02, 0A, 20,67,00,00, 00,00,00,00
+HKR, Responses, "57<cr>81<cr>63<cr>", 1, 02, 0A, 20,67,00,00, 00,00,00,00
+
+; 24000
+HKR, Responses, "56<cr>70<cr>66<cr>62<cr>", 1, 02, 01, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>67<cr>62<cr>", 1, 02, 01, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>69<cr>62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>70<cr>62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>66<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>67<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>69<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>77<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>66<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>67<cr>62<cr>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>69<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>80<cr>62<cr>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>66<cr>62<cr>", 1, 02, 0B, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>67<cr>62<cr>", 1, 02, 0B, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>69<cr>62<cr>", 1, 02, 0A, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "56<cr>81<cr>62<cr>", 1, 02, 0A, C0,5D,00,00, 00,00,00,00
+
+; 21600
+HKR, Responses, "55<cr>70<cr>66<cr>61<cr>", 1, 02, 01, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>67<cr>61<cr>", 1, 02, 01, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>69<cr>61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>70<cr>61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>66<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>67<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>69<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>77<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>66<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>67<cr>61<cr>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>69<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>80<cr>61<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>66<cr>61<cr>", 1, 02, 0B, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>67<cr>61<cr>", 1, 02, 0B, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>69<cr>61<cr>", 1, 02, 0A, 60,54,00,00, 00,00,00,00
+HKR, Responses, "55<cr>81<cr>61<cr>", 1, 02, 0A, 60,54,00,00, 00,00,00,00
+
+; 19200
+HKR, Responses, "54<cr>70<cr>66<cr>16<cr>", 1, 02, 01, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>67<cr>16<cr>", 1, 02, 01, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>69<cr>16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>70<cr>16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>66<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>67<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>69<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>77<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>66<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>67<cr>16<cr>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>69<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>80<cr>16<cr>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>66<cr>16<cr>", 1, 02, 0B, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>67<cr>16<cr>", 1, 02, 0B, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>69<cr>16<cr>", 1, 02, 0A, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "54<cr>81<cr>16<cr>", 1, 02, 0A, 00,4B,00,00, 00,00,00,00
+
+;16800
+HKR, Responses, "53<cr>70<cr>66<cr>59<cr>", 1, 02, 01, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>67<cr>59<cr>", 1, 02, 01, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>69<cr>59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>70<cr>59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>66<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>67<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>69<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>77<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>66<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>67<cr>59<cr>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>69<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>80<cr>59<cr>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>66<cr>59<cr>", 1, 02, 0B, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>67<cr>59<cr>", 1, 02, 0B, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>69<cr>59<cr>", 1, 02, 0A, A0,41,00,00, 00,00,00,00
+HKR, Responses, "53<cr>81<cr>59<cr>", 1, 02, 0A, A0,41,00,00, 00,00,00,00
+
+; 14400
+HKR, Responses, "52<cr>70<cr>66<cr>15<cr>", 1, 02, 01, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>67<cr>15<cr>", 1, 02, 01, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>69<cr>15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>70<cr>15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>66<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>67<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>69<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>77<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>66<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>67<cr>15<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>69<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>80<cr>15<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>66<cr>15<cr>", 1, 02, 0B, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>67<cr>15<cr>", 1, 02, 0B, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>69<cr>15<cr>", 1, 02, 0A, 40,38,00,00, 00,00,00,00
+HKR, Responses, "52<cr>81<cr>15<cr>", 1, 02, 0A, 40,38,00,00, 00,00,00,00
+
+; 12000
+HKR, Responses, "51<cr>70<cr>66<cr>14<cr>", 1, 02, 01, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>67<cr>14<cr>", 1, 02, 01, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>69<cr>14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>70<cr>14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>66<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>67<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>69<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>77<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>66<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>67<cr>14<cr>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>69<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>80<cr>14<cr>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>66<cr>14<cr>", 1, 02, 0B, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>67<cr>14<cr>", 1, 02, 0B, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>69<cr>14<cr>", 1, 02, 0A, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "51<cr>81<cr>14<cr>", 1, 02, 0A, E0,2E,00,00, 00,00,00,00
+
+; 9600
+HKR, Responses, "50<cr>70<cr>66<cr>12<cr>", 1, 02, 01, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>67<cr>12<cr>", 1, 02, 01, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>69<cr>12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>70<cr>12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>66<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>67<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>69<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>77<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>66<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>67<cr>12<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>69<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>80<cr>12<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>66<cr>12<cr>", 1, 02, 0B, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>67<cr>12<cr>", 1, 02, 0B, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>69<cr>12<cr>", 1, 02, 0A, 80,25,00,00, 00,00,00,00
+HKR, Responses, "50<cr>81<cr>12<cr>", 1, 02, 0A, 80,25,00,00, 00,00,00,00
+
+; 7200
+HKR, Responses, "49<cr>70<cr>66<cr>13<cr>", 1, 02, 01, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>67<cr>13<cr>", 1, 02, 01, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>69<cr>13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>70<cr>13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>66<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>67<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>69<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>77<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>66<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>67<cr>13<cr>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>69<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>80<cr>13<cr>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>66<cr>13<cr>", 1, 02, 0B, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>67<cr>13<cr>", 1, 02, 0B, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>69<cr>13<cr>", 1, 02, 0A, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "49<cr>81<cr>13<cr>", 1, 02, 0A, 20,1C,00,00, 00,00,00,00
+
+; 4800
+HKR, Responses, "48<cr>70<cr>66<cr>11<cr>", 1, 02, 01, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>67<cr>11<cr>", 1, 02, 01, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>69<cr>11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>70<cr>11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>66<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>67<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>69<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>77<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>66<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>67<cr>11<cr>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>69<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>80<cr>11<cr>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>66<cr>11<cr>", 1, 02, 0B, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>67<cr>11<cr>", 1, 02, 0B, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>69<cr>11<cr>", 1, 02, 0A, C0,12,00,00, 00,00,00,00
+HKR, Responses, "48<cr>81<cr>11<cr>", 1, 02, 0A, C0,12,00,00, 00,00,00,00
+
+; 2400
+HKR, Responses, "47<cr>70<cr>66<cr>10<cr>", 1, 02, 01, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>67<cr>10<cr>", 1, 02, 01, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>69<cr>10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>70<cr>10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>66<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>67<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>69<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>77<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>66<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>67<cr>10<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>69<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>80<cr>10<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>66<cr>10<cr>", 1, 02, 0B, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>67<cr>10<cr>", 1, 02, 0B, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>69<cr>10<cr>", 1, 02, 0A, 60,09,00,00, 00,00,00,00
+HKR, Responses, "47<cr>81<cr>10<cr>", 1, 02, 0A, 60,09,00,00, 00,00,00,00
+
+; 1200
+HKR, Responses, "46<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 75TX/1200RX
+HKR, Responses, "45<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 1200TX/75RX
+HKR, Responses, "44<cr>70<cr>66<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>67<cr>05<cr>", 1, 02, 01, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>69<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>70<cr>05<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>77<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>66<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>67<cr>05<cr>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>69<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>80<cr>05<cr>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>66<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>67<cr>05<cr>", 1, 02, 0B, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>69<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+HKR, Responses, "44<cr>81<cr>05<cr>", 1, 02, 0A, B0,04,00,00, 00,00,00,00
+
+; 300
+HKR, Responses, "40<cr>70<cr>66<cr>01<cr>", 1, 02, 01, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>67<cr>01<cr>", 1, 02, 01, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>69<cr>01<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>70<cr>01<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>66<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>67<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>69<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>77<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>66<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>67<cr>01<cr>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>69<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>80<cr>01<cr>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>66<cr>01<cr>", 1, 02, 0B, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>67<cr>01<cr>", 1, 02, 0B, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>69<cr>01<cr>", 1, 02, 0A, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "40<cr>81<cr>01<cr>", 1, 02, 0A, 2C,01,00,00, 00,00,00,00
+
+[VerboseResultCodes]
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64K<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/VFC<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/VFC<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800/VFC<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/VFC<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/VFC<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/VFC<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/VFC<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmati.inx b/private/unimodem/inf/mdmati.inx
new file mode 100644
index 000000000..841a86626
--- /dev/null
+++ b/private/unimodem/inf/mdmati.inx
@@ -0,0 +1,251 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ATI Technologies Inc.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem7% = Modem7, "PCMCIA\ATI__-14.4_MODEM/FAX_-D904"
+%Modem7% = Modem7, UNIMODEMD9C98361
+%Modem6% = Modem6, UNIMODEM27848EEB
+%Modem6% = Modem6, UNIMODEM34488C84
+%Modem6% = Modem6, UNIMODEM236D02C9
+%Modem5% = Modem5, ATI_Modem5, UNIMODEMF7782786
+%Modem4% = Modem4, ATI_Modem4, UNIMODEMF7782786
+%Modem3% = Modem3, ATI_Modem3, UNIMODEM3ABE6861
+%Modem3% = Modem3, UNIMODEMB79F1713
+%Modem1% = Modem1, ATI_Modem1, UNIMODEM3ABE6861
+
+[Modem7] ; ATI 14400 ETC-EXPRESS
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem6] ; ATI 9600 ETC-E
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; ATI 14400 ETC-E
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4] ; ATI 14400 ETC-I
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; ATI 19200 ETC-E
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem1] ; ATI 19200 ETC-I
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+; AddReg sections
+
+[Modem7.AddReg] ; ATI 14400 ETC-EXPRESS
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&FE0V1S95=47<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, ErrorControl_On,, "&Q5"
+
+[Modem6.AddReg] ; ATI 9600 ETC-E
+
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+HKR, Init, 2,, "AT&F2E0W2<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem5.AddReg] ; ATI 14400 ETC-E
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg] ; ATI 14400 ETC-I
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; ATI 19200 ETC-E
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 00,4b,00,00
+
+[Modem1.AddReg] ; ATI 19200 ETC-I
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 00,4b,00,00
+
+[Strings]
+Mfg = "ATI Technologies Inc."
+
+; Model strings
+
+Modem7="ATI 14400 ETC-EXPRESS"
+Modem6="ATI 9600 ETC-E"
+Modem5="ATI 14400 ETC-E"
+Modem4="ATI 14400 ETC-I"
+Modem3="ATI 19200 ETC-E"
+Modem1="ATI 19200 ETC-I"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&F2E0S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F2<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q6"
+HKR, Settings, ErrorControl_Off,, "&Q0"
+HKR, Settings, ErrorControl_Forced,, "&Q6 S36=0"
+HKR, Settings, Compression_On,, "&U1"
+HKR, Settings, Compression_Off,, "&U0"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S40=<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 2400 <cr><lf>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2c,01,00,00, 2c,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, b0,04,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 60,09,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, b0,04,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, c0,12,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 40,38,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,4b,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, c0,12,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,4b,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,e1,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmatt.inx b/private/unimodem/inf/mdmatt.inx
new file mode 100644
index 000000000..3892bb746
--- /dev/null
+++ b/private/unimodem/inf/mdmatt.inx
@@ -0,0 +1,559 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: AT&T
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%ATT%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM43E11D57
+ExcludeFromSelect=PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-40E9
+ExcludeFromSelect=PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F
+ExcludeFromSelect=UNIMODEM5807B4CB
+ExcludeFromSelect=UNIMODEM16A162D5
+ExcludeFromSelect=UNIMODEM7B177FCF ; KeepInTouch and KeepInTouch Express
+
+[Manufacturer]
+%ATT% = ATT
+%NEC% = NEC
+%Nokia% = Nokia
+
+; Modem models
+
+[ATT]
+%Modem20% = Modem20, ATT_Modem20, UNIMODEM43E11D57 ; Comsphere 3825 Plus
+%Modem19% = Modem18, UNIMODEM16A162D5 ; Dataport PCX, Cardinal
+%Modem18% = Modem18, ATT_Modem18, UNIMODEM16A162D5 ; Dataport PCX
+%Modem17% = Modem15, UNIMODEM5807B4CB ; KIT 28.8+cell, KIT 28.8 no cell
+%Modem16% = Modem16, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_3766-4156 ; KIT 28.8 cell PCMCIA
+%Modem16% = Modem16, ATT_Modem16, UNIMODEM5807B4CB ; KIT 28.8 cell PCMCIA
+%Modem15% = Modem15, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_3765-A5C2 ; KIT 28.8 PCMCIA
+%Modem15% = Modem15, ATT_Modem15, UNIMODEM5807B4CB ; KIT 28.8 PCMCIA
+%Modem14% = Modem14, UNIMODEM3C89963B ; Dataport 28.8 V.34
+%Modem13% = Modem13, UNIMODEM169744BD ; Comsphere 3810 Plus
+%Modem12% = Modem12, ATT_Modem12, UNIMODEM43E11D57 ; Comsphere 3820 Plus
+%Modem10% = Modem6, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F ; Rank 0 for Keep in touch, keep in touch express, Nokia, Com1
+%Modem9% = Modem9, UNIMODEMADA0F3F6 ; Dataport Express Internal
+%Modem8% = Modem8, UNIMODEM401EA6EE ; Dataport Express External
+%Modem7% = Modem7, UNIMODEM43E11D57 ; combo id
+%Modem6a% = Modem6, ATT_Modem6a, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F ; AT&T Keep in Touch PC Card
+%Modem6a% = Modem6, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-3761 ; AT&T Keep in Touch PC Card
+%Modem6a% = Modem6, ATT_Modem6a, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-40E9 ; AT&T Keep in Touch PC Card
+%Modem6a% = Modem6, ATT_Modem6a, UNIMODEMC605070E ; Rank-1 for AT&T
+%Modem6a% = Modem6, ATT_Modem6a, UNIMODEM7B177FCF ; Rank-1 for AT&T
+
+%Modem6% = Modem6, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-40E9 ; Generic name
+%Modem6% = Modem6, UNIMODEMC605070E ; Generic name
+%Modem6% = Modem6, ATT_Modem6, UNIMODEM43E11D57 ; AT&T KeepInTouch 14.4 PCMCIA
+%Modem5% = Modem5, ATT_Modem5, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F ; Keep in Touch Express
+%Modem5% = Modem5, ATT_Modem5, UNIMODEM7B177FCF ; Keep in Touch Express, production model
+%Modem5a% = Modem5, UNIMODEM7B177FCF ; Keep in Touch Express, production model
+
+%Modem4% = Modem4, UNIMODEM964AB664 ; AT&T Comsphere 3810
+%Modem3% = Modem3, UNIMODEM3662183F ; AT&T Dataport 14.4/FAX Internal
+%Modem2% = Modem2, UNIMODEM8CAF9051 ; 1994 AT&T DataPort 14.4/FAX External
+%Modem2% = Modem2, UNIMODEM50DB2053 ; AT&T DataPort 14.4/FAX External
+%Modem2% = Modem2, ATT_Modem2, UNIMODEM43E11D57 ; 1992 model AT&T DataPort 14.4/fax
+%Modem2% = Modem2, UNIMODEMB41EB9B2
+%Modem1% = Modem1, ATT_Modem1, UNIMODEM43E11D57 ; 1994 model AT&T DataPort 2001 External
+
+[NEC]
+%Modem6b% = Modem6, ATT_Modem6b, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-40E9
+%Modem6b% = Modem6, ATT_Modem6b, UNIMODEMC605070E
+
+[Nokia]
+%Modem11% = Modem6, ATT_Modem11, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F ; Nokia 14.4 with no cell
+
+; Installation sections
+
+[Modem20] ; Comsphere 3825 Plus
+AddReg=All, MfgAddReg, Modem20.AddReg, EXTERNAL
+
+[Modem18] ; Dataport PCX
+AddReg=All, MfgAddReg, Modem18.AddReg, INTERNAL
+
+[Modem16] ; KIT 28.8 cell PCMCIA
+AddReg=All, MfgAddReg, Modem16.AddReg, PCMCIA
+
+[Modem15] ; KIT 28.8 PCMCIA
+AddReg=All, MfgAddReg, Modem15.AddReg, PCMCIA
+
+[Modem14] ; AT&T Dataport 28.8 V.34
+AddReg=All, MfgAddReg, Modem14.AddReg, EXTERNAL
+
+[Modem13] ; Comsphere 3810 Plus
+AddReg=All, MfgAddReg, Modem13.AddReg, EXTERNAL
+
+[Modem12] ; Comsphere 3820 Plus
+AddReg=All, MfgAddReg, Modem12.AddReg, EXTERNAL
+
+[Modem9] ; DataPort Express
+AddReg=All, MfgAddReg, Modem8.AddReg, INTERNAL
+
+[Modem8] ; DataPort Express
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7] ; DataPort 2001 and dataport 14.4 combo.
+AddReg=All, MfgAddReg, Modem7.AddReg, EXTERNAL
+
+[Modem6] ; AT&T Keep in Touch PC Card
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5] ; AT&T Keep in Touch Express PC Card
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4] ; AT&T Comsphere 3810
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem3] ; AT&T Dataport 14.4/fax
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem2] ; DataPort 14.4/FAX
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; DataPort 2001
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+; AddReg sections
+
+[Modem20.AddReg] ; AT&T Comsphere 3825 Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 7f,03,00,00, 00,c2,01,00, 40,83,00,00
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, "&F6 \N5 S91=1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&F6 \N4 S91=1"
+HKR, Settings, DialSuffix,, ";"
+
+[Modem18.AddReg] ; Dataport PCX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 W2<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, DialSuffix,, ";"
+
+[Modem16.AddReg] ; KIT 28.8 PCMCIA with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 07,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 S90=0<cr>"
+HKR, Settings, ErrorControl_Cellular,, "&F6 \N7"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&F6 \N6"
+HKR, Settings, DialSuffix,, ";"
+
+[Modem15.AddReg] ; KIT 28.8 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, DialSuffix,, ";"
+
+[Modem14.AddReg] ; DataPort 28.8 V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, DialSuffix,, ";"
+
+[Modem13.AddReg] ; AT&T Comsphere 3810 Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, "&F6 \N5"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&F6 \N4"
+HKR, Settings, DialSuffix,, ";"
+
+[Modem12.AddReg] ; AT&T Comsphere 3820 Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Modem8.AddReg] ; DataPort Express External or internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg] ; old 1992 dataport 14.4/fax modem and 2001 combo (default to 19200 because 38400 doesn't always work well)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 2,, "AT &F S0=0 &D2 &C1 E0 V1<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Modem6.AddReg] ; AT&T Keep in Touch PC Card - cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 7f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7 &F6 S0=0 &D2 E0 V1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 &F6 S0=0 &D2 E0 V1"
+
+[Modem5.AddReg] ; AT&T Keep in Touch Express PCMCIA card
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 7f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7 &F6 S0=0 &D2 E0 V1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 &F6 S0=0 &D2 E0 V1"
+
+[Modem4.AddReg] ; AT&T Comsphere 3810
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 37,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Modem2.AddReg] ; DataPort 14.4/FAX external and internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem1.AddReg] ; DataPort 2001
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Strings]
+ATT = "AT&T"
+NEC = "NEC"
+Nokia = "Nokia Mobile Phones"
+
+; Model strings
+
+Modem20="AT&T Comsphere 3825 Plus"
+Modem19="14.4 Data Fax Modem"
+Modem18="AT&T DataPort PCX 14.4 Data Fax"
+Modem17="AT&T KeepInTouch 28.8 V.34 PCMCIA"
+Modem16="AT&T KeepInTouch Cellular 28.8 V.34 PCMCIA"
+Modem15="AT&T KeepInTouch 28.8 V.34 PCMCIA"
+Modem14="AT&T DataPort Express V.34 (28.8)"
+Modem13="AT&T Comsphere 3810 Plus"
+Modem12="AT&T Comsphere 3820 Plus"
+Modem11="Nokia 14.4 PCMCIA"
+Modem10="14.4 PCMCIA Modem"
+Modem9 ="AT&T DataPort Express Internal"
+Modem8 ="AT&T DataPort Express External"
+Modem7 ="AT&T Modem"
+Modem6b="NEC 14.4 Kbps Data-Fax Card"
+Modem6a="AT&T KeepInTouch Card"
+Modem6 ="14,400 bps Data-Fax PCMCIA Modem"
+Modem5 ="AT&T KeepInTouch Express Card"
+Modem5a ="14.4 Data Fax PCMCIA Modem" ; combo, rank 0 for KeepIntouch and KeepInTouch express
+Modem4 ="AT&T Comsphere 3800 Series"
+Modem3 ="AT&T DataPort 14.4-Fax Internal"
+Modem2 ="AT&T DataPort 14.4-Fax External"
+Modem1 ="AT&T DataPort 2001"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F S0=0 &D2 E0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, "" ; disabled
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42", 1, 02, 02, 60,09,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42", 1, 02, 02, C0,12,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42", 1, 02, 02, 80,25,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42", 1, 02, 02, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42", 1, 02, 02, A0,41,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42", 1, 02, 02, 60,54,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42", 1, 02, 02, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR,Responses,"CONNECT 31200", 1,02,00,E0,79,00,0,0,0,0,0
+HKR,Responses,"CONNECT 33600", 1,02,00,40,83,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 31200/ EC", 1,02,02,E0,79,00,0,0,0,0,0
+HKR,Responses,"CONNECT 31200/EC", 1,02,02,E0,79,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 33600/ EC", 1,02,02,40,83,00,0,0,0,0,0
+HKR,Responses,"CONNECT 33600/EC", 1,02,02,40,83,00,0,0,0,0,0
diff --git a/private/unimodem/inf/mdmaus.inx b/private/unimodem/inf/mdmaus.inx
new file mode 100644
index 000000000..ff820e756
--- /dev/null
+++ b/private/unimodem/inf/mdmaus.inx
@@ -0,0 +1,670 @@
+; MDMAUS.INF
+;
+; This is the INF file for Australian modems using generic
+; command set information. Specific models are moved to
+; MDM*.INF when correct command set information is available.
+;
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMCDF91D6A
+
+; --------------------------------------------------
+; Manufacturers
+
+[Manufacturer]
+%Avtek%=Avtek
+%Banksia%=Banksia
+%Exicom%=Exicom
+%Interlink%=Interlink
+%Teltra%=Teltra
+%Maestro%=Maestro
+%Microfax%=Microfax
+%NetComm%=NetComm
+%Schmidt%=Schmidt
+%Simple%=Simple
+
+; --------------------------------------------------
+; Driver sections
+
+[Avtek]
+%Avtek1%=Gen144, AUS_Avtek1 ; Avtek PC MegaData Fax
+%Avtek2%=Gen144, AUS_Avtek2 ; Avtek MegaData Fax
+%Avtek3%=Gen144, AUS_Avtek3 ; Avtek MegaPlus Fax 1234
+%Avtek4%=Gen144, AUS_Avtek4 ; Avtek MegaPlus Fax V.32bis
+%Avtek5%=Gen144, AUS_Avtek5 ; Avtek Mini Pocket Fax
+%Avtek6%=Gen144, AUS_Avtek6 ; Avtek MegaData Fax 144
+%Avtek7%=Gen288, AUS_Avtek7 ; Avtek MegaPlus Fax V.34
+%Avtek8%=Gen288, AUS_Avtek8 ; Avtek MegaPlus Fax 288
+
+[Banksia]
+%Banksia1%=Gen144, AUS_Banksia1, UNIMODEMCDF91D6A ; Banksia MyModem V.32bis Fax
+%Banksia2%=Gen288, UNIMODEM153A4D63 ; Banksia MyFastModem 28.8 Fax
+%Banksia3%=Gen288, UNIMODEMF24526DB ; Banksia MyFastModem 28.8 V34 Fax
+%Banksia4%=Gen144, UNIMODEM5E99A549 ; Banksia MyVoiceModem
+%Banksia5%=Gen144, AUS_Banksia5, UNIMODEMVFG91D6A ; Banksia MyPocketModem
+%Banksia6%=Gen144, AUS_Banksia6, UNIMODEM6FC2012E ; Banksia MyInModem V.32bis Fax
+%Banksia7%=Gen288, UNIMODEM6D96A84C ; Banksia MyFastInModem
+%Banksia8%=Gen144, UNIMODEM8818F3D0 ; Banksia Blitzer V.32bis Fax
+%Banksia9%=Gen24, AUS_Banksia9, UNIMODEM24FFB24B ; Banksia Joey
+%Banksia10%=Gen96, UNIMODEM3A00236D ; Banksia Bit Blitzer MX-5 V.32
+%Banksia11%=Gen144, UNIMODEM54B93F43 ; Banksia Bit Blitzer MX-5S V.32bis
+%Banksia11%=Gen144, UNIMODEM32F27CDB ; Banksia Bit Blitzer MX-5S V.32bis
+%Banksia12%=Gen144, UNIMODEM69B841C5 ; Banksia Bit Blitzer MX-6 V.32bis Fax
+%Banksia13%=Gen96, UNIMODEM3E8F917D ; Banksia ProModem MX-5W V.32 Fax
+%Banksia14%=Gen144, UNIMODEM8E461634 ; Banksia ProModem MX-6W V.32bis Fax
+%Banksia15%=Gen24, UNIMODEMB0FB385B ; Banksia MainlyFax
+%Banksia16%=Gen24I, AUS_Banksia16, UNIMODEM9F2BBC58 ; Banksia InFax
+%Banksia17%=Gen144, UNIMODEMCDF91D6A ; Banksia combo
+
+[Exicom]
+%Exicom1%=Gen288, AUS_Exicom1 ; Exicom 288
+%Exicom2%=Gen96, AUS_Exicom2 ; Exicom 596
+
+[Teltra]
+%Teltra1%=Gen288, AUS_Teltra1 ; Teltra TEL 288
+%Teltra2%=Gen96, AUS_Teltra2 ; Teltra TEL 596
+
+[Interlink]
+%Intlnk1% =Gen144, UNIMODEM190612C1 ; Interlink Voidax I 14400 Fax
+%Intlnk2% =Gen144, UNIMODEM6AAFCE3B ; Interlink Voidax II 14400 Fax
+%Intlnk3% =Gen144, UNIMODEM6977A9DB ; Interlink Voidax III 14400 Fax
+%Intlnk4% =Gen144, UNIMODEM7B5EC8CC ; Interlink Voidax PRO 14400 Fax
+%Intlnk5% =Gen24I, UNIMODEM66188720 ; Interlink Hotlink 1i 2400 Fax
+%Intlnk6% =Gen96I, UNIMODEMA54DF85F ; Interlink Hotlink 2i 9600 Fax
+%Intlnk7% =Gen144I,UNIMODEM0429867C ; Interlink Hotlink 3i 14.4 Fax
+%Intlnk8% =Gen288I,UNIMODEM454B8908 ; Interlink Hotlink 4i 28.8 Fax
+%Intlnk9% =Gen288I,UNIMODEM688A1B14 ; Interlink Hotlink 5i 28.8 V.34 Fax
+%Intlnk10%=Gen24, UNIMODEM799D0CF9 ; Interlink Hotlink 1x 2400 Fax
+%Intlnk11%=Gen96, UNIMODEM5C1E3266 ; Interlink Hotlink 2x 9600 Fax
+%Intlnk12%=Gen144, UNIMODEMA6A2BB2C ; Interlink Hotlink 3x 14.4 Fax
+%Intlnk13%=Gen288, UNIMODEM0F65F9F6 ; Interlink Hotlink 4x 28.8 Fax
+%Intlnk14%=Gen288, UNIMODEM20D726D3 ; Interlink Hotlink 5x 28.8 V.34 Fax
+%Intlnk15%=Gen24, UNIMODEM056C1556 ; Interlink FM3
+%Intlnk16%=Gen144, AUS_Intlnk16 ; Interlink IQ 12345
+%Intlnk17%=Gen144, AUS_Intlnk17 ; Interlink IQ 6
+%Intlnk18%=Gen144, AUS_Intlnk18 ; Interlink Base 12345
+%Intlnk19%=Gen144, AUS_Intlnk19 ; Interlink Base 6
+%Intlnk20%=Gen144, AUS_Intlnk20 ; Interlink FastBit IICP
+%Intlnk21%=Gen144, AUS_Intlnk21 ; Interlink FastBit IIbisCP
+
+[Maestro]
+%Maestro1%=Gen96, AUS_Maestro1 ; Maestro Executive 96
+%Maestro2%=Gen144, AUS_Maestro2 ; Maestro Executive 144
+%Maestro3%=Gen288, AUS_Maestro3 ; Maestro Executive 288
+%Maestro4%=Gen144, AUS_Maestro4 ; Maestro Companion 144
+%Maestro5%=Gen288, AUS_Maestro5 ; Maestro Companion 288
+
+[Microfax]
+%Microfax1%=Gen24, AUS_Microfax1 ; Microfax 9624
+%Microfax2%=Gen144, AUS_Microfax2 ; Microfax 144
+%Microfax3%=Gen288, AUS_Microfax3 ; Microfax 288 V.34
+%Microfax4%=Gen144, AUS_Microfax4 ; Microfax Synergy
+
+[NetComm]
+%NetComm1% =Gen24, AUS_NetComm1 ; NetComm AutoFaxModem 24
+%NetComm2% =Gen144, AUS_NetComm2 ; NetComm AutoModem E34F
+%NetComm3% =Gen144, AUS_NetComm3 ; NetComm AutoModem E7
+%NetComm4% =Gen144, AUS_NetComm4 ; NetComm AutoModem V6
+%NetComm5% =Gen144, AUS_NetComm5 ; NetComm AutoModem V8
+%NetComm6% =Gen24, AUS_NetComm6 ; NetComm CardModem 24
+%NetComm7% =Gen24, AUS_NetComm7 ; NetComm InFaxModem 24
+%NetComm8% =Gen144, AUS_NetComm8 ; NetComm Pocket PA
+%NetComm9% =Gen24, AUS_NetComm9 ; NetComm PocketFax 24
+%NetComm10%=Gen144, AUS_NetComm10 ; NetComm SmartModem E7
+%NetComm11%=Gen144, AUS_NetComm11 ; NetComm SmartModem M11F
+%NetComm12%=Gen144, AUS_NetComm12 ; NetComm SmartModem M34F
+%NetComm13%=Gen144, AUS_NetComm13 ; NetComm SmartModem M4F
+%NetComm14%=Gen144, AUS_NetComm14 ; NetComm SmartModem M5
+%NetComm15%=Gen144, AUS_NetComm15 ; NetComm SmartModem M7F
+%NetComm16%=Gen144, AUS_NetComm16 ; NetComm SmartModem V8
+%NetComm17%=Gen144, AUS_NetComm17 ; NetComm WorldBlazer
+%NetComm18%=Gen144, AUS_NetComm18 ; NetComm Automodem E11F
+%NetComm19%=Gen144, AUS_NetComm19 ; NetComm SmartModem E5
+%NetComm20%=Gen144, AUS_NetComm20 ; NetComm SmartModem E7F
+%NetComm21%=Gen144, AUS_NetComm21 ; NetComm SmartModem M4
+%NetComm22%=Gen144, AUS_NetComm22 ; NetComm SmartModem M7F
+%NetComm23%=Gen144, AUS_NetComm23 ; NetComm SmartModem V6
+
+[Schmidt]
+%Schmidt1%=Gen24, AUS_Schmidt1 ; Schmidt 1234AT
+%Schmidt2%=Gen24, AUS_Schmidt2 ; Schmidt 123AT
+%Schmidt3%=Gen24, AUS_Schmidt3 ; Schmidt Panther 4
+
+[Simple]
+%Simple1%=Gen24, AUS_Simple1 ; Simplemodem 24f
+%Simple2%=Gen96, AUS_Simple2 ; Simplemodem 96f
+%Simple3%=Gen144, AUS_Simple3 ; Simplemodem 144f
+%Simple4%=Gen288, AUS_Simple4 ; Simplemodem 288f
+%Simple5%=Gen144P, AUS_Simple5 ; Simplemodem 144p
+%Simple6%=Gen288P, AUS_Simple6 ; Simplemodem 288p
+%Simple7%=Gen144I, AUS_Simple7 ; Simplemodem 144fi
+%Simple8%=Gen288I, AUS_Simple8 ; Simplemodem 288fi
+%Simple9%=Gen144I, AUS_Simple9 ; Simplemodem 144vi
+%Simple10%=Gen288I,AUS_Simple10 ; Simplemodem 288vi
+
+
+; --------------------------------------------------
+; Generic modem install sections
+
+[Gen]
+AddReg=All, GenericAddReg, GenReg, EXTERNAL
+
+[Gen3]
+AddReg=All, GenericAddReg, Gen3Reg, EXTERNAL
+
+[Gen12]
+AddReg=All, GenericAddReg, Gen12Reg, EXTERNAL
+
+[Gen24]
+AddReg=All, GenericAddReg, Gen24Reg, EXTERNAL
+
+[Gen24NFC]
+AddReg=All, GenericAddReg, Gen24NFCReg, EXTERNAL
+
+[Gen24I]
+AddReg=All, GenericAddReg, Gen24Reg, INTERNAL
+
+[Gen24P]
+AddReg=All, GenericAddReg, Gen24Reg, PCMCIA
+
+[Gen96]
+AddReg=All, GenericAddReg, Gen96Reg, EXTERNAL
+
+[Gen96I]
+AddReg=All, GenericAddReg, Gen96Reg, INTERNAL
+
+[Gen96P]
+AddReg=All, GenericAddReg, Gen96Reg, PCMCIA
+
+[Gen144]
+AddReg=All, GenericAddReg, Gen144Reg, EXTERNAL
+
+[Gen144I]
+AddReg=All, GenericAddReg, Gen144Reg, INTERNAL
+
+[Gen144P]
+AddReg=All, GenericAddReg, Gen144Reg, PCMCIA
+
+[Gen192]
+AddReg=All, GenericAddReg, Gen192Reg, EXTERNAL
+
+[Gen288]
+AddReg=All, GenericAddReg, Gen288Reg, EXTERNAL
+
+[Gen288I]
+AddReg=All, GenericAddReg, Gen288Reg, INTERNAL
+
+[Gen288P]
+AddReg=All, GenericAddReg, Gen288Reg, PCMCIA
+
+
+; --------------------------------------------------
+; Common AddReg sections
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[GenericAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "ATE0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>"
+
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+
+; DTE/DCE speeds will not be exact for generic modems because we will
+; treat CONNECT ### as a DCE speed when some modems will report it as DTE.
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+; --------------------------------------------------
+; Model AddReg sections
+
+[GenReg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 00,c2,01,00
+
+[Gen3Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 2c,01,00,00, 2c,01,00,00
+HKR,, DCB, 1, 1C,00,00,00, 2C,01,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen12Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, b0,04,00,00, b0,04,00,00
+HKR,, DCB, 1, 1C,00,00,00, B0,04,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen24Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 80,25,00,00, 60,09,00,00
+HKR,, DCB, 1, 1C,00,00,00, 60,09,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen24NFCReg] ; No Flow Control
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 80,25,00,00, 60,09,00,00
+HKR,, DCB, 1, 1C,00,00,00, 60,09,00,00, 11,00,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen96Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,96,00,00, 80,25,00,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen144Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen192Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen288Reg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+; --------------------------------------------------
+[Strings]
+MS = "Microsoft"
+
+Avtek="Avtek"
+Avtek1="Avtek PC MegaData Fax"
+Avtek2="Avtek MegaData Fax"
+Avtek3="Avtek MegaPlus Fax 1234"
+Avtek4="Avtek MegaPlus Fax V.32bis"
+Avtek5="Avtek Mini Pocket Fax"
+Avtek6="Avtek MegaData Fax 144"
+Avtek7="Avtek MegaPlus Fax V.34"
+Avtek8="Avtek MegaPlus Fax 288"
+
+Banksia="Banksia"
+Banksia1 ="Banksia MyModem V.32bis Fax"
+Banksia2 ="Banksia MyFastModem 28.8 Fax"
+Banksia3 ="Banksia MyFastModem 28.8 V.34 Fax"
+Banksia4 ="Banksia MyVoiceModem"
+Banksia5 ="Banksia MyPocketModem"
+Banksia6 ="Banksia MyInModem V.32bis Fax"
+Banksia7 ="Banksia MyFastInModem"
+Banksia8 ="Banksia Blitzer V.32bis Fax"
+Banksia9 ="Banksia Joey"
+Banksia10="Banksia Bit Blitzer MX-5 V.32"
+Banksia11="Banksia Bit Blitzer MX-5S V.32bis"
+Banksia12="Banksia Bit Blitzer MX-6 V.32bis Fax"
+Banksia13="Banksia ProModem MX-5W V.32 Fax"
+Banksia14="Banksia ProModem MX-6W V.32bis Fax"
+Banksia15="Banksia MainlyFax"
+Banksia16="Banksia InFax"
+Banksia17="Banksia Modem"
+
+Exicom="Exicom Australia PTY"
+Exicom1="Exicom 288"
+Exicom2="Exicom 596"
+
+Teltra="Teltra (Telecom Australia)"
+Teltra1="Teltra TEL 288"
+Teltra2="Teltra TEL 596"
+
+Interlink="Interlink Electronics"
+Intlnk1 ="Interlink Voidax I 14400 Fax"
+Intlnk2 ="Interlink Voidax II 14400 Fax"
+Intlnk3 ="Interlink Voidax III 14400 Fax"
+Intlnk4 ="Interlink Voidax PRO 14400 Fax"
+Intlnk5 ="Interlink Hotlink 1i 2400 Fax"
+Intlnk6 ="Interlink Hotlink 2i 9600 Fax"
+Intlnk7 ="Interlink Hotlink 3i 14.4 Fax"
+Intlnk8 ="Interlink Hotlink 4i 28.8 Fax"
+Intlnk9 ="Interlink Hotlink 5i 28.8 V.34 Fax"
+Intlnk10="Interlink Hotlink 1x 2400 Fax"
+Intlnk11="Interlink Hotlink 2x 9600 Fax"
+Intlnk12="Interlink Hotlink 3x 14.4 Fax"
+Intlnk13="Interlink Hotlink 4x 28.8 Fax"
+Intlnk14="Interlink Hotlink 5x 28.8 V.34 Fax"
+Intlnk15="Interlink FM3"
+Intlnk16="Interlink IQ 12345"
+Intlnk17="Interlink IQ 6"
+Intlnk18="Interlink Base 12345"
+Intlnk19="Interlink Base 6"
+Intlnk20="Interlink FastBit IICP"
+Intlnk21="Interlink FastBit IIbisCP"
+
+Maestro="Maestro Digital Communications"
+Maestro1="Maestro Executive 96"
+Maestro2="Maestro Executive 144"
+Maestro3="Maestro Executive 288"
+Maestro4="Maestro Companion 144"
+Maestro5="Maestro Companion 288"
+
+Microfax="Microfax"
+Microfax1="Microfax 9624"
+Microfax2="Microfax 144"
+Microfax3="Microfax 288 V.34"
+Microfax4="Microfax Synergy"
+
+NetComm="NetComm"
+NetComm1="NetComm AutoFaxModem 24"
+NetComm2="NetComm AutoModem E34F"
+NetComm3="NetComm AutoModem E7"
+NetComm4="NetComm AutoModem V6"
+NetComm5="NetComm AutoModem V8"
+NetComm6="NetComm CardModem 24"
+NetComm7="NetComm InFaxModem 24"
+NetComm8="NetComm Pocket PA"
+NetComm9="NetComm PocketFax 24"
+NetComm10="NetComm SmartModem E7"
+NetComm11="NetComm SmartModem M11F"
+NetComm12="NetComm SmartModem M34F"
+NetComm13="NetComm SmartModem M4F"
+NetComm14="NetComm SmartModem M5"
+NetComm15="NetComm SmartModem M7F"
+NetComm16="NetComm SmartModem V8"
+NetComm17="NetComm WorldBlazer"
+NetComm18="NetComm Automodem E11F"
+NetComm19="NetComm SmartModem E5"
+NetComm20="NetComm SmartModem E7F"
+NetComm21="NetComm SmartModem M4"
+NetComm22="NetComm SmartModem M7F"
+NetComm23="NetComm SmartModem V6"
+
+Schmidt="Schmidt Electronic Laboratories"
+Schmidt1="Schmidt 1234AT"
+Schmidt2="Schmidt 123AT"
+Schmidt3="Schmidt Panther 4"
+
+Simple="Simple Computing"
+Simple1="Simplemodem 24f"
+Simple2="Simplemodem 96f"
+Simple3="Simplemodem 144f"
+Simple4="Simplemodem 288f"
+Simple5="Simplemodem 144p"
+Simple6="Simplemodem 288p"
+Simple7="Simplemodem 144fi"
+Simple8="Simplemodem 288fi"
+Simple9="Simplemodem 144vi"
+Simple10="Simplemodem 288vi"
+
diff --git a/private/unimodem/inf/mdmblatz.inx b/private/unimodem/inf/mdmblatz.inx
new file mode 100644
index 000000000..31fdf23d1
--- /dev/null
+++ b/private/unimodem/inf/mdmblatz.inx
@@ -0,0 +1,490 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Blatzheim Datensysteme
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM35128D02, UNIMODEMA74E9121, UNIMODEME121B63B
+
+[Models]
+%Modem9% = Modem2,UNIMODEME121B63B ; Generic 2400 Blatz/Mix
+%Modem8% = Modem3,UNIMODEMA74E9121 ; Generic 14.4 Blatz/Mix
+%Modem7% = Modem7,UNIMODEM35128D02 ; Generic 28.8 Blatz/Mix
+%Modem6% = Modem6,Blatz_Modem6 ; Starline 28k8
+%Modem5% = Modem5,Blatz_Modem5 ; GM 144H Vbis+FAX
+%Modem4% = Modem4,UNIMODEM848B6083 ; GM 288 Vbis+fax
+%Modem4% = Modem4,UNIMODEM3D88352E ; GM 288 Vbis+fax
+%Modem4% = Modem4,Blatz_Modem4,UNIMODEM35128D02 ; GM 288 Vbis+fax
+%Modem3% = Modem3,Blatz_Modem3,UNIMODEMA74E9121 ; GM 144 Vbis+FAX
+%Modem3% = Modem3,UNIMODEMD00E0E11 ; GM 144 Vbis+FAX
+%Modem3% = Modem3,UNIMODEM2923711A ; GM 144 Vbis+FAX
+%Modem3% = Modem3,UNIMODEM5855326C ; GM 144 Vbis+FAX
+%Modem2% = Modem2,Blatz_Modem2,UNIMODEME121B63B ; GM 24 Vbis+Fax
+%Modem1% = Modem1,UNIMODEM4BC1E168 ; Starline 19k2
+
+; Installation sections
+
+[Modem8] ; Generic 14.4 Blatz/Mix
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7] ; Generic 28.8 Blatz/Mix
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem6] ; Starline 28k8
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5] ; GM 144H Vbis+FAX
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem4] ; GM 288 Vbis+fax
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3] ; GM 144 Vbis+FAX
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; GM 24 Vbis+Fax
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; Starline 19k2
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+; AddReg sections
+
+[Modem8.AddReg] ; Generic 14.4 Blatz/Mix
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Init, 3,, "AT S95=250 <cr>"
+
+[Modem7.AddReg] ; Generic 28.8 Blatz/Mix
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, ""
+
+[Modem6.AddReg] ; Starline 28k8
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 3,, "AT &F W3 S66=68 <cr>"
+
+[Modem4.AddReg] ;GM 288 Vbis+fax
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem3.AddReg] ;GM 144 Vbis+FAX
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem2.AddReg] ;GM 24 Vbis+Fax
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F W0 <cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem1.AddReg] ; Starline 19k2
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR, Init, 3,, "AT &F W3 S66=68 <cr>"
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Blatzheim Datensysteme"
+
+; Model strings
+Modem9="2400 Vbis+FAX"
+Modem8="14.4 Vbis+FAX"
+Modem7="28.8 Vbis+FAX"
+Modem6="Blatzheim Starline 28k8"
+Modem5="Blatzheim GM 144H Vbis+FAX"
+Modem4="Blatzheim GM 288 Vbis+FAX"
+Modem3="Blatzheim GM 144 Vbis+FAX"
+Modem2="Blatzheim GM 24 Vbis+FAX"
+Modem1="Blatzheim Starline 19k2"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[Internal]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr> <cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: ADC<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.42bis<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP1<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmboca.inx b/private/unimodem/inf/mdmboca.inx
new file mode 100644
index 000000000..0bd8aaeb3
--- /dev/null
+++ b/private/unimodem/inf/mdmboca.inx
@@ -0,0 +1,406 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Boca Research, Inc.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Modem12.PosDup]
+*PNP0500
+
+; Modem models
+
+[Models]
+
+%Modem14% = Modem14, BOCA_Modem14, PCMCIA\RIPICAA-RC144ACL-845A ; Bocamodem 14.4kbps V.32bis PCMCIA
+%Modem14% = Modem14, UNIMODEM02561BB7 ; Bocamodem 14.4kbps V.32bis PCMCIA
+%Modem13% = Modem13, BOCA_Modem13, UNIMODEM16E3BF9F ; Boca SoundExpression 14.4VSp
+%Modem12% = Modem12, BOCA_Modem12, UNIMODEM6A25C644 ; Boca Complete Office Communicator 14.4 Data, Fax, Voice, Speakerphone, Voicemail (internal)
+%Modem12% = Modem12, ISAPNP\BRI0A49_DEV0000 ; Boca Complete Office Communicator 14.4 Data, Fax, Voice, Speakerphone, Voicemail (internal)
+%Modem11% = Modem11, UNIMODEM135F074D ; Boca V.34 28,800 (internal)
+%Modem10% = Modem10, UNIMODEM87CF4B8B ; Boca V.34 28,800 (external)
+%Modem9% = Modem9, UNIMODEM43C368F7 ; Boca 14.4 V.32bis M1440E external
+%Modem9% = Modem9, UNIMODEM429E4E26 ; Boca 14.4 V.32bis M1440E external
+%Modem9% = Modem9, UNIMODEMBEAEF556 ; Boca 14.4 V.32bis M1440E external
+%Modem8% = Modem8, UNIMODEMC87B6630 ; Boca V.34 (INT)
+%Modem7% = Modem7, BOCA_Modem7, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; 144 data fax PCMCIA
+%Modem7% = Modem7, BOCA_Modem7, UNIMODEM858E1599 ; 144 data fax PCMCIA
+%Modem6% = Modem5, UNIMODEM650B96AF ; Boca 14.4Kbps V.32BIS M1440IW
+%Modem6% = Modem5, UNIMODEM53F21278 ; Boca 14.4Kbps V.32BIS M1440IW
+%Modem5% = Modem5, UNIMODEMC825EAE7 ; Boca 14.4Kbps V.32BIS M1440I
+%Modem5% = Modem5, BOCA_Modem5, UNIMODEM959C40CA ; Boca 14.4Kbps V.32BIS external
+%Modem4% = Modem4, UNIMODEMA3B660A7 ; Boca 28.8 V.Fast (internal)
+%Modem3% = Modem2, UNIMODEM52AF34A9 ; Boca 14.4Kbps V.32BIS M144IW
+%Modem3% = Modem2, UNIMODEMBFF3D387 ; Boca 14.4Kbps V.32BIS M144IW
+%Modem2% = Modem2, UNIMODEM36386789 ; Boca 14.4 Multimedia
+%Modem1% = Modem1, UNIMODEM275FFD7D ; Boca 28.8 V.Fast (ext)
+
+
+; Installation sections
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, Internal
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, Internal
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem10.AddReg, Internal
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+; AddReg sections
+
+[Modem14.AddReg] ; Bocamodem 14.4kbps V.32bis PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Modem13.AddReg] ; Boca SoundExpression 14.4VSp
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem12.AddReg] ; Boca Complete Office Communicator 14.4 Data, Fax, Voice, Speakerphone, Voicemail, isa
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 S0=0 &D2 &C1 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem10.AddReg] ; Boca V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1 S95=47 S0=0 &D2 &C1<cr>"
+
+[Modem9.AddReg] ; Boca 14.4 V.32bis M1440E external
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &R1 &D2 &C1 V1 W1 S0=0 S95=47<cr>"
+
+[Modem8.AddReg] ; Boca V.34 INTERNAL
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem7.AddReg] ; 14400 PCMCIA Fax/modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem2.AddReg] ; Boca 14.4Kbps Multimedia & Boca 14.4Kbps V.32BIS
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem1.AddReg] ; Boca 28.8 V.Fast (ext) & Boca 28.8 V.Fast (internal)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+Mfg = "Boca Research"
+
+; Model strings
+
+Modem14="Boca BocaModem 14.4Kbps V.32bis PCMCIA"
+Modem13="Boca SoundExpression 14.4VSp 14.4 Data-FAX"
+Modem12="Boca Complete Ofc Communicator 14.4 Data-FAX"
+Modem11="Boca 28.8 Kbps V.34 MV.34I" ;V.34 Internal
+Modem10="Boca 28.8 Kbps V.34 MV.34E" ;V.34 External
+Modem9="Boca 14.4 Kbps V.32BIS M1440E" ;M1440E
+Modem8="Boca 28.8 Kbps V.34 MV.34I" ;V.34
+Modem7="Boca 14.4 Kbps V.32BIS PCMCIA" ;PCMCIA, 14.4
+Modem6="Boca 14.4 Kbps V.32BIS M1440IW" ;M1440IW
+Modem5="Boca 14.4 Kbps V.32BIS M1440I" ;M1440I
+Modem4="Boca 28.8 V.Fast MV28KI" ;MV28KI #009125
+Modem3="Boca 14.4 Kbps V.32BIS M144IW" ;M144IW #010418
+Modem2="Boca 14.4 Kbps Multimedia FDV14I" ;FDV14I #008652
+Modem1="Boca 28.8 V.Fast MV24KE" ;MV24KE #11767
+
+; --------------------------------------------------------------
+; Common Registry Sections
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>",1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT CELLULAR<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42BIZ<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-+FCERROR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmbsb.inx b/private/unimodem/inf/mdmbsb.inx
new file mode 100644
index 000000000..ee05afc8f
--- /dev/null
+++ b/private/unimodem/inf/mdmbsb.inx
@@ -0,0 +1,177 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: BSB Datentechnik
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM1178DA0C ; SmartLink 2834A
+%Modem2% = Modem2, UNIMODEM4C8BA68C ; SmartLink V32Te
+
+; Installation sections
+
+[Modem1] ; SmartLink 2834A
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; SmartLink V32Te
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+; AddReg sections
+
+[Modem1.AddReg] ; SmartLink 2834A
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 03,00,00,00
+HKR, Init, 3,, "AT E1 \V0 W1 &D2 S0=0 <cr>"
+HKR, Init, 4,, "AT S9=100 S10=200 <cr>"
+
+[Modem2.AddReg] ; SmartLink V32Te
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT E1 \V0 W1 &D2 S0=0 S95=124 <cr>"
+HKR, Init, 4,, "AT S9=100 S10=200 <cr>"
+
+[Strings]
+ClassName = "Modem"
+Mfg = "BSB Datentechnik"
+
+; Model strings
+
+Modem1="SmartLink 2834A"
+Modem2="SmartLink V32Te"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0-J0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>DELAY<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 300 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400 V.34<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>",1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800 V.34<cr><lf>",1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200 V.34<cr><lf>",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600 V.34<cr><lf>",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000 V.34<cr><lf>",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400 V.34<cr><lf>",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800 V.34<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP 3,4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmbsch.inx b/private/unimodem/inf/mdmbsch.inx
new file mode 100644
index 000000000..73142fef4
--- /dev/null
+++ b/private/unimodem/inf/mdmbsch.inx
@@ -0,0 +1,371 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Bausch Datacom Gmbh
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem3% = Modem3, UNIMODEM5EF9D629 ; euro Scout
+%Modem2% = Modem2,, UNIMODEM11E533F0 ; 1414AV Terbo
+%Modem1% = Modem1, UNIMODEM2B972E2F ; CN-9642 SAM
+
+
+; Installation sections
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; 1414AV Terbo
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; CN-9642 SAM
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem3.AddReg] ; euro Scout
+HKR,, Properties, 1, 80,01,00,00, 37,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, INIT,3,,"AT&F \V0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Compression_On,, "\C1"
+HKR, Settings, Compression_Off,, "\C0"
+
+[Modem2.AddReg] ; 1414AV Terbo
+HKR,, Properties, 1, 80,01,00,00, 63,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 00,96,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F W0 S95=122 -J1 <cr>"
+HKR, Settings, ErrorControl_On,, "\N2"
+HKR, Settings, ErrorControl_Forced,, "\N3"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Modem1.AddReg] ; CN-9642 SAM
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Bausch Datacom Gmbh"
+
+; Model strings
+
+Modem3="Bausch euro Scout"
+Modem2="Bausch 1414AV Terbo"
+Modem1="Bausch CN-9642 SAM"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CARRIER 1200/75 V.23<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CARRIER 75/1200 V.23<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 EC<cr><lf>" ,1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 EC/V42BIS<cr><lf>" ,1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16000 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 EC<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 EC/V42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP1<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>PROTOCOL:ALT<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION :CLASS5<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION V.42BIS<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION NONE<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcm28.inx b/private/unimodem/inf/mdmcm28.inx
new file mode 100644
index 000000000..94ef5058b
--- /dev/null
+++ b/private/unimodem/inf/mdmcm28.inx
@@ -0,0 +1,344 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Xircom
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider="Xircom"
+
+[ControlFlags]
+ExcludeFromSelect.NT=MF\XIRCOMCEM_DEV0 ; CEM2
+
+
+[Manufacturer]
+%Xircom% = Xircom
+
+[Xircom]
+%Xircom1%=Modem1, PCMCIA\XIRCOM-CREDITCARD_MODEM_28.8-B8B5 ; CM 28.8 Rev A
+%Xircom1%=Modem1, UNIMODEM4E60AA18
+%Xircom2%=Modem2, PCMCIA\XIRCOM-CREDITCARD_MODEM_28.8-A12A ; CM 28.8 Rev B
+%Xircom2%=Modem2, UNIMODEM40C05C11
+%Xircom2%=Modem2, UNIMODEM6A00246D
+%Xircom3%=Modem2, MF\XIRCOMCEM_DEV0 ; CEM2
+%Xircom4%=Modem4, MF\XIRCOMCEM3_DEV0 ; CEM 28.8
+%Xircom4%=Modem4, UNIMODEM96089F16
+
+
+[Modem1] ; Xircom CreditCard Modem (CM 28) no cell
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+[Modem2] ; Xircom CreditCard Modem (CM 28) with cell, but disable speed negotiation
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem4] ; Modem of Xircom Ethernet+Modem (CEM 28)
+AddReg=All, MfgAddReg, CEM28.Responses, Modem4.AddReg, PCMCIA
+
+
+[Modem1.AddReg] ; Xircom CreditCard Modem (CM 28) no cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Forced,, "S48=0 \N4"
+
+[Modem2.AddReg] ; Xircom CreditCard Modem (CM 28) with cell, but disable speed negotiation
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 07,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "&F5 &I14"
+HKR, Settings, ErrorControl_Cellular_Forced,, "S48=0 \N4 &F5 &I14"
+HKR, Settings, ErrorControl_Forced,, "S48=0 \N4"
+
+[Modem4.AddReg] ; Modem of Xircom Ethernet+Modem (CEM 28)
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F3,03,00,00, 00,C2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F &D2 &C1<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47 <cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+
+[Strings]
+Xircom = "Xircom"
+Xircom1="Xircom CreditCard Modem 28.8 CM28" ; no cell
+Xircom2="Xircom CreditCard Modem 28.8 CM28 RevB Cell" ; with cell
+Xircom3="Modem of Xircom Ethernet+Modem II"
+Xircom4="Modem of Xircom Ethernet+Modem (CEM 28.8)"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 <cr>"
+HKR, Init, 3,, "AT S95=47 -J1 &Q5<cr>"
+HKR, Monitor, 1,, "ATS0=0 <cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "S46=2"
+HKR, Settings, Compression_Off,, "S46=0"
+HKR, Settings, Modulation_CCITT,, "B0 B15"
+HKR, Settings, Modulation_Bell,, "B1 B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: MNP 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+[CEM28.Responses]
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcmcm.inx b/private/unimodem/inf/mdmcmcm.inx
new file mode 100644
index 000000000..8b2a795d6
--- /dev/null
+++ b/private/unimodem/inf/mdmcmcm.inx
@@ -0,0 +1,194 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ComCom Electronics GmbH
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, CMCM_Modem1 ; SPIRIT II
+%Modem2% = Modem1, CMCM_Modem2 ; SPIRIT III
+%Modem3% = Modem2, CMCM_Modem3 ; SPIRIT Rocket V.34
+%Modem4% = Modem2, CMCM_Modem4 ; SPIRIT Swift
+%Modem5% = Modem2, CMCM_Modem5 ; SPIRIT Rocket V.FAST
+
+
+; Installation sections
+
+[Modem1] ; SPIRIT II, SPIRIT III
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; SPIRIT Rocket V.34, SPIRIT Swift, SPIRIT Rocket V.FAST
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; SPIRIT II, SPIRIT III
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 07,00,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 S2=255<cr>"
+HKR, Settings, ErrorControl_On,, "*E5"
+HKR, Settings, ErrorControl_Off,, "*E0"
+HKR, Settings, ErrorControl_Forced,, "*E5"
+HKR, Settings, Compression_On,, "*E9"
+HKR, Settings, Compression_Off,, "*E0"
+HKR, Settings, Cellular_On,,
+HKR, Settings, Cellular_Off,,
+HKR, Settings, FlowControl_Off,, "*F0"
+HKR, Settings, FlowControl_Hard,, "*F3"
+HKR, Settings, FlowControl_Soft,, "*F2"
+HKR, Settings, InactivityTimeout,, ""
+HKR, Settings, SpeakerVolume_Low,, ""
+HKR, Settings, SpeakerVolume_Med,, ""
+HKR, Settings, SpeakerVolume_High,, ""
+
+[Modem2.AddReg] ; SPIRIT Rocket, Swift, SPIRIT Rocket V.FAST
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,e1,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ComCom Electronics GmbH"
+
+; Model strings
+
+Modem1="ComCom SPIRIT II"
+Modem2="ComCom SPIRIT III"
+Modem3="ComCom SPIRIT Rocket V.34"
+Modem4="ComCom SPIRIT Swift"
+Modem5="ComCom SPIRIT Rocket V.Fast"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 &D2 S0=0 S2=255<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular_ON,, ")M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,,")M1"
+HKR, Settings, ErrorControl_Cellular_Off,,"M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION:CLASS 5<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:V.42bis<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAPM<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-CELLULAR<cr><lf>", 1, 01, 0b, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmcodex.inx b/private/unimodem/inf/mdmcodex.inx
new file mode 100644
index 000000000..c3962ab02
--- /dev/null
+++ b/private/unimodem/inf/mdmcodex.inx
@@ -0,0 +1,200 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Motorola
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem12% = Modem3 ; Codex 3265
+%Modem11% = Modem3 ; Codex 3267
+%Modem10% = Modem3 ; Codex 3268
+%Modem9% = Modem2 ; Codex 3265FAST
+%Modem8% = Modem2 ; Codex 3267FAST
+%Modem7% = Modem2 ; Codex 3268FAST
+%Modem6% = Modem1 ; Codex 3265FAST (V.34)
+%Modem5% = Modem1 ; Codex 3267FAST (V.34)
+%Modem4% = Modem1 ; Codex 3268FAST (V.34)
+%Modem3% = Modem3 ; Codex 3266
+%Modem2% = Modem2 ; Codex 3266FAST
+%Modem1% = Modem1 ; Codex 3266FAST (V.34)
+
+
+; Installation sections
+
+[Modem3] ; Codex 3266
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; Codex 3266FAST
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; Codex 3266FAST (V.34)
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem3.AddReg] ; Codex 3266
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[Modem2.AddReg] ; Codex 3266FAST
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, c0,5d,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[Modem1.AddReg] ; Codex 3266FAST (V.34)
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Motorola (Ger)"
+
+; Model string
+
+
+Modem12="Motorola Codex 3265"
+Modem11="Motorola Codex 3267"
+Modem10="Motorola Codex 3268"
+Modem9="Motorola Codex 3265FAST"
+Modem8="Motorola Codex 3267FAST"
+Modem7="Motorola Codex 3268FAST"
+Modem6="Motorola Codex 3265FAST (V.34)"
+Modem5="Motorola Codex 3267FAST (V.34)"
+Modem4="Motorola Codex 3268FAST (V.34)"
+Modem3="Motorola Codex 3266"
+Modem2="Motorola Codex 3266FAST"
+Modem1="Motorola Codex 3266FAST (V.34)"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F V0 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 58,02,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, a0,41,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 60,54,00,00
+HKR, Responses, "20<cr>", 1, 02, 00, 00,00,00,00, c0,5d,00,00
+HKR, Responses, "21<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "24<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "25<cr>", 1, 02, 03, 00,00,00,00, b0,04,00,00
+HKR, Responses, "26<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "27<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "29<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "30<cr>", 1, 02, 03, 00,00,00,00, 60,09,00,00
+HKR, Responses, "31<cr>", 1, 02, 03, 00,00,00,00, c0,12,00,00
+HKR, Responses, "32<cr>", 1, 02, 03, 00,00,00,00, 80,25,00,00
+HKR, Responses, "33<cr>", 1, 02, 03, 00,00,00,00, 58,02,00,00
+HKR, Responses, "34<cr>", 1, 02, 03, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "35<cr>", 1, 02, 03, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "36<cr>", 1, 02, 03, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "37<cr>", 1, 02, 03, 00,00,00,00, 40,38,00,00
+HKR, Responses, "38<cr>", 1, 02, 03, 00,00,00,00, a0,41,00,00
+HKR, Responses, "39<cr>", 1, 02, 03, 00,00,00,00, 60,54,00,00
+HKR, Responses, "40<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "41<cr>", 1, 02, 03, 00,00,00,00, c0,5d,00,00
+HKR, Responses, "42<cr>", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "60<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "61<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "62<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 00,00,00,00, 20,67,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 00,00,00,00, 80,70,00,00
+HKR, Responses, "65<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "76<cr>", 1, 02, 03, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "77<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "78<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "79<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 02, 03, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "82<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "83<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "84<cr>", 1, 02, 03, 00,00,00,00, 20,67,00,00
+HKR, Responses, "85<cr>", 1, 02, 03, 00,00,00,00, 80,70,00,00
+HKR, Responses, "86<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcom1.inx b/private/unimodem/inf/mdmcom1.inx
new file mode 100644
index 000000000..42e9313c2
--- /dev/null
+++ b/private/unimodem/inf/mdmcom1.inx
@@ -0,0 +1,507 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: COM1 SA
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem5% = Modem5, UNIMODEM8D7D4BE8
+%Modem4% = Modem4, Com1_Modem4, UNIMODEMC605070E
+%Modem4% = Modem4, Com1_Modem4, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F
+%Modem3% = Modem3, Com1_Modem3
+%Modem2% = Modem2, UNIMODEM6F951786
+%Modem2% = Modem2, PCMCIA\COM1_SA-MC214_CARD-891F
+%Modem1% = Modem1, UNIMODEM49322F72
+%Modem1% = Modem1, PCMCIA\COM1_SA-MC217_CARD-257E
+
+
+; Installation sections
+
+[Modem5]
+AddReg=All, MfgAddRegB, VerbResp, Modem5.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddRegB, VerbResp, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddRegA, VerbResp, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddRegA, VerbResp, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddRegA, VerbResp, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "COM1 SA"
+
+; Model strings
+
+Modem5="COM1-SA MV216"
+Modem4="COM1-SA MC216"
+Modem3="COM1-SA MV129"
+Modem2="COM1-SA MC214 Data-Fax"
+Modem1="COM1-SA MC217 V32bis Voice PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddRegA]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 S95=45 S0=0 <cr>"
+HKR, Init, 4,, "AT &C1 &D2 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+
+HKR, Responses, "24<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+[MfgAddRegB]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 X5 S0=0 <cr>"
+HKR, Init, 4,, "AT &C1 &D2 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X5"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+
+HKR, Responses, "20<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "21<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "26<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "27<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+
+[VerbResp]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcomm1.inx b/private/unimodem/inf/mdmcomm1.inx
new file mode 100644
index 000000000..2751c528c
--- /dev/null
+++ b/private/unimodem/inf/mdmcomm1.inx
@@ -0,0 +1,411 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Communicate Limited
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem6% = Modem6, UNIMODEMD44A532B
+%Modem5% = Modem5, UNIMODEM48C741ED
+%Modem4% = Modem4, PCMCIA\COMMUNICATE-LIBERTY_GSM_PRIMA-9137
+%Modem4% = Modem4, UNIMODEM52CAC2EE
+%Modem3% = Modem3, PCMCIA\COMMUNICATE-LIBERTY_GSM-0EFC
+%Modem3% = Modem3, UNIMODEM05640996
+%Modem2% = Modem2, PCMCIA\COMMUNICATE-ATLAS_GSM_PRIMA-CE23
+%Modem2% = Modem2, UNIMODEMF7099934
+%Modem1% = Modem1, PCMCIA\COMMUNICATE-CONNEXION__GSM_PLUS-F47A
+%Modem1% = Modem1, UNIMODEM3B332802
+%Modem1% = Modem1, UNIMODEM64CD4B0B
+%Modem1% = Modem1, PCMCIA\COMMUNICATE-CONNEXION_GSM_Plus-196E
+%Modem1% = Modem1, UNIMODEMCEAFEF2C
+%Modem1% = Modem1, PCMCIA\COMMUNICATE-ATLAS_GSM_PLUS-83AA
+%Modem1% = Modem1, UNIMODEM02759427
+
+
+; Installation sections
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Communicate"
+
+; Model strings
+
+Modem6="Communicate Atlas Ranger"
+Modem5="Communicate Liberty Phoenix"
+Modem4="Communicate Liberty GSM Prima"
+Modem3="Communicate Liberty GSM"
+Modem2="Communicate Atlas GSM Prima"
+Modem1="Communicate Atlas GSM Plus"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F0 &D2 &C1 E0 -K0 %E2<cr>"
+ HKR, Init, 3,, "AT V1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: RLP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcommu.inx b/private/unimodem/inf/mdmcommu.inx
new file mode 100644
index 000000000..c59134865
--- /dev/null
+++ b/private/unimodem/inf/mdmcommu.inx
@@ -0,0 +1,420 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Communicate Limited
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+[Models]
+%Modem6% = Modem6, PCMCIA\COMMUNICATE-CONNEXION__GSM_-3B85
+%Modem6% = Modem6, UNIMODEMC3EBDFFA
+%Modem6% = Modem6, PCMCIA\COMMUNICATE-CONNEXION_GSM-4CCB
+%Modem6% = Modem6, UNIMODEM4ACD13AF
+%Modem6% = Modem6, PCMCIA\COMMUNICATE-ATLAS_GSM-B02A
+%Modem6% = Modem6, UNIMODEMC6A67A55
+%Modem5% = Modem5, PCMCIA\COMMUNICATE-CONNEXION_2880-FC46
+%Modem5% = Modem5, PCMCIA\COMMUNICATE-CONNEXION_2880-8162
+%Modem5% = Modem5, UNIMODEM68AFB6FA
+%Modem4% = Modem4, PCMCIA\COMMUNICATE-CONNEXION_2880C-272E
+%Modem4% = Modem4, UNIMODEMC33E6211
+%Modem3% = Modem3, PCMCIA\COMMUNICATE-CONNEXION_2496-DE53
+%Modem3% = Modem3, UNIMODEMF1349B13
+%Modem2% = Modem2, PCMCIA\COMMUNICATE-CONNEXION_1440-5672
+%Modem2% = Modem2, PCMCIA\COMMUNICATE-CONNEXION_1440-0927
+%Modem1% = Modem1, PCMCIA\COMMUNICATE-CONNEXION_1440C-CD02
+%Modem1% = Modem1, UNIMODEM168D3DBB
+%Modem1% = Modem1, PCMCIA\COMMUNICATE-CONNEXION_1440C-F10A
+
+
+; Installation sections
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "+MS=10,1,4800,14400 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "+MS=10,1,4800,14400 S10=10"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "F6 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "F6 S10=10"
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Communicate"
+
+; Model strings
+
+Modem6="Communicate Atlas GSM"
+Modem5="Communicate Connexion 2880"
+Modem4="Communicate Connexion 2880C"
+Modem3="Communicate Connexion 2496"
+Modem2="Communicate Connexion 1440"
+Modem1="Communicate Connexion 1440C"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F0 &D2 &C1 E0 -K0 %E2<cr>"
+ HKR, Init, 3,, "AT V1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: RLP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcpi.inx b/private/unimodem/inf/mdmcpi.inx
new file mode 100644
index 000000000..39dae325b
--- /dev/null
+++ b/private/unimodem/inf/mdmcpi.inx
@@ -0,0 +1,616 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Computer Peripherals Inc
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%CPI%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEME150170D ; Viva+Zoltrix combo
+ExcludeFromSelect=UNIMODEM798B889B ; Zoltrix+Best Data combo
+ExcludeFromSelect=UNIMODEM535147EF ; Zoltrix+Best Data combo
+ExcludeFromSelect=UNIMODEM636D232A ; GVC, Viva Pocket
+
+[Manufacturer]
+%Zoltrix% = Zoltrix
+%CPI% = CPI
+%Xircom% = Xircom
+%GVC% = GVC
+%Phoebe% = Phoebe
+
+;Modem models
+
+[Phoebe]
+%Phoebe1% = Modem23, CPI_Phoebe1, UNIMODEM16E3BF9F
+
+[Zoltrix]
+%Zoltrix1% = Modem3, CPI_Zoltrix1, UNIMODEME150170D ; Zoltrix 14.4
+%Zoltrix2% = Modem3, UNIMODEME150170D ; Zoltrix+Viva+CompUSA Nuvotel combo
+%Zoltrix3% = Modem18, CPI_Zoltrix3, UNIMODEM798B889B ; Zoltrix ZX-144 (ZX144ATI) external
+%Zoltrix4% = Modem18, UNIMODEM798B889B ; Zoltrix and Best Data combo
+%Zoltrix5% = Modem19, CPI_Zoltrix5, UNIMODEMA3EEEF33 ; Zoltrix ZX-288 (ZX288aci) external
+%Zoltrix6% = Modem20, CPI_Zoltrix6, UNIMODEM535147EF ; Zoltrix FM144ATI, 14.4 internal
+%Zoltrix7% = Modem20, UNIMODEM535147EF ; Zoltrix and Best Data combo
+%Zoltrix8% = Modem21, CPI_Zoltrix8, UNIMODEM733C4E29 ; Zoltrix FM288SI internal
+
+[CPI]
+%Modem23% = Modem23, CPI_Modem23, UNIMODEM16E3BF9F
+%Modem17% = Modem17, CPI_Modem17, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874
+%Modem17% = Modem17, CPI_Modem17, UNIMODEM16E3BF9F
+%Modem16% = Modem16, CPI_Modem16, UNIMODEM8FC45DA6 ; Viva 14.4 internal
+%Modem15% = Modem15, CPI_Modem15, UNIMODEM1C445CDD ; Viva V.34 internal
+%Modem14% = Modem14, CPI_Modem14, UNIMODEMCC96FDC7 ; Viva V.34 external
+%Modem13% = Modem13, CPI_Modem13, UNIMODEMD209269F ; Viva 300-1200-2400
+%Modem12% = Modem12, CPI_Modem12, UNIMODEM8A085313 ; Viva Hookup 2400SE
+%Modem11% = Modem11, CPI_Modem11, UNIMODEM24FFB24B ; Viva 2400 Data/Fax External
+%Modem10% = Modem10, CPI_Modem10, UNIMODEMF17C76B0 ; Viva Hookup 2400 internal
+%Modem9% = Modem9, CPI_Modem9, UNIMODEMF17C76B0 ; Viva 24i internal
+%Modem8% = Modem8, CPI_Modem8, UNIMODEMBEFF8E53 ; Viva Message Center
+%Modem7% = Modem7, CPI_Modem7, UNIMODEM9F2BBC58 ; Viva 2400 Data Fax Internal (same as Intel 24-96i)
+%Modem6% = Modem6, UNIMODEMDEF38453 ; Viva modem 24 external
+%Modem5% = Modem5, CPI_Modem5, UNIMODEM636D232A ; Viva 2496p Pocket
+%Modem4% = Modem4, UNIMODEMFC3CA1B5 ; Viva 2442if Internal
+%Modem3% = Modem3, CPI_Modem3, UNIMODEME150170D ; Viva 14.4i Data FAX
+%Modem3% = Modem3, UNIMODEM59C444F9 ; Viva 14.4i Data FAX
+%Modem2% = Modem2, UNIMODEM27EDA87E ; Viva 14.4 FAX-P
+%Modem1% = Modem1, UNIMODEM297744D7 ; 14.4 Data Fax External (older)
+%Modem1% = Modem1, UNIMODEMA44754EB ; 14.4 Data Fax External (newer)
+%Modem1% = Modem1, CPI_Modem1, UNIMODEM2D08133E ; 14.4 Data Fax External (newer)
+
+[Xircom]
+%Xircom1% = Modem22, MF\XIRCOMCEM_DEV0
+
+[GVC]
+%Modem24% = Modem5, CPI_Modem24, UNIMODEM636D232A ; GVC Pocket
+%Modem25% = Modem5, UNIMODEM636D232A ; Viva, GVC Pocket
+
+
+; Installation sections
+
+[Modem23] ; Viva 14.4 Data FAX Voice internal
+AddReg=All, MfgAddReg, highspeed, Modem17.AddReg, INTERNAL
+
+[Modem22] ; Xircom Net+Modem PCMCIA
+AddReg=All, MfgAddReg, highspeed, Modem22.AddReg, PCMCIA
+
+[Modem21] ; Zoltrix FM288SI
+AddReg=All, MfgAddReg, highspeed, Modem19.AddReg, INTERNAL
+
+[Modem20] ; Zoltrix FM144ATI, 14.4
+AddReg=All, MfgAddReg, highspeed, Modem20.AddReg, INTERNAL
+
+[Modem19] ; Zoltrix ZX-288 (ZX288aci)
+AddReg=All, MfgAddReg, highspeed, Modem19.AddReg, EXTERNAL
+
+[Modem18] ; Zoltrix ZX-144 (ZX144ATI)
+AddReg=All, MfgAddReg, highspeed, Modem18.AddReg, EXTERNAL
+
+[Modem17] ; Viva 14.4 PCMCIA
+AddReg=All, MfgAddReg, highspeed, Modem17.AddReg, PCMCIA
+
+[Modem16] ; Viva 14.4 Internal
+AddReg=All, MfgAddReg, highspeed, Modem16.AddReg, INTERNAL
+
+[Modem15] ; Viva V.34 Internal
+AddReg=All, MfgAddReg, highspeed, Modem15.AddReg, INTERNAL
+
+[Modem14] ; Viva V.34 External
+AddReg=All, MfgAddReg, highspeed, Modem14.AddReg, EXTERNAL
+
+[Modem13] ; Viva 300-1200-2400 external
+AddReg=All, MfgAddReg, lowspeed, Modem13.AddReg, EXTERNAL
+
+[Modem12] ; Viva Hookup 2400SE
+AddReg=All, MfgAddReg, lowspeed, Modem12.AddReg, EXTERNAL
+
+[Modem11] ; Viva 2400 Data/Fax External
+AddReg=All, MfgAddReg, lowspeed, Modem11.AddReg, EXTERNAL
+
+[Modem10] ; Viva Hookup 2400 internal
+AddReg=All, MfgAddReg, lowspeed, Modem10.AddReg, INTERNAL
+
+[Modem9] ; Viva 24i internal
+AddReg=All, MfgAddReg, lowspeed, Modem9.AddReg, INTERNAL
+
+[Modem8] ; Viva Message Center Internal
+AddReg=All, MfgAddReg, lowspeed, Modem8.AddReg, INTERNAL
+
+[Modem7] ; Viva 2400 Data Fax Internal
+AddReg=All, MfgAddReg, lowspeed, Modem7.AddReg, INTERNAL
+
+[Modem6] ; Viva modem 24 external
+AddReg=All, MfgAddReg, lowspeed, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; Viva 2496p Pocket
+AddReg=All, MfgAddReg, lowspeed, Modem5.AddReg, EXTERNAL
+
+[Modem4] ; Viva 2442if Internal
+AddReg=All, MfgAddReg, lowspeed, Modem4.AddReg, INTERNAL
+
+[Modem3] ; Viva 14.4i Data FAX
+AddReg=All, MfgAddReg, highspeed, Modem3.AddReg, INTERNAL
+
+[Modem2] ; Viva 14.4 FAX-P
+AddReg=All, MfgAddReg, highspeed, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; 14.4 Data Fax External
+AddReg=All, MfgAddReg, highspeed, Modem1.AddReg, EXTERNAL
+
+; AddReg sections
+
+[Modem22.AddReg] ; Xircom CEM2 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR, Init, 2,, "AT E0 V1 &C1 &D2 S0=0 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3 -J1"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Modem20.AddReg] ; Zoltrix FM144ATI, 14.4 internal (RPI)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem19.AddReg] ; Zoltrix ZX-288 (ZX288aci) external
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem18.AddReg] ; Zoltrix ZX-144 (ZX144ATI) external (RPI)
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem17.AddReg] ; Viva 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT E0 V1 &C1 &D2 S0=0 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3 -J1"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem16.AddReg] ; Viva 14.4 internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT&FV1&D2&C1E0Q0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem15.AddReg] ; V.34 Data Fax Internal with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1 :E1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1 :E1"
+HKR,, InactivityScale, 1, 0a,00,00,00 ; ten sec
+
+[Modem14.AddReg] ; V.34 Data Fax External with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1 :E1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1 :E1"
+HKR,, InactivityScale, 1, 0a,00,00,00 ; ten sec
+
+[Modem13.AddReg] ; Viva 300-1200-2400 external
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem12.AddReg] ; Viva Hookup 2400SE
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, DialSuffix,, ""
+HKR, Init, 2,, "AT&FS0=0E0V1Q0&C1&D2<cr>"
+
+[Modem11.AddReg] ; Viva 2400 Data/Fax External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, DialSuffix,, ""
+HKR, Init, 2,, "AT&FS0=0E0V1Q0&C1&D2<cr>"
+
+[Modem10.AddReg] ; Viva Hookup 2400 internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem9.AddReg] ; Viva 24i internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem8.AddReg] ; Viva Message Center Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem7.AddReg] ; Viva 2400 Data Fax Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem6.AddReg] ; Viva modem 24 external
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem5.AddReg] ; Viva 2496p Pocket
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem4.AddReg] ; Viva 2442if Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem3.AddReg] ; Viva 14.4i Data FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem2.AddReg] ; Viva 14.4 FAX-P
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg] ; 14.4 Data Fax External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Strings]
+
+Phoebe = "Phoebe Micro"
+Phoebe1="Phoebe Micro 14.4 Data Fax 1414VQH"
+
+Zoltrix ="Zoltrix"
+Zoltrix1="Zoltrix 14.4 Data FAX Modem"
+Zoltrix2="14.4 Data FAX Modem"
+Zoltrix3="Zoltrix 14.4, ZX144 ATI"
+Zoltrix4="14.4 Data FAX Modem"
+Zoltrix5="Zoltrix 28.8, ZX288 ACI"
+Zoltrix6="Zoltrix 14.4, 144 ATI"
+Zoltrix7="14.4 Data FAX Modem"
+Zoltrix8="Zoltrix 28.8, 288 SI"
+
+CPI ="Computer Peripherals Inc"
+Modem23="CPI Viva 14.4 Data FAX Voice Internal"
+Modem17="CPI Viva 14.4 Data FAX PCMCIA"
+Modem16="CPI Viva 14.4 Data FAX Internal"
+Modem15="CPI Viva 28.8, V.34 Internal"
+Modem14="CPI Viva 28.8, V.34 External"
+Modem13="CPI Viva 300-1200-2400"
+Modem12="CPI Viva Hookup 2400SE"
+Modem11="CPI Viva 2400 Data-Fax External"
+Modem10="CPI Viva Hookup 2400"
+Modem9="CPI Viva 24i"
+Modem8="CPI Viva Message Center"
+Modem7="CPI Viva 2400 Data-Fax Internal"
+Modem6="CPI Viva Modem 24"
+Modem5="CPI Viva 2496p Pocket"
+Modem4="CPI Viva 2442if"
+Modem3="CPI Viva 14.4i Data FAX"
+Modem2="CPI Viva 14.4 FAX-P Pocket"
+Modem1="CPI Viva 14.4 Data Fax"
+
+Xircom = "Xircom"
+Xircom1 = "Xircom Ethernet+Modem (CEM2)"
+
+GVC ="GVC"
+Modem24="GVC Pocket Modem (2400-9600 Data Fax)"
+Modem25="2400-9600 Data Fax Pocket Modem"
+
+[highspeed]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&FV1&D2&C1E0Q0W1S95=47<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[lowspeed]
+HKR, Init, 2,, "AT&FE0V1Q0&C1&D2<cr>"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcpq.inx b/private/unimodem/inf/mdmcpq.inx
new file mode 100644
index 000000000..8b43d4850
--- /dev/null
+++ b/private/unimodem/inf/mdmcpq.inx
@@ -0,0 +1,729 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturers: Compaq Computer Corp, AST, DEC
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Compaq%
+
+[ControlFlags]
+ExcludeFromSelect=PCMCIA\INTEL-DATAFAX_9624-0E7D ; Modem10
+ExcludeFromSelect=PCMCIA\INTEL-DATAFAX_14.4-7462 ; Modem11
+ExcludeFromSelect=UNIMODEM882C325F ; Modem13+18
+ExcludeFromSelect=UNIMODEM914F8102 ; AST, Tandy
+ExcludeFromSelect=UNIMODEM6FC2012E ; AST, Banksia
+ExcludeFromSelect=UNIMODEM89D634E1 ; ISA, PCMCIA Compaq
+
+[Manufacturer]
+%AST% = AST
+%Compaq% = Compaq
+%DEC% = DEC
+%Banksia% = Banksia
+
+[Strings]
+Compaq="Compaq"
+Modem1="Compaq SpeedPaq 144-I"
+Modem2="Compaq SpeedPaq 144-P"
+Modem3="Compaq SpeedPaq 144 (Enhanced Com Slot)"
+Modem3GEN="Compaq SpeedPaq 144 Data Fax Modem" ; PCMCIA or ISA
+Modem4="Compaq 144 Data+Fax (Enhanced Com Slot)"
+Modem5="Compaq PCMCIA 2400-9600"
+Modem6="Compaq PCMCIA 144"
+Modem7="Compaq International 2400 Data"
+Modem8="Compaq Presario 144 Data+Fax+Voice"
+Modem9="Compaq Presario 24-96 Data+Fax+Voice"
+Modem10="2400-9600 Data Fax Modem (PCMCIA)"
+Modem12="Compaq Presario International 24-96 Data+Fax+Voice"
+Modem13="Compaq SpeedPaq 192 Modem (PCMCIA)"
+Modem14="Compaq 288 Fax Modem (PCMCIA)"
+Modem15="Compaq Enhanced 9600 Data+Fax (Enhanced Com Slot)"
+Modem16="Compaq Enhanced 9600 Data (Enhanced Com Slot)"
+Modem17="Compaq 2400 Data+Fax (Enhanced Com Slot)"
+Modem18="Compaq SpeedPaq 192S Modem (PCMCIA)"
+Modem19="Compaq SpeedPaq 19.2 Kbps PCMCIA Modem"
+Modem28="Compaq Presario 144 Data+Fax"
+
+AST="AST"
+Modem15A="AST 14.4D-14.4F Data Fax PCMCIA modem"
+Modem16A="14.4 PCMCIA Data Fax modem" ;Generic for Compaq, Intel, AST
+Modem20 ="AST Advantage 14.4 Data Fax Voice"
+Modem21 ="AST Advantage 14.4 Data Fax Voice Speakerphone"
+Modem22 ="AST 2400-9600 Data Fax Voice Modem"
+Modem22a="2400-9600 Data Fax Voice Modem"
+Modem23 ="AST 14.4 Data Fax Modem (RPI version)"
+Modem24 ="AST 14.4 Data Fax, Creatix International version"
+Modem25 ="AST 14.4 Data Fax, Pace International version"
+Modem26 ="AST 14.4 Data Fax, Banksia International version"
+Modem31 ="AST EXCA 24-96 Data Fax PCMCIA"
+Modem32 ="AST PNB 24D-96F Data Fax PCMCIA"
+
+DEC = "DEC"
+Modem27 = "DEC 14.4 International Data Fax PCMCIA"
+Modem33 = "DEC 14.4 Starion Data Fax Modem"
+
+Banksia = "Banksia"
+Modem29 ="Banksia 14.4 Data Fax"
+Modem30 ="Banksia 14.4 Data Fax"
+
+; Modem models
+
+[Compaq]
+%Modem1% = Modem1, CPQ_Modem1, UNIMODEM5DDFE5D9
+%Modem2% = Modem2, PCMCIA\COMPAQ-SpeedPaq_144/P-A4F8
+%Modem2% = Modem2, PCMCIA\COMPAQ-SPEEDPAQ_144/P-CC87
+%Modem2% = Modem2, CPQ_Modem2, UNIMODEM89D634E1
+%Modem2% = Modem2, PCMCIA\COMPAQ-SPEEDPAQ_144/P-CA72
+%Modem3% = Modem3, CPQ_Modem3, UNIMODEM89D634E1
+%Modem3GEN% = Modem3, UNIMODEM89D634E1
+%Modem4% = Modem4, CPQ_Modem4, UNIMODEM5DDFE5D9
+%Modem5% = Modem5, "PCMCIA\COMPAQ-2400/9600_DATA_+_FAX-F9A7"
+%Modem5% = Modem5, UNIMODEMB12051D2
+%Modem6% = Modem6, PCMCIA\COMPAQ-PCMCIA_14.4_DATA_+_FAX-48AC
+%Modem6% = Modem6, UNIMODEM9F1F0080
+%Modem6% = Modem6, CPQ_Modem6, PCMCIA\INTEL-DATAFAX_14.4-7462
+%Modem7% = Modem7, UNIMODEM248C0007
+%Modem8% = Modem8, BIOS\*CPQA0D1
+%Modem8% = Modem8, UNIMODEMFA2D3720
+%Modem9% = Modem9, BIOS\*PNPC003
+%Modem9% = Modem9, UNIMODEMF6710C87
+%Modem9% = Modem9, UNIMODEMBF40C87E
+%Modem9% = Modem9, CPQ_Modem9, UNIMODEM9F2BBC58
+%Modem10% = Modem5, PCMCIA\INTEL-DATAFAX_9624-0E7D
+%Modem10% = Modem5, UNIMODEM996D0455
+%Modem12% = Modem12, BIOS\*CPQA0D3
+%Modem13% = Modem13, PCMCIA\COMPAQ-SPEEDPAQ_192/P-0C92
+%Modem13% = Modem13, PCMCIA\COMPAQ-SPEEDPAQ_192-BC4E
+%Modem13% = Modem13, CPQ_Modem13, UNIMODEM882C325F
+%Modem14% = Modem14, PCMCIA\COMPAQ-PCMCIA_28800_FAX/DATA_MODEM-C0B2
+%Modem15% = Modem15, UNIMODEMF68194B0
+%Modem16% = Modem16, UNIMODEM1583E561
+%Modem17% = Modem17, CPQ_Modem17, UNIMODEM901DD6E5
+%Modem18% = Modem18, PCMCIA\COMPAQ-SPEEDPAQ_192S-1549
+%Modem18% = Modem18, CPQ_Modem18, UNIMODEM882C325F
+%Modem19% = Modem18, UNIMODEM882C325F
+%Modem28% = Modem28, UNIMODEM5ABE3131
+
+[AST]
+%Modem15A% = Modem15A, CPQ_Modem15A, PCMCIA\INTEL-DATAFAX_14.4-7462
+%Modem16A% = Modem16A, PCMCIA\INTEL-DATAFAX_14.4-7462
+%Modem20% = Modem20, UNIMODEM63C2DD97 ; AST 14.4 Data FAX, Starbright
+%Modem21% = Modem20, CPQ_Modem21, UNIMODEM6A25C644 ; AST 14.4, speakerphone, Starbright SP
+%Modem21% = Modem20, UNIMODEMBB7C5BB7 ; AST 14.4, speakerphone, Starbright SP
+%Modem22% = Modem22, CPQ_Modem22, UNIMODEM914F8102 ; AST 2400-9600 Data FAX Voice, Starlight
+%Modem22a% = Modem22, UNIMODEM914F8102 ; AST 2400-9600 Data FAX Voice, Starlight
+%Modem23% = Modem23, CPQ_Modem23, UNIMODEM535147EF ; AST 14.4 Data FAX, RPI style
+%Modem24% = Modem24, UNIMODEM07DBB56C ; AST 14.4 Data FAX, Creatix International version
+%Modem24% = Modem24, UNIMODEM8A014553 ; AST 14.4 Data FAX, Creatix International version
+%Modem25% = Modem24, UNIMODEM084D31EE ; AST 14.4 Data FAX (Pace international version)
+%Modem26% = Modem24, CPQ_Modem26, UNIMODEM6FC2012E ; AST 14.4 Data FAX (Banksia international version)
+%Modem31% = Modem31, PCMCIA\INTEL-FAX_9600-BA53 ; EXCA PCMCIA
+%Modem31% = Modem31, UNIMODEM648BEAE1 ; EXCA PCMCIA
+%Modem32% = Modem32, PCMCIA\P.N.B-24/96_DATA/FAX_MODEM-0E11
+%Modem32% = Modem32, UNIMODEM0671A79B
+
+[DEC]
+%Modem27% = Modem27, PCMCIA\DIGITAL-PCMCIA_14_400_V.32BIS_FAX-47D7
+%Modem27% = Modem27, UNIMODEMB4F46AE7
+%Modem33% = Modem33, UNIMODEMDFCA9A98
+
+[Banksia]
+%Modem29% = Modem24, CPQ_Modem29, UNIMODEM6FC2012E ; Banksia international version
+%Modem30% = Modem24, UNIMODEM6FC2012E ; Banksia international version
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem1.AddReg
+
+[Modem2]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, CELLULAR, Modem2.AddReg
+
+[Modem3]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, CELLULAR, Modem3.AddReg
+
+[Modem4]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem4.AddReg
+
+[Modem5]
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem5.AddReg
+
+[Modem6]
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem6.AddReg
+
+[Modem7]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem7.AddReg
+
+[Modem8]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem8.AddReg
+
+[Modem9]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem9.AddReg
+
+[Modem12]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem12.AddReg
+
+[Modem13]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, CELLULAR, Modem13.AddReg
+
+[Modem14]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, Modem14.AddReg
+
+[Modem15]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem15.AddReg
+
+[Modem15A] ; AST PCMCIA
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem15A.AddReg
+
+[Modem16]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem16.AddReg
+
+[Modem16A] ; Generic for Compaq, Intel, AST
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem16A.AddReg
+
+[Modem17]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem17.AddReg
+
+[Modem18]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, CELLULAR, Modem18.AddReg
+
+[Modem20]
+AddReg=All, MfgCompaq, VerboseResultCodes, Modem20.AddReg, INTERNAL
+
+[Modem22]
+AddReg=All, MfgCompaq, VerboseResultCodes, Modem22.AddReg, INTERNAL
+
+[Modem23]
+AddReg=All, MfgCompaq, VerboseResultCodes, Modem23.AddReg, INTERNAL
+
+[Modem24] ; AST 14.4 Data FAX international
+AddReg=All, MfgCompaq, VerboseResultCodes, Modem24.AddReg, INTERNAL
+
+[Modem27] ; DEC 14.4 International Data FAX PCMCIA
+AddReg=All, MfgCompaq, VerboseResultCodes, Modem24.AddReg, PCMCIA
+
+[Modem28]
+AddReg=All, MfgCompaq, INTERNAL, VerboseResultCodes, Modem28.AddReg
+
+[Modem31]
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem31.AddReg
+
+[Modem32]
+AddReg=All, MfgCompaq, PCMCIA, MfgIntel, VerboseResultCodes, Modem32.AddReg
+
+[Modem33]
+AddReg=All, MfgCompaq, INTERNAL, MfgIntel, VerboseResultCodes, Modem33.AddReg
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02 ; Include ISA and Enhanced Comm Slot
+
+[PCMCIA]
+HKR,, PortDriver,, Serial.vxd
+HKR,, Contention,, *vcd
+HKR,, DeviceType, 1, 03
+
+[CELLULAR]
+HKR, Settings, ErrorControl_Cellular,, "\N3 $M1 -K2 )M1" ;Motorola default
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4 $M1 W1"
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M2 -K2 )M1" ; Nokia
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M2 -K2 )M1" ; Technophone
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M3 -K2 )M1" ; TBA
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M4 -K2 )M1" ; TBA
+
+[Modem1.AddReg] ; "SpeedPaq 144-I Data+Fax Modem (ISA)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35" ;S101 only applies to speedpaq's
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Modem2.AddReg] ; "SpeedPaq 144-P Data+Fax Modem (PCMCIA)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35" ;S101 only applies to speedpaq's
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Modem3.AddReg] ; "SpeedPaq 144 (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35" ;S101 only applies to speedpaq's
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Modem4.AddReg] ; "Enhanced 144 Data+Fax (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg] ; "Compaq PCMCIA 2400-9600"
+HKR, Init, 2,, "AT&FE0V1X4S95=47&C1&D2&S0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, SpeedNegotiation_Off,, "%%N6"
+HKR, Settings, SpeedNegotiation_On,, "%%N0"
+
+[Modem6.AddReg] ; "Compaq PCMCIA 144"
+HKR, Init, 2,, "AT&FE0V1X4S95=47&C1&D2&S0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem7.AddReg] ; "International 2400 Data"
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2<cr>"
+HKR,, Properties, 1, 40,01,00,00, 1e,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem8.AddReg] ; "Presario 144 Data+Fax+Voice"
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 W1<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 76,03,00,00, 00,e1,00,00, 40,38,00,00
+;HKR, Settings, Compression_On,, "%%C3" ; RPI Modem so don't enable
+;HKR, Settings, Compression_Off,, "%%C0" ; RPI Modem so don't enable
+
+[Modem9.AddReg] ; "Presario 24-96 Data+Fax+Voice"
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem12.AddReg] ; "Presario International 24-96 Data+Fax+Voice"
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem13.AddReg] ; SpeedPaq 192 PCMCIA Modem
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35" ;S101 only applies to speedpaq's
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Modem14.AddReg] ; Compaq 288 PCMCIA Modem
+HKR, Init, 2,, "AT &F E0 V1 W2 \V1 X4 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem15.AddReg] ; "Enhanced 9600 Data+Fax (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem16.AddReg] ; "Enhanced 9600 Data (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem17.AddReg] ; "Enhanced 2400 Data+Fax (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem15A.AddReg] ; "AST PCMCIA 144"
+HKR, Init, 2,, "AT&FE0V1X4S95=47&C1&D2&S0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem16A.AddReg] ; "AST, Compaq, Intel PCMCIA 144 - generic: dont use any flow control or init fails for this family
+HKR, Init, 2,, "AT&FE0V1X4S95=47&C1&D2&S0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c6,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem18.AddReg] ; SpeedPaq 192S PCMCIA Modem (and combo 19.2 modem)
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35"
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Modem20.AddReg] ; AST 14.4 Modem+Speakerphone
+HKR, Init, 2,, "AT&FE0V1W2&C1&D2\V1<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem22.AddReg] ; "Enhanced 2400 Data+Fax (Enhanced Com Slot)"
+HKR, Init, 2,, "AT &F E0 V1 W2 \V1 &C1 &D2 S0=0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem23.AddReg] ; internal 14400, RPI style
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem24.AddReg] ; AST 14.4 Data FAX international modems
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem28.AddReg] ; Compaq Presario 144 Data+Fax
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,4b,00,00, 40,38,00,00
+
+[Modem31.AddReg] ; EXCA PCMCIA
+HKR, Init, 2,, "AT&FE0V1S95=47&C1&D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem32.AddReg] ; AST PNB 24-96 PCMCIA
+HKR, Init, 2,, "AT&FE0V1S95=47&C1&D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem33.AddReg] ; DEC 14.4 Starion (Prometheus) internal modem
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 W2 \V2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[MfgCompaq]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[MfgIntel]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[VerboseResultCodes]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcpqpr.inx b/private/unimodem/inf/mdmcpqpr.inx
new file mode 100644
index 000000000..3412e73a5
--- /dev/null
+++ b/private/unimodem/inf/mdmcpqpr.inx
@@ -0,0 +1,11 @@
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Class=Modem
+Provider=%Compaq%
+
+[Manufacturer]
+
+[Strings]
+Compaq="Compaq"
diff --git a/private/unimodem/inf/mdmcpv.inx b/private/unimodem/inf/mdmcpv.inx
new file mode 100644
index 000000000..e4a37fe34
--- /dev/null
+++ b/private/unimodem/inf/mdmcpv.inx
@@ -0,0 +1,428 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: CPV - Stollmann Datensysteme
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1 ; CPV Stollman TA-D-DD
+%Modem2% = Modem1 ; CPV PICO TA Mini
+%Modem3% = Modem3, PCMCIA\COM1_SA-MC218_CARD-BD1C ; CPV Sirius V.34 PCMCIA
+%Modem4% = Modem4, UNIMODEM22CF0AB8 ; CPV Pico T 14.4 Fax extern
+%Modem5% = Modem5, CPV_Modem5, PCMCIA\E-TECH-C1414AX-0839 ; CPV Sirius II PCMCIA
+%Modem6% = Modem6, CPV_Modem6, PCMCIA\AT&T_Paradyne-KeepInTouch_Card-40E9 ; CPV Sirius I PCMCIA
+
+; Installation sections
+
+[Modem1] ;CPV Stollman TA-D-DD, CPV PICO TA Mini
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem3] ; CPV Sirius V.34 PCMCIA
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem4] ; CPV Pico T 14.4 Fax extern
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem5] ; CPV Sirius II
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem6] ; CPV Sirius I
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem1.AddReg] ; CPV Stollman TA-D-DD, CPV PICO TA Mini
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 30,00,00,00, 00,96,00,00, 00,96,00,00
+HKR,, FClass, 1, 01,00,00,00
+HKR, INIT,2,,"ATZ<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, ""
+HKR, Settings, Tone,, ""
+HKR, Settings, Blind_Off,, ""
+HKR, Settings, Blind_On,, ""
+HKR, Settings, CallSetupFailTimer,, ""
+HKR, Settings, InactivityTimeout,, ""
+
+[Modem3.AddReg] ; CPV Sirius V.34 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, INIT,3,,"AT W1<cr>"
+HKR,, InactivityScale, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem4.AddReg] ; CPV Pico T 14.4 Fax extern
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR,, InactivityScale, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem5.AddReg] ; CPV Sirius II
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 3,, "AT $E3 $F5<cr>"
+HKR, Settings, FlowControl_Hard,, "$F5"
+HKR, Settings, FlowControl_Soft,, "$F"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_Off,, "$C0"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, InactivityTimeout,, ""
+
+[Modem6.AddReg] ; CPV Sirius I
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "CPV - Stollmann Datensysteme"
+
+; Model strings
+
+Modem1="CPV Stollmann TA-D-DD"
+Modem2="CPV PICO TA"
+Modem3="CPV Sirius V.34, COM1 28.8 PCMCIA"
+Modem4="CPV Pico T 14.4 Fax extern"
+Modem5="CPV Sirius II PCMCIA"
+Modem6="CPV Sirius I PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr> <cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03,00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 240/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: ADC<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmcrtix.inx b/private/unimodem/inf/mdmcrtix.inx
new file mode 100644
index 000000000..4b41e2619
--- /dev/null
+++ b/private/unimodem/inf/mdmcrtix.inx
@@ -0,0 +1,344 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Creatix Polymedia GmbH 06.07.95 MR
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEMFE48ECE2 ; SR 2496
+%Modem2% = Modem2,UNIMODEM43A2D11E ; SG 144
+%Modem3% = Modem3,UNIMODEMC3F107AC ; LC 144 VF
+%Modem4% = Modem4,UNIMODEM3EBBA661 ; LC 144 VFI
+%Modem5% = Modem5,UNIMODEM499375AB ; PC 144 SF
+%Modem6% = Modem6,UNIMODEMC3D4C1CB ; LC 288 FC
+%Modem7% = Modem7, UNIMODEMBD6E645E ; SG 144 I
+%Modem8% = Modem8,UNIMODEMC1C36829 ; LC 144
+%Modem9% = Modem9,UNIMODEM68853ECE ; LC 144 I
+%Modem10% = Modem10,UNIMODEM9DDD8F5B ; SG 2834
+%Modem11% = Modem11,UNIMODEMA6F9D2EF ; LC 144 VFI
+%Modem12% = Modem12,UNIMODEM3F959411 ; SG 2834
+%Modem13% = Modem13,UNIMODEM5DAE342A ; SG 144
+%Modem14% = Modem14,UNIMODEMC001EF90 ; LC 144
+%Modem15% = Modem15,UNIMODEM00EB8349 ; LC 144 VF
+%Modem16% = Modem16,UNIMODEM03B0989F ; LC 144 I
+%Modem17% = Modem17,Creatix_Modem17 ; BTX COM
+
+; Installation sections
+
+[Modem1] ; SR 2496
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; SG 144
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; LC 144 VF
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4] ; LC 144 VFI
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem5] ; PC 144 SF
+AddReg=All, MfgAddReg, Modem5.AddReg, Internal
+
+[Modem6] ; LC 288 FC
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem7] ; SG 144 I
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem8] ; LC 144
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem9] ; LC 144 I
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem10] ; SG 2834
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem11] ; LC 144 VFI
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem12] ; SG 2834
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem13] ; SG 144
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem14] ; LC 144
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem15] ; LC 144 VF
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem16] ; LC 144 I
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem17] ; BTX COM
+AddReg=All, MfgAddReg, Modem17.AddReg, External
+
+; AddReg sections
+
+[Modem1.AddReg] ; SR 2496
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 80,25,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 3,, "AT W1 \V0 &D2<cr>"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem2.AddReg] ; SG 144
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem3.AddReg] ; LC 144 VF
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 4b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem5.AddReg] ; PC 144 SF
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 3,, "AT W1 \V0 &D2<cr>"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem6.AddReg] ; LC 288 FC
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem8.AddReg] ; LC 144
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 30,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 03,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem10.AddReg] ; SG 2834
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem12.AddReg] ; SG 2834
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem13.AddReg] ; SG 144
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem14.AddReg] ; LC 144
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 30,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 03,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem15.AddReg] ; LC 144 VF
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 4b,00,00,00
+HKR, Init, 3,, "AT W0 S95=249 S25=0 S38=0<cr>"
+
+[Modem17.AddReg] ; BTX-COM
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,00,00,00, 10,01,00,00, b0,04,00,00, b0,04,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR,, InactivityFormat,, "seconds"
+HKR, Init, 2,, "ATE1V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,,
+HKR, Answer, 1,, ""
+HKR,, Reset,, "ATE1<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,,"<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+HKR, Settings, SpeakerMode_Off,,
+HKR, Settings, SpeakerMode_Dial,,
+HKR, Settings, SpeakerMode_On,,
+HKR, Settings, SpeakerMode_Setup,,
+HKR, Settings, FlowControl_Off,,
+HKR, Settings, FlowControl_Hard,,
+HKR, Settings, FlowControl_Soft,,
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+HKR, Settings, CallSetupFailTimer,,
+HKR, Settings, InactivityTimeout,,
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Creatix Polymedia GmbH"
+
+; Model strings
+
+Modem1="Creatix SR 2496"
+Modem2="Creatix SG 144"
+Modem3="Creatix LC 144 VF"
+Modem4="Creatix LC 144 VFI"
+Modem5="Creatix PC 144 SF"
+Modem6="Creatix LC 288 FC"
+Modem7="Creatix SG 144 I"
+Modem8="Creatix LC 144"
+Modem9="Creatix LC 144 I"
+Modem10="Creatix SG 2834"
+Modem11="Creatix LC 144 VFI"
+Modem12="Creatix SG 2834"
+Modem13="Creatix SG 144"
+Modem14="Creatix LC 144"
+Modem15="Creatix LC 144 VF"
+Modem16="Creatix LC 144 I"
+Modem17="Digitec BTX-COM (nur BTX, Datex-J möglich)"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Delayed<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OFF HOOK<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>LOCKED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ABORTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmdefd.inx b/private/unimodem/inf/mdmdefd.inx
new file mode 100644
index 000000000..602e86ecc
--- /dev/null
+++ b/private/unimodem/inf/mdmdefd.inx
@@ -0,0 +1,233 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1995 Microsoft Corporation
+; Manufacturers: Hayes, Megahertz, InteCom, Psion, Ventel
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+%M18% = M18
+%Racal% = RACAL
+
+[M18]
+%M1803% = M1803, HAYES_M1803
+
+[RACAL]
+%RACAL1%= RACAL1, Racal_Sec_Device
+
+
+[M1803]
+AddReg=All, Common, M1803Reg, EXTERNAL
+
+[RACAL1]
+AddReg=All, Common, RacalReg, EXTERNAL
+
+
+[M1803Reg] ; Hayes 9600 Optima & Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 80,25,00,00
+HKR,, CDWaitPeriod, 1, c0, d4, 01, 00
+
+[RacalReg] ; Hayes 9600 Optima & Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR,, CDWaitPeriod, 1, c0, d4, 01, 00
+
+HKR, Responses, "12", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600
+HKR, Responses, "1", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600
+
+
+
+
+[Strings]
+MS = "Microsoft"
+
+M18 = "Digital Pathways"
+M1803 = "Defender 1000 with Hayes Optima 96"
+
+RACAL = "Racal"
+RACAL1 = "Racal GSM with Hayes Optima 96"
+
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+
+
+
+[Common]
+; Hayes standard init/monitor/answer mechanisms. Override if different for a specific modem/manufacture
+HKR, Init, 1,, "AT<cr>" ; do an "AT" to get autobaud correct (start other init strings with 2)
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>" ; slam in a reset before closing
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+; These are the Hayes responses.
+; Differences for non-Hayes modems should be addressed in the specific modem/manufacturer sections
+; | State
+; | Options (Compression, Error-Correction, Cellular)
+; | DCE Rate
+; | DTE Rate
+; Command Response and Call Progress Monitoring
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800
+HKR, Responses, "16<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; TIMEOUT
+HKR, Responses, "17<cr>", 1, 02, 00, C0,DA,00,00, 00,00,00,00 ; CONNECT 56000
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600
+HKR, Responses, "19<cr>", 1, 02, 00, 00,FA,00,00, 00,00,00,00 ; CONNECT 64000
+HKR, Responses, "20<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600/75
+HKR, Responses, "21<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 75/600
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800
+HKR, Responses, "27<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; CALL WAITING
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000
+HKR, Responses, "30<cr>", 1, 02, 00, 40,83,00,00, 00,00,00,00 ; CONNECT 33600
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200
+HKR, Responses, "32<cr>", 1, 02, 00, 80,BB,00,00, 00,00,00,00 ; CONNECT 48000
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX call detected
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - Data call detected
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600
+HKR, Responses, "39<cr>", 1, 01, 00, 80,BB,00,00, 00,00,00,00 ; CARRIER 48000
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300
+HKR, Responses, "41<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 600
+HKR, Responses, "42<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 600/75
+HKR, Responses, "43<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 75/600
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800
+HKR, Responses, "56<cr>", 1, 01, 00, 00,96,00,00, 00,00,00,00 ; CARRIER 38400
+HKR, Responses, "57<cr>", 1, 01, 00, C0,DA,00,00, 00,00,00,00 ; CARRIER 56000
+HKR, Responses, "58<cr>", 1, 01, 00, 00,E1,00,00, 00,00,00,00 ; CARRIER 57600
+HKR, Responses, "59<cr>", 1, 01, 00, 00,FA,00,00, 00,00,00,00 ; CARRIER 64000
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600
+HKR, Responses, "61<cr>", 1, 02, 00, 40,51,00,00, 00,00,00,00 ; CONNECT 20800
+HKR, Responses, "62<cr>", 1, 02, 00, 80,A2,00,00, 00,00,00,00 ; CONNECT 41600
+HKR, Responses, "63<cr>", 1, 02, 00, 00,C8,00,00, 00,00,00,00 ; CONNECT 51200
+HKR, Responses, "64<cr>", 1, 02, 00, C0,F3,00,00, 00,00,00,00 ; CONNECT 62400
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ISDN
+HKR, Responses, "82<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25
+HKR, Responses, "83<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: V.120
+HKR, Responses, "84<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: T-LINK
+HKR, Responses, "85<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: DTMF
+HKR, Responses, "86<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: FAX
+HKR, Responses, "87<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "88<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "89<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "90<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+HKR, Responses, "94<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 4
+HKR, Responses, "95<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 5
+HKR, Responses, "96<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "97<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "98<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "99<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "101<cr>",1, 02, 00, 00,2C,01,00, 00,00,00,00 ; CONNECT 76800
+HKR, Responses, "102<cr>",1, 02, 00, 80,E7,01,00, 00,00,00,00 ; CONNECT 124800
+HKR, Responses, "103<cr>",1, 02, 00, 00,58,02,00, 00,00,00,00 ; CONNECT 153600
+HKR, Responses, "104<cr>",1, 02, 00, E0,79,00,00, 00,00,00,00 ; CONNECT 31200
+HKR, Responses, "105<cr>",1, 01, 00, 00,C2,01,00, 00,00,00,00 ; CARRIER 115200
+HKR, Responses, "111<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; DELAYED
+HKR, Responses, "112<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; BLACKLISTED
+HKR, Responses, "119<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Express
+HKR, Responses, "120<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Bell103
+HKR, Responses, "121<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Bell212
+HKR, Responses, "122<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.21
+HKR, Responses, "123<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.22
+HKR, Responses, "124<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.22bis
+HKR, Responses, "125<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.23
+HKR, Responses, "126<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.32
+HKR, Responses, "127<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.32bis
+HKR, Responses, "128<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.FC
+HKR, Responses, "129<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.34
diff --git a/private/unimodem/inf/mdmdgitn.inx b/private/unimodem/inf/mdmdgitn.inx
new file mode 100644
index 000000000..f2ce3998b
--- /dev/null
+++ b/private/unimodem/inf/mdmdgitn.inx
@@ -0,0 +1,289 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Digicom S.p.A.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem7% = Modem7, UNIMODEM082F2679
+%Modem6% = Modem6, UNIMODEM21ED5FD7
+%Modem5% = Modem5, UNIMODEMFC38A0D9
+%Modem5% = Modem5, PCMCIA\DIGICOM_SPA-CCI_05-BEB1
+%Modem5% = Modem5, PCMCIA\DIGICOM_SPA-CCI05-9AB7
+%Modem4% = Modem4, PCMCIA\DIGICOM_SPA-CCM44F-F3B2
+%Modem3% = Modem3, PCMCIA\DIGICOM_SPA-CCM44P-3812
+%Modem3% = Modem3, PCMCIA\DIGICOM_SPA-CCM44P-CFF2
+%Modem3% = Modem3, UNIMODEM1DB0BEE9
+%Modem2% = Modem2, UNIMODEMBCC07FF9
+%Modem1% = Modem1, UNIMODEMB21C9656
+%Modem1% = Modem1, UNIMODEM5E27E0B8
+
+; Installation sections
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+
+; AddReg sections
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 00,00,00,00, 37,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 2,, "AT&F%%A2=1&Q0<cr>"
+HKR, Init, 3,, "AT&D2&C1E0Q0V0<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+HKR, Settings, SpeakerMode_Off,,
+HKR, Settings, SpeakerMode_Dial,,
+HKR, Settings, SpeakerMode_On,,
+HKR, Settings, SpeakerMode_Setup,,
+HKR, Settings, ErrorControl_On,, "%%A2=2"
+HKR, Settings, ErrorControl_Off,, "%%A2=1"
+HKR, Settings, Compression_On,, "%%A2=2&U1"
+HKR, Settings, Compression_Off,, "%%A2=1&U0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,,
+HKR, Settings, Tone,,
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+HKR, Settings, InactivityTimeout,,
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "28<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "32<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "20<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "40<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "83<cr>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "84<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "85<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "00<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "01<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "02<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "03<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "04<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "05<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "06<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "07<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "08<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0a,00,00,00
+HKR, Init, 2,, "AT&FF0E0Q0V0<cr>"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "16<cr>66<cr>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "16<cr>67<cr>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "16<cr>69<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "63<cr>66<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "63<cr>67<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "63<cr>69<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>66<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "64<cr>67<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "64<cr>69<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0a,00,00,00
+HKR, Init, 2,, "AT&FF0E0Q0V0<cr>"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0a,00,00,00
+HKR, Init, 2,, "AT&FF0E0Q0V0<cr>"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "16<cr>66<cr>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "16<cr>67<cr>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "16<cr>69<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "63<cr>66<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "63<cr>67<cr>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "63<cr>69<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>66<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "64<cr>67<cr>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "64<cr>69<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0a,00,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Digicom S.p.A."
+
+; Model strings
+
+Modem7="Digicom Leonardo"
+Modem6="Digicom Raffaello"
+Modem5="Digicom CCI 05"
+Modem4="Digicom CCM 44 F"
+Modem3="Digicom CCM 44 P"
+Modem2="Digicom SNM 46 F"
+Modem1="Digicom SNM 46 SR"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FF0E0Q0V0 <cr>"
+HKR, Init, 3,, "AT&D2&C1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "5<cr>66<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "5<cr>67<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "5<cr>69<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "10<cr>66<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "10<cr>67<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "10<cr>69<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>66<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "11<cr>67<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "11<cr>69<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>66<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "12<cr>67<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "12<cr>69<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>66<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "13<cr>67<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "13<cr>69<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>66<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "14<cr>67<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "14<cr>69<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>66<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "15<cr>67<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "15<cr>69<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmdicom.inx b/private/unimodem/inf/mdmdicom.inx
new file mode 100644
index 000000000..813960600
--- /dev/null
+++ b/private/unimodem/inf/mdmdicom.inx
@@ -0,0 +1,376 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: DiCom
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem3% = Modem3, Dicom_Modem1
+%Modem2% = Modem2, UNIMODEMCBA592B3
+%Modem1% = Modem1, UNIMODEME8626648
+
+
+; Installation sections
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "DiCom"
+
+; Model strings
+
+Modem3="DiCom 14400 CB FAX"
+Modem2="DiCom 28800 CB FAX"
+Modem1="DiCom 28800 CB Voice"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F E0<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0)M0"
+
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmdisco.inx b/private/unimodem/inf/mdmdisco.inx
new file mode 100644
index 000000000..a60e77ac5
--- /dev/null
+++ b/private/unimodem/inf/mdmdisco.inx
@@ -0,0 +1,650 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Discovery
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMDE1E49B3, UNIMODEM1DF1EB88, UNIMODEM49A19B4C, UNIMODEM935D30A1, UNIMODEM44CA0C8A, UNIMODEM51DB330E, UNIMODEM322437AF
+
+[Models]
+%Modem1% = Modem1, Disco_Modem1, UNIMODEMDE1E49B3 ; 1414CX
+%Modem2% = Modem2, Disco_Modem2, UNIMODEMDE1E49B3 ; 1414HX
+%Modem5% = Modem5, Disco_Modem3, UNIMODEM44CA0C8A ; 1442 AM / 1414 AX
+%Modem7% = Modem7, Disco_Modem4, UNIMODEM44CA0C8A ; 1942 AM / 1914 AX
+%Modem8% = Modem8, Disco_Modem8, UNIMODEM51DB330E ; 2400 A, 2nd Rev
+%Modem9% = Modem9, UNIMODEMD29BEDF5 ; 2400 C
+%Modem10% = Modem10, Disco_Modem10, UNIMODEM51DB330E ; 2400 C SOF
+%Modem12% = Modem12, Disco_Modem12 ; 2400 HM
+%Modem13% = Modem13, Disco_Modem13 ; 2400 H
+%Modem14% = Modem14, UNIMODEM69E0B87D ; 2400 H SOF
+%Modem16% = Modem16, Disco_Modem16 ; 2400 PM
+%Modem17% = Modem17, UNIMODEM306C1087 ; 2400 P
+%Modem18% = Modem18, UNIMODEMC91B4DB6 ; 2400 P SOF
+%Modem19% = Modem19, Disco_Modem19, UNIMODEM1DF1EB88 ; 2400 VM
+%Modem20% = Modem20, Disco_Modem20, UNIMODEM1DF1EB88 ; 2400 V, 2nd rev
+%Modem23% = Modem23, UNIMODEM4E7288FD ; 2496 CX
+%Modem24% = Modem24, UNIMODEM0A75EEDD ; 2496 HX
+%Modem25% = Modem25, UNIMODEME47FF7AD ; 2496 PX
+%Modem26% = Modem26, Disco_Modem26, UNIMODEM49A19B4C ; 2400 AM MNP & V.42(bis)
+%Modem27% = Modem27, Disco_Modem27, UNIMODEM49A19B4C ; 2400 CM, QM MNP & V.42(bis)
+%Modem28% = Modem28, UNIMODEMD6BCD4BA ; Generic 2400 CM, QM MNP
+%Modem29% = Modem29, UNIMODEM322437AF ; Generic 2814CX & HX + Victory 28800E & I
+%Modem30% = Modem30, Disco_Modem30, UNIMODEM935D30A1 ; 9632 AM & AX V32bis
+%Modem31% = Modem31, Disco_Modem31, UNIMODEM935D30A1 ; 9632 AM & AX V32
+%Modem32% = Modem32, UNIMODEMDE1E49B3 ; Generic 1414HX & CX + Victory 14400E & I
+%Modem33% = Modem19, UNIMODEM1DF1EB88 ; Generic 2400V & 2400VM
+%Modem34% = Modem26, UNIMODEM49A19B4C ; Generic 2400 AM,CM or QM
+%Modem35% = Modem30, UNIMODEM935D30A1 ; Generic 9632 AM or AX
+%Modem36% = Modem36, UNIMODEM44CA0C8A ; Generic 1414/1442/1914/1942 AM/AX
+%Modem37% = Modem37, UNIMODEM51DB330E ; Generic 2400A / 2400C
+%Modem39% = Modem39, Disco_Modem39, UNIMODEM322437AF ; Discovery 2814CX
+%Modem40% = Modem40, Disco_Modem40, UNIMODEM322437AF ; Discovery 2814HX
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, Common, Modem2.AddReg, Internal
+
+[Modem5]
+AddReg=All, Common, Modem5.AddReg, External
+
+[Modem7]
+AddReg=All, Common, Modem7.AddReg, External
+
+[Modem8]
+AddReg=All, Common, Modem8.AddReg, External
+
+[Modem9]
+AddReg=All, Common, Modem9.AddReg, External
+
+[Modem10]
+AddReg=All, Common, Modem10.AddReg, External
+
+[Modem12]
+AddReg=All, Common, Modem12.AddReg, Internal
+
+[Modem13]
+AddReg=All, Common, Modem13.AddReg, Internal
+
+[Modem14]
+AddReg=All, Common, Modem14.AddReg, Internal
+
+[Modem16]
+AddReg=All, Common, Modem16.AddReg, External
+
+[Modem17]
+AddReg=All, Common, Modem17.AddReg, External
+
+[Modem18]
+AddReg=All, Common, Modem18.AddReg, External
+
+[Modem19]
+AddReg=All, Common, Modem19.AddReg, Internal
+
+[Modem20]
+AddReg=All, Common, Modem20.AddReg, Internal
+
+[Modem23]
+AddReg=All, Common, Modem23.AddReg, External
+
+[Modem24]
+AddReg=All, Common, Modem24.AddReg, Internal
+
+[Modem25]
+AddReg=All, Common, Modem25.AddReg, External
+
+[Modem26]
+AddReg=All, Common, Modem26.AddReg, External
+
+[Modem27]
+AddReg=All, Common, Modem27.AddReg, External
+
+[Modem28]
+AddReg=All, Common, Modem28.AddReg, External
+
+[Modem29]
+AddReg=All, Common, Modem29.AddReg, External
+
+[Modem30]
+AddReg=All, Common, Modem30.AddReg, External
+
+[Modem31]
+AddReg=All, Common, Modem31.AddReg, External
+
+[Modem32]
+AddReg=All, Common, Modem32.AddReg, External
+
+[Modem36]
+AddReg=All, Common, Modem36.AddReg, External
+
+[Modem37]
+AddReg=All, Common, Modem37.AddReg, External
+
+[Modem39]
+AddReg=All, Common, Modem39.AddReg, External
+
+[Modem40]
+AddReg=All, Common, Modem40.AddReg, Internal
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, d0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, d0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, d0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Soft,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, c0,12,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1 &D2 <cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, c0,12,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+
+[Modem23.AddReg]
+HKR,, Properties, 1, 40,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F &C1&D2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem24.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem25.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem26.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem27.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem28.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F \V2 <cr>"
+
+[Modem29.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F&C1&D2\V2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem30.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem31.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem32.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem36.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F <cr>"
+
+[Modem37.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem39.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F&C1&D2\V2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+[Modem40.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F&C1&D2\V2<cr>"
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Discovery"
+
+Modem1="Discovery 1414 CX"
+Modem2="Discovery 1414 HX"
+Modem5="Discovery 1442 AM 1414 AX Security modem"
+Modem7="Discovery 1942 AM 1914 AX V32terbo-security modem"
+Modem8="Discovery 2400 A, 2nd rev"
+Modem9="Discovery 2400 C"
+Modem10="Discovery 2400 C Send Only Fax"
+Modem12="Discovery 2400 HM"
+Modem13="Discovery 2400 H"
+Modem14="Discovery 2400 H Send Only Fax"
+Modem16="Discovery 2400 PM"
+Modem17="Discovery 2400 P"
+Modem18="Discovery 2400 P Send Only Fax"
+Modem19="Discovery 2400 VM"
+Modem20="Discovery 2400 V, 2nd rev"
+Modem23="Discovery 2496 CX"
+Modem24="Discovery 2496 HX"
+Modem25="Discovery 2496 PX"
+Modem26="Discovery 2400 AM MNP & V.42(bis)"
+Modem27="Discovery 2400 CM, QM MNP & V.42(bis)"
+Modem28="Discovery 2400 CM, QM MNP"
+Modem29="Discovery & Victory 28.8K modem"
+Modem30="Discovery 9632 AM & AX V32bis"
+Modem31="Discovery 9632 AM & AX V32"
+Modem32="Discovery & Victory 14.4K modem"
+Modem33="Discovery 2400 V & 2400 VM"
+Modem34="Discovery 2400 AM, CM & QM - MNP & V.42(bis)"
+Modem35="Discovery 9632 AM & AX V32 & V32bis"
+Modem36="Discovery 1414AX, 1442AM, 1914AX, 1942AM Security modem"
+Modem37="Discovery 2400 A & 2400 C"
+Modem39="Discovery 2814 CX"
+Modem40="Discovery 2814 HX"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F V1 E0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\J0\N3"
+HKR, Settings, ErrorControl_Off,, "\J1\N1"
+HKR, Settings, ErrorControl_Forced,, "\J0\N4"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmdsi.inx b/private/unimodem/inf/mdmdsi.inx
new file mode 100644
index 000000000..e5e92cdc8
--- /dev/null
+++ b/private/unimodem/inf/mdmdsi.inx
@@ -0,0 +1,822 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Digicom Systems and Creative Labs
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM1D10CEDC
+ExcludeFromSelect=UNIMODEM1E9755DF
+ExcludeFromSelect=UNIMODEMA0869A48
+ExcludeFromSelect=UNIMODEMF0C04D74
+ExcludeFromSelect=UNIMODEM5505D91E
+ExcludeFromSelect=ISAPNP\CTL3001_DEV0004
+ExcludeFromSelect=*CTL3011
+ExcludeFromSelect=UNIMODEMA472D57C
+
+[Modem29.PosDup]
+*PNP0500
+
+[Manufacturer]
+%Digicom% = Digicom
+%CreativeLabs% = CreativeLabs
+%Digitan% = Digitan
+
+[CreativeLabs]
+%Modem30% = Modem29, ISAPNP\CTL3001_DEV0004
+%Modem30% = Modem29, UNIMODEM5172362D
+%Modem29% = Modem29, *CTL3011
+%Modem29% = Modem29, UNIMODEM3FE73268
+%Modem28% = Modem28, DSI_Modem28, UNIMODEM733C4E29
+%Modem27% = Modem27, UNIMODEMCB01299F ; old
+%Modem27% = Modem27, UNIMODEME9DF4BA4 ; retail - serwave
+%Modem27% = Modem27, DSI_Modem27, UNIMODEME466C599 ; old
+%Modem27% = Modem27, UNIMODEM13270455 ; fixed firmware
+%Modem27% = Modem27, UNIMODEM1C254526 ; british
+%Modem27% = Modem27, UNIMODEMB8DF3F07 ; german & french
+%Modem26% = Modem26, DSI_Modem26, UNIMODEM16E3BF9F
+%Modem19% = Modem19, DSI_Modem19, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; Creative Labs modem blaster 14.4 PCMCIA, match with modem 14
+%Modem19% = Modem19, DSI_Modem19, UNIMODEM858E1599 ; Creative Labs modem blaster 14.4 PCMCIA
+%Modem18% = Modem18, UNIMODEM1D10CEDC ; combo of modems 17+5
+%Modem17% = Modem17, DSI_Modem17, UNIMODEM1D10CEDC ; Creative Labs modem Blaster 19.2 (int) uses modem 5 set
+
+[Digicom]
+
+%Modem29A% = Modem16, UNIMODEMA472D57C
+
+%Modem25% = Modem25, UNIMODEM1ACBC3FC
+%Modem24% = Modem12, UNIMODEM5505D91E ; Scout Plus, Scout Plus terbo, Eagle
+%Modem23% = Modem12, DSI_Modem23, UNIMODEM5505D91E ; Eagle
+%Modem22% = Modem8, UNIMODEMF0C04D74 ; Digicom Scout Classic 144, Infotel
+%Modem21% = Modem12, UNIMODEMA0869A48 ; Scout Plus, Scout Plus terbo
+%Modem21% = Modem12, DSI_Modem21, UNIMODEM5505D91E ; Scout Plus, Scout Plus terbo
+%Modem20% = Modem20, UNIMODEM1E9755DF ; Combo Digicom Scout Plus or terbo ext+int
+%Modem16d% = Modem16, DSI_Modem16d ; Digicom 9624LR+(ext)
+%Modem16c% = Modem16, DSI_Modem16c ; Digicom 9624AR+(ext)
+%Modem16b% = Modem16, DSI_Modem16b, UNIMODEMA472D57C ; Digicom 9624LE+(ext)
+%Modem16a% = Modem16, DSI_Modem16a, UNIMODEMA472D57C ; Digicom 9624E+(ext)
+%Modem15% = Modem15, DSI_Modem15 ; Digicom 9624PC+(int)
+%Modem14% = Modem14, DSI_Modem14, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; Digicom Scout 14400 PCMCIA FAX Modem
+%Modem14% = Modem14, DSI_Modem14, UNIMODEM858E1599 ; Digicom Scout 14400 PCMCIA FAX Modem
+%Modem13% = Modem13, DSI_Modem13, UNIMODEM1E9755DF ; Digicom Scout Plus (int)
+%Modem13% = Modem13, DSI_Modem13, UNIMODEMA0869A48 ; Digicom Scout Plus (int)
+%Modem12% = Modem12, UNIMODEMAFD70D24 ; Digicom Scout Plus (ext)
+%Modem11% = Modem11, DSI_Modem11 ; Digicom Scout (int)
+%Modem10% = Modem10, DSI_Modem10 ; Digicom Scout (ext)
+%Modem9% = Modem9, UNIMODEM2FC0670B ; Digicom FaxModem 1442PC (int)
+%Modem8% = Modem8, DSI_Modem8, UNIMODEMF0C04D74 ; Digicom Scout Classic 144 (ext)
+%Modem7% = Modem7, DSI_Modem7, UNIMODEM1E9755DF ; Digicom Scout Plus Terbo (ext)
+%Modem7% = Modem7, DSI_Modem7, UNIMODEMA0869A48 ; Digicom Scout Plus Terbo (ext)
+%Modem7% = Modem7, UNIMODEMD5D455F1 ; Digicom Scout Plus Terbo (ext)
+%Modem6d% = Modem6, DSI_Modem6d ; Digicom 9624LR (ext)
+%Modem6c% = Modem6, DSI_Modem6c ; Digicom 9624AR (ext)
+%Modem6b% = Modem6, DSI_Modem6b ; Digicom 9624LE (ext)
+%Modem6a% = Modem6, DSI_Modem6a ; Digicom 9624E (ext)
+%Modem5% = Modem5, DSI_Modem5, UNIMODEM1D10CEDC ; Digicom Connection Pro 19.2 (int)
+%Modem4% = Modem4, UNIMODEMDFB7F25F ; Digicom Connection 144+FAX (int)
+%Modem4% = Modem4, UNIMODEM75A314BC ; Digicom Connection 144+FAX (int)
+%Modem4% = Modem4, UNIMODEME6F74E8C ; Digicom Connection 144+FAX (int)
+%Modem3% = Modem3, DSI_Modem3 ; Digicom Connection 144+ (int)
+%Modem2% = Modem2, DSI_Modem2 ; Digicom Connection 96+ (int)
+%Modem1% = Modem1, UNIMODEM7E77D7D9 ; Digicom Connection 144DF (int)
+
+[Digitan]
+%Modem31% = Modem29, UNIMODEM99D67908
+
+
+[Modem29]
+AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, VoiceView_Modem, VoiceView_Socket, Modem29.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem28]
+AddReg=All, MfgAddReg, Modem28.AddReg, INTERNAL
+
+[Modem27]
+AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, VoiceView_Modem, VoiceView_Socket, Modem27.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem26]
+AddReg=All, MfgAddReg, Modem26.AddReg, INTERNAL
+
+[Modem25]
+AddReg=All, MfgAddReg, Modem25.AddReg, EXTERNAL
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, EXTERNAL
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem5.AddReg, INTERNAL
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem5.AddReg, INTERNAL
+
+[Modem16] ; Digicom 9624E+, 9624LE+, 9624AR+, 9624LR+
+AddReg=All, MfgAddReg, Scout, Modem15.AddReg, EXTERNAL
+
+[Modem15] ; Digicom 9624PC+
+AddReg=All, MfgAddReg, Modem15.AddReg, INTERNAL
+
+[Modem14] ; Digicom Scout 14400 PCMCIA FAX Modem
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem13] ; Digicom Scout Plus
+AddReg=All, MfgAddReg, Modem12.AddReg, Scout, INTERNAL
+
+[Modem12] ; Digicom Scout Plus
+AddReg=All, MfgAddReg, Modem12.AddReg, Scout, EXTERNAL
+
+[Modem11] ; Digicom Scout
+AddReg=All, MfgAddReg, Modem10.AddReg, Scout, INTERNAL
+
+[Modem10] ; Digicom Scout
+AddReg=All, MfgAddReg, Modem10.AddReg, Scout, EXTERNAL
+
+[Modem9] ; Digicom FaxModem 1442PC
+AddReg=All, MfgAddReg, Modem9.AddReg, INTERNAL
+
+[Modem8] ; Digicom Scout Classic 144
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7] ; Digicom Scout Plus Terbo
+AddReg=All, MfgAddReg, Modem7.AddReg, Scout, EXTERNAL
+
+[Modem6] ; Digicom 9624E, 9624LE, 9624AR, 9624LR
+AddReg=All, MfgAddReg, Scout, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; Digicom Connection Pro 19.2
+AddReg=All, MfgAddReg, Modem5.AddReg, INTERNAL
+
+[Modem4] ;Digicom Connection 144+FAX
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; Digicom connection 144+
+AddReg=All, MfgAddReg, Modem3.AddReg, INTERNAL
+
+[Modem2] ; Digicom Connection 96+
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1] ; Digicom Connection 144DF
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+[Modem29.AddReg] ; Phone Blaster 28.8 - serwave
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem28.AddReg] ; Modem Blaster 28.8
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W1 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem27.AddReg] ; Phone Blaster - 14.4 serwave
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem26.AddReg] ; Modem Blaster 14.4
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 V1 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3-J1"
+HKR, Settings, Compression_On,, """H3%%C1"
+HKR, Settings, Compression_Off,, """H0%%C0"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem25.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem20.AddReg] ; Combo Digicom Scout Plus or terbo ext+int
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 0f,00,00,00, 80,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+
+[Modem15.AddReg] ; Digicom 9624E+, 9624LE+, 9624AR+, 9624LR+, 9624PC+
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 S0=0<cr>"
+HKR, Settings, SpeedNegotiation_Off,, "*G0"
+HKR, Settings, SpeedNegotiation_On,, "*G1"
+HKR, Settings, InactivityTimeout,, "S9=<#>"
+HKR, Settings, DialSuffix,, ""
+
+[Modem14.AddReg] ; Digicom Scout 14400 PCMCIA Fax/modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3 -J1"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, """H0"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem12.AddReg] ; Digicom Scout Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 0f,00,00,00, b7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem10.AddReg] ; Digicom Scout
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem9.AddReg] ; Digicom FaxModem 1442PC
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 \V1 W1<cr>"
+
+[Modem8.AddReg] ; Digicom Scout Classic 144
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 03,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem7.AddReg] ; Digicom Scout Plus Terbo
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 07,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem6.AddReg] ; Digicom 9624E, 9624LE, 9624AR, 9624LR, 9624PC+
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 S0=0<cr>"
+HKR, Settings, InactivityTimeout,, "S9=<#>"
+
+[Modem5.AddReg] ; Digicom Connection Pro 19.2
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 07,00,00,00, 77,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem4.AddReg] ;Digicom Connection 144+FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem3.AddReg] ; Digicom Connection 144 Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem2.AddReg] ; Digicom Connection 96 Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,25,00,00
+
+[Modem1.AddReg] ; Digicom Connection 144DF
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Strings]
+MS = "Microsoft"
+CreativeLabs = "Creative Labs"
+Modem30 = "Creative Labs Phone Blaster 28.8 DSVD PnP Voice"
+Modem29 = "Creative Labs Modem Blaster 28.8 DSVD PnP Voice"
+Modem28 = "Creative Labs Modem Blaster 28.8"
+Modem27 = "Creative Labs Phone Blaster Voice"
+Modem26 = "Creative Labs Modem Blaster 14.4"
+Modem19 = "Creative Labs Modem Blaster 14.4 PCMCIA"
+Modem18 = "Digicom or Creative Labs 19.2 Modem"
+Modem17 = "Creative Labs Modem Blaster 19.2"
+
+Digicom = "Digicom"
+
+Modem29A = "Digicom Data Fax Modem"
+
+Modem25 = "Digicom Softmodem 14400 + Fax"
+Modem24 = "Digicom 14.4 Data FAX Modem"
+Modem23 = "Digicom Eagle 14.4 V.32 Data FAX"
+Modem22 = "14.4 Data FAX Modem"
+Modem21 = "Digicom Scout Plus or Scout Plus Terbo"
+Modem20 = "Digicom Scout Plus or Terbo"
+Modem16d = "Digicom 9624LR+ External"
+Modem16c = "Digicom 9624AR+ External"
+Modem16b = "Digicom 9624LE+ External"
+Modem16a = "Digicom 9624E+ External"
+Modem15 = "Digicom 9624PC+ Internal"
+Modem14 = "Digicom Scout 14400 PCMCIA Fax Modem"
+Modem13 = "Digicom Scout Plus Internal"
+Modem12 = "Digicom Scout Plus External"
+Modem11 = "Digicom Scout Internal"
+Modem10 = "Digicom Scout External"
+Modem9 = "Digicom FaxModem 1442PC Internal"
+Modem8 = "Digicom Scout Classic 144 External"
+Modem7 = "Digicom Scout Plus Terbo External"
+Modem6d = "Digicom 9624LR External"
+Modem6c = "Digicom 9624AR External"
+Modem6b = "Digicom 9624LE External"
+Modem6a = "Digicom 9624E External"
+Modem5 = "Digicom Connection Pro 19.2 Internal"
+Modem4 = "Digicom Connection 144+FAX Internal"
+Modem3 = "Digicom Connection 144+ Internal"
+Modem2 = "Digicom Connection 96+ Internal"
+Modem1 = "Digicom Connection 144DF Internal"
+
+Digitan ="Digitan Systems Inc."
+Modem31 ="Digitan 28.8 DSVD Data Fax Voice"
+
+; VoiceView
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
+
+[Scout]
+HKR, Init, 2,, "AT &F E0 V1 *M2<cr>"
+HKR, Settings, FlowControl_Off,, "*F0"
+HKR, Settings, FlowControl_Hard,, "*F3"
+HKR, Settings, FlowControl_Soft,, "*F2"
+HKR, Settings, ErrorControl_On,, "*E9"
+HKR, Settings, ErrorControl_Off,, "*E0"
+HKR, Settings, ErrorControl_Forced,, "*E6"
+HKR, Settings, Compression_On,, "*E9"
+HKR, Settings, Compression_Off,, "*E5"
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
+
+[ROCK_VOICE_ALL]
+HKR,,Enumerator,,serwave.vxd
+HKR,, ForwardDelay, 1,88,13
+HKR,, SpeakerPhoneSpecs, 1, 00,00,00,00, 0f,00,00,00, 03,00,00,00, 00,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 2,, "at#spk=0,15,,<cr>"
+HKR, SpeakerPhoneDisable, 3,, "at#vls=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneMute, 2,, "at#spk=0,,,<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneUnMute, 2,, "at#spk=1,,,<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 2,, "at#spk=,<Vol>,<Gain><cr>"
+HKR,, VoiceManufacturerID, 1, 01,00
+HKR,, VoiceProductIDWaveIn, 1, 80,00
+HKR,, VoiceProductIDWaveOut,1, 81,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 82,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 83,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR,, VoiceMixerMid,1,02,00
+HKR,, VoiceMixerPid,1,99,01
+HKR,, VoiceMixerLineID,1,00,00,05,00
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[ROCK_VOICE_SERWAVE]
+HKR,, VoiceProfile, 1, 27,03,00,00
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+
+; VoiceView
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+;setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+;setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "<cr><lf>-SSV<cr><lf>", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SMD<cr><lf>", 1, 0a, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SFA<cr><lf>", 1, 0b, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRA<cr><lf>", 1, 0c, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRQ<cr><lf>", 1, 0d, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRC:<cr><lf>", 1, 0e, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-STO<cr><lf>", 1, 0f, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SVM<cr><lf>", 1, 10, 00, 00,00,00,00, 00,00,00,00
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR,,PortSubClass,1,02
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "*S0"
+HKR, Settings, SpeedNegotiation_On,, "*S1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; connect at 14400
+HKR, Responses, "69<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; Protocol:None
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Protocol:LAPM
+HKR, Responses, "78<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; Connect V42BIS
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Prorocol:ALT
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NOTUSED<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42BIZ<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200TX/75RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75TX/1200RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-+FCERROR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-+FCERROR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>",1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "<cr><lf>CONNECT REL/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL/MNP5<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL/MNP5<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/MNP5<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/MNP5<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/MNP5<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/MNP5<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/MNP5<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/MNP5<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL/MNP5<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL/MNP5<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL/MNP5<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL/MNP5<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmdyna.inx b/private/unimodem/inf/mdmdyna.inx
new file mode 100644
index 000000000..1d8206837
--- /dev/null
+++ b/private/unimodem/inf/mdmdyna.inx
@@ -0,0 +1,611 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Dynalink
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM0ADAAC9E
+
+[Models]
+%Modem1% = Modem1, UNIMODEM3F15EDC1
+%Modem2% = Modem2, UNIMODEMA9B3C5F8
+%Modem2% = Modem2, UNIMODEM84AAA0BC
+%Modem2% = Modem2, Dyna_Modem2, UNIMODEM0ADAAC9E
+%Modem3% = Modem3, UNIMODEM2616E668
+%Modem3% = Modem3, UNIMODEMD19A72D8
+%Modem3% = Modem3, Dyna_Modem3, UNIMODEMC9720A17
+%Modem4% = Modem4, Dyna_Modem4
+%Modem5% = Modem5, UNIMODEM882BB155
+%Modem5% = Modem5, UNIMODEM251BF00A
+%Modem6% = Modem6, Dyna_Modem6
+%Modem7% = Modem7, Dyna_Modem7
+%Modem8% = Modem8, Dyna_Modem8, UNIMODEM0FF842E0
+%Modem9% = Modem9, UNIMODEM6A19F710
+%Modem10% = Modem10, Dyna_Modem10
+%Modem11% = Modem11, UNIMODEMDDD3C188
+%Modem12% = Modem12, UNIMODEM469FEAF4
+%Modem13% = Modem13, Dyna_Modem13
+%Modem14% = Modem14, Dyna_Modem14
+%Modem15% = Modem15, Dyna_Modem15
+%Modem16% = Modem16, UNIMODEMA4DC07FA
+%Modem17% = Modem17, UNIMODEMF0284E0D
+%Modem18% = Modem18, UNIMODEM50055F0A
+%Modem19% = Modem19, UNIMODEM0ADAAC9E ; Generic Dynalink/Trust 1414
+
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, Internal
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, Internal
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, Internal
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, Internal
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, External
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, Internal
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, Internal
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem13.AddReg, Internal
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, External
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, External
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, External
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, External
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 S95=3 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q9"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "&Q9"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 V1<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1<cr>"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C1"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &C1 &D2 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "\N7"
+HKR, Settings, Compression_Off,, "\N0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "\N1"
+HKR, Settings, Compression_Off,, "\N0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 B0 &D2 &C1 V1<cr>"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 B0 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "\N1"
+HKR, Settings, Compression_Off,, "\N0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 B0 &D2 &C1 V1<cr>"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 &D2 &C1 V1 S95=47 B0 <cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q5S46=136"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 B0 &C1 &D2 V1<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q5S48=128"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&F&C1E0&D2V1W2S95=47<cr>"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Dynalink"
+
+; Model strings
+
+Modem1="Dynalink 1414 VH"
+Modem2="Dynalink 1414 VE"
+Modem3="Dynalink 1414 VQE"
+Modem4="Dynalink 1414 VQC"
+Modem5="Dynalink 1414 VQH"
+Modem6="Topline EVQ 1414"
+Modem7="Topline IVQ 1414"
+Modem8="Dynalink 9624 AH"
+Modem9="Dynalink 9624 VAP"
+Modem10="Dynalink 9624 VAH"
+Modem11="Dynalink 9624 VQP"
+Modem12="Dynalink 9624 VQH"
+Modem13="Dynalink 2400 VH"
+Modem14="Dynalink 2400 MH"
+Modem15="Dynalink 2400 VP"
+Modem16="Dynalink 2400 MP"
+Modem17="Dynalink 9624 VQE"
+Modem18="Dynalink V9624 VQE"
+Modem19="1414 14.4k Modem"
+
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmeiger.inx b/private/unimodem/inf/mdmeiger.inx
new file mode 100644
index 000000000..835b78eb1
--- /dev/null
+++ b/private/unimodem/inf/mdmeiger.inx
@@ -0,0 +1,421 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Eiger Labs
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Eiger
+
+[Eiger] ; EFX-288E V.34 Fax/ Modem
+%Modem1% = Modem1, UNIMODEM419F4CDF
+%Modem2% = Modem2, UNIMODEMD2809F7D
+%Modem3% = Modem3, PCMCIA\EIGER_LABS_INC. -EFX-2880P_FAX/MODEM-F39C ; EPX-2880P
+%Modem3% = Modem3, UNIMODEMD81348E4
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 W1 S0=0 S95=47<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0 S48=128 S36=3"
+HKR, Settings, ErrorControl_On,, "\N3 S48=7 S36=7"
+HKR, Settings, ErrorControl_Forced,, "\N2 S48=7 S36=4"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 :E0 @M18 *H1 S48=7 S36=7"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 :E0 @M18 *H1 S48=7 S36=0"
+HKR, Settings, Compression_On,, "%%C3 S46=138"
+HKR, Settings, Compression_Off,, "%%C0 S46=136"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Strings]
+Mfg = "Eiger Labs Inc."
+Modem1 = "Eiger EFX-288E V.34 Fax Modem"
+Modem2="Eiger EFX-2880NA V.34 Fax Modem"
+Modem3="Eiger EFX-2880P 28.8 Data Fax Cell PCMCIA"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F S0=0 &D2 &C1 E0 V1 W2 \V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0-J0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, Compression_On,, "%%C3""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42", 1, 02, 02, 60,09,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42", 1, 02, 02, C0,12,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42", 1, 02, 02, 80,25,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42", 1, 02, 02, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42", 1, 02, 02, A0,41,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42", 1, 02, 02, 60,54,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42", 1, 02, 02, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+; responses for PCMCIA added
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FC-FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/NONE<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/NONE<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/NONE<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/NONE<cr><lf>",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/NONE<cr><lf>",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NONE<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NONE<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NONE<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NONE<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NONE<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NONE<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NONE<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NONE<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NONE<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NONE<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NONE<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NONE<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NONE<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/NONE<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/NONE<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/NONE<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmelink.inx b/private/unimodem/inf/mdmelink.inx
new file mode 100644
index 000000000..498c2af8f
--- /dev/null
+++ b/private/unimodem/inf/mdmelink.inx
@@ -0,0 +1,201 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: EEH Datalink GmbH
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, Elink_Modem1 ; ELINK 301 ISDN Terminal Adapter
+%Modem2% = Modem2, Elink_Modem2 ; ELINK 323 Terminal Adapter, ISDN-Modus
+%Modem3% = Modem3, Elink_Modem3 ; ELINK 323 Terminal Adapter, Modem-Modus
+%Modem4% = Modem2, Elink_Modem4 ; ELINK 310 ISDN Terminal Adapter
+
+; Installation sections
+
+[Modem1] ; ELINK 301 ISDN Terminal Adapter
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+[Modem2] ; ELINK 323 Terminal Adapter, ISDN-Modus
+AddReg=All, MfgAddReg, Modem2.AddReg
+
+[Modem3] ; ELINK 323 Terminal Adapter, Modem-Modus
+AddReg=All, MfgAddReg, Modem3.AddReg
+
+; AddReg sections
+
+[Modem1.AddReg] ; ELINK 301 ISDN Terminal Adapter
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 36,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 3,, "AT \V0 X2<cr>"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem2.AddReg] ; ELINK 323 Terminal Adapter, ISDN-Modus
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,01,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 3,, "AT V1 \V1 X2 &D2<cr>"
+HKR, Settings, ErrorControl_On,, "&B49\N3"
+HKR, Settings, ErrorControl_Off,, "&B34\N0"
+HKR, Settings, ErrorControl_Forced,, "&B49\N6"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem3.AddReg] ; ELINK 323 Terminal Adapter, Modem-Modus
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,01,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 3,, "AT V1 \V1 X2 &D2 &B0 <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "EEH Datalink GmbH"
+
+; Model strings
+
+Modem1="ELINK 301 ISDN Terminal Adapter"
+Modem2="ELINK 323 Terminal Adapter, ISDN-Modus"
+Modem3="ELINK 323 Terminal Adapter, Modem-Modus"
+Modem4="ELINK 310 ISDN Terminal Adapter"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,,
+HKR, Settings, Tone,,
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+HKR, Settings, CallSetupFailTimer,,
+HKR, Settings, InactivityTimeout,,
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO USER RESPONDING<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/RELC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42B<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 9600/V.110<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V.110<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V.110<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/MNP<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/X.75<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/X.70NL<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/X.70 BTX<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmelpro.inx b/private/unimodem/inf/mdmelpro.inx
new file mode 100644
index 000000000..1a0d070d8
--- /dev/null
+++ b/private/unimodem/inf/mdmelpro.inx
@@ -0,0 +1,396 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Elproma Electronica B.V.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem4% = Modem4, UNIMODEM98491C89
+%Modem3% = Modem3, UNIMODEM346B9CAB
+%Modem2% = Modem2, Elproma_Modem2, UNIMODEM733C4E29
+%Modem1% = Modem1, Elproma_Modem1, UNIMODEMA3EEEF33
+
+
+; Installation sections
+[Modem4]
+AddReg=All, Modem4.AddReg, External
+
+[Modem3]
+AddReg=All, Modem3.AddReg, Internal
+
+[Modem2]
+AddReg=All, Modem2.AddReg, Internal
+
+[Modem1]
+AddReg=All, Modem1.AddReg, External
+
+
+; AddReg sections
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 S95=47<cr>"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+HKR, Settings, Compression_On,, "%%C1"
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Elproma"
+
+; Model strings
+Modem4="Elproma MOD144"
+Modem3="Elproma MOD144i"
+Modem2="Elproma MOD288i"
+Modem1="Elproma MOD288"
+
+; Plug and Play device names
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Init, 1,, "AT &F E0<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, ErrorControl_Cellular,, "-K1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0"
+
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmelsa.inx b/private/unimodem/inf/mdmelsa.inx
new file mode 100644
index 000000000..529719dfa
--- /dev/null
+++ b/private/unimodem/inf/mdmelsa.inx
@@ -0,0 +1,465 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ELSA GmbH
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM64CE944A, UNIMODEM2CAD71C2, UNIMODEM63F0FE69, UNIMODEM391D6C57
+
+[Models]
+%Modem28% = Modem1, UNIMODEM391D6C57 ; Generic MicroLink 24000TL/28000TL
+%Modem27% = Modem10, UNIMODEM63F0FE69 ; Generic MicroLink 2460TL or 2460PC
+%Modem26% = Modem13, UNIMODEM2CAD71C2 ; Generic MicroLink 14.4TQ or 14.4TQV
+%Modem25% = Modem18, UNIMODEM64CE944A ; Generic ELISA 144/144V or Ziff144
+
+%Modem24% = Modem24, UNIMODEM2C31D5DF ; MicroLink ISDN TD
+%Modem23% = Modem23, UNIMODEMC41B245F ; MicroLink ISDN TL PRO
+%Modem22% = Modem22, UNIMODEME276C593 ; MicroLink ISDN TL
+%Modem22% = Modem22, UNIMODEM3AAD62E4 ; MicroLink ISDN TL
+%Modem22% = Modem22, UNIMODEM2D9D2D30 ; MicroLink ISDN TL
+%Modem20% = Modem20, ELSA_Modem20,UNIMODEM64CE944A ; ELISA 144V
+%Modem19% = Modem19, ELSA_Modem19,UNIMODEM64CE944A ; ELISA 144
+%Modem18% = Modem18, ELSA_Modem18,UNIMODEM64CE944A ; ZIFF 144
+%Modem17% = Modem17, PCMCIA\ELSA,_Aachen_(Germany)-MicroLink_14.4MC-0D87 ; MicroLink 14.4MC
+%Modem16% = Modem16, UNIMODEM10BFA5FD ; MicroLink 28.8TQV
+%Modem15% = Modem15, UNIMODEM156297A2 ; MicroLink 28.8TQ
+%Modem15% = Modem15, UNIMODEM4CD701ED ; MicroLink 28.8TQ
+%Modem14% = Modem14, ELSA_Modem14,UNIMODEM2CAD71C2 ; MicroLink 14.4TQV
+%Modem13% = Modem13, ELSA_Modem15,UNIMODEM2CAD71C2 ; MicroLink 14.4TQ
+%Modem12% = Modem12, PCMCIA\ELSA,_Aachen_(Germany)-MicroLink_2460MC-E2B6 ; MicroLink 2460MC
+%Modem11% = Modem11, UNIMODEM4DF238FC ; MicroLink 2460PC
+%Modem11% = Modem11, ELSA_Modem11,UNIMODEM63F0FE69 ; MicroLink 2460PC
+%Modem10% = Modem10, ELSA_Modem10,UNIMODEM63F0FE69 ; MicroLink 2460TL
+%Modem9% = Modem9, UNIMODEMCB9C72DF ; MicroLink 2440TR
+%Modem8% = Modem8, UNIMODEMED8BE360 ; MicroLink 2440T
+%Modem6% = Modem6, UNIMODEM6358119D ; MicroLink 14.4PC
+%Modem5% = Modem5, UNIMODEMA55F1682 ; MicroLink 14.4TM
+%Modem5% = Modem5, UNIMODEM7165EC8C ; MicroLink 14.4TM
+%Modem3% = Modem3, ELSA_Modem3,UNIMODEM391D6C57 ; MicroLink 24oooTL
+%Modem2% = Modem2, UNIMODEMD4EE7C82 ; MicroLink 14.4TL
+%Modem2% = Modem2, UNIMODEMA4EAEB9F ; MicroLink 14.4TL
+%Modem1% = Modem1, ELSA_Modem1,UNIMODEM391D6C57 ; MicroLink 288ooTL
+%Modem1% = Modem1, UNIMODEMDE2F6BC4 ; MicroLink 288ooTL
+
+
+; Installation sections
+
+[Modem24] ; MicroLink ISDN TD
+AddReg=All, MfgAddReg, Modem24.AddReg, External
+
+[Modem23] ; MicroLink ISDN TL PRO
+AddReg=All, MfgAddReg, Modem23.AddReg, External
+
+[Modem22] ; MicroLink ISDN TL
+AddReg=All, MfgAddReg, Modem22.AddReg, External
+
+[Modem20] ; ELISA 144V
+AddReg=All, MfgAddReg, Modem20.AddReg, External
+
+[Modem19] ; ELISA 144
+AddReg=All, MfgAddReg, Modem19.AddReg, External
+
+[Modem18] ; ZIFF 144
+AddReg=All, MfgAddReg, Modem18.AddReg, External
+
+[Modem17] ; MicroLink 14.4MC
+AddReg=All, MfgAddReg, Modem17.AddReg, PCMCIA
+
+[Modem16] ; MicroLink 28.8TQV
+AddReg=All, MfgAddReg, Modem16.AddReg, External
+
+[Modem15] ; MicroLink 28.8TQ
+AddReg=All, MfgAddReg, Modem15.AddReg, External
+
+[Modem14] ; MicroLink 14.4TQV
+AddReg=All, MfgAddReg, Modem14.AddReg, External
+
+[Modem13] ; MicroLink 14.4TQ
+AddReg=All, MfgAddReg, Modem13.AddReg, External
+
+[Modem12] ; MicroLink 2460MC
+AddReg=All, MfgAddReg, Modem12.AddReg, PCMCIA
+
+[Modem11] ; MicroLink 2460PC
+AddReg=All, MfgAddReg, Modem11.AddReg, Internal
+
+[Modem10] ; MicroLink 2460TL
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9] ; MicroLink 2440TR
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8] ; MicroLink 2440T
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem6] ; MicroLink 14.4PC
+AddReg=All, MfgAddReg, Modem6.AddReg, Internal
+
+[Modem5] ; MicroLink 14.4TM
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem3] ; MicroLink 24oooTL
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; MicroLink 14.4TL
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; MicroLink 288ooTL
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem24.AddReg] ; MicroLink ISDN TD
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, 37,03,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, FClass, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F \N6 -M0 Q0 V1 \V1<cr>"
+HKR, Settings, CallSetupFailTimer,, " "
+HKR, Settings, InactivityTimeout,, " "
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem23.AddReg] ; MicroLink ISDN TL PRO
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 01,00,00,00, b0,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, FClass, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F \N6 <cr>"
+HKR, Settings, CallSetupFailTimer,, " "
+HKR, Settings, InactivityTimeout,, " "
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem22.AddReg] ; MicroLink ISDN TL
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, 37,03,00,00, 40,5e,02,00, 00,fa,00,00
+HKR,, FClass, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F \N6 -M0 Q0 V1 \V1<cr>"
+HKR, Settings, CallSetupFailTimer,, " "
+HKR, Settings, InactivityTimeout,, " "
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+
+[Modem20.AddReg] ; ELISA 144V
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S95=44 <cr>"
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem19.AddReg] ; ELISA 144
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S95=44 <cr>"
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem18.AddReg] ; ZIFF 144
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S95=44 <cr>"
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem17.AddReg] ; MicroLink 14.4MC
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S95=0 <cr>"
+HKR,, FClass, 1, 19,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem16.AddReg] ; MicroLink 28.8TQV
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[Modem15.AddReg] ; MicroLink 28.8TQ
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem14.AddReg] ; MicroLink 14.4TQV
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[Modem13.AddReg] ; MicroLink 14.4TQ
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem12.AddReg] ; MicroLink 2460MC
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem11.AddReg] ; MicroLink 2460PC
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem10.AddReg] ; MicroLink 2460TL
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem9.AddReg] ; MicroLink 2440TR
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, FClass, 1, 19,00,00,00
+
+[Modem8.AddReg] ; MicroLink 2440T
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0d,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, FClass, 1, 19,00,00,00
+
+[Modem6.AddReg] ; MicroLink 14.4PC
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem5.AddReg] ; MicroLink 14.4TM
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem3.AddReg] ; MicroLink 24oooTL
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, c0,5d,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+[Modem2.AddReg] ; MicroLink 14.4TL
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 1f,00,00,00
+HKR, Settings, FlowControl_Soft,, "\Q4"
+
+[Modem1.AddReg] ; MicroLink 288ooTL
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 1f,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ELSA GmbH"
+
+; Model strings
+
+Modem28="ELSA MicroLink 24ooo TL & 288ooTL"
+Modem27="ELSA MicroLink 2460TL & 2460PC"
+Modem26="ELSA MicroLink 14.4TQ & 14.4TQV"
+Modem25="ELSA ELISA 144, ELISA 144V, & ZIFF 144"
+
+Modem24="ELSA MicroLink ISDN TD"
+Modem23="ELSA MicroLink ISDN TL PRO"
+Modem22="ELSA MicroLink ISDN TL"
+Modem20="ELSA ELISA 144V"
+Modem19="ELSA ELISA 144"
+Modem18="ELSA ZIFF 144"
+Modem17="ELSA MicroLink 14.4MC"
+Modem16="ELSA MicroLink 28.8TQV"
+Modem15="ELSA MicroLink 28.8TQ"
+Modem14="ELSA MicroLink 14.4TQV"
+Modem13="ELSA MicroLink 14.4TQ"
+Modem12="ELSA MicroLink 2460MC"
+Modem11="ELSA MicroLink 2460PC"
+Modem10="ELSA MicroLink 2460TL"
+Modem9="ELSA MicroLink 2440TR"
+Modem8="ELSA MicroLink 2440T"
+Modem6="ELSA MicroLink 14.4PC"
+Modem5="ELSA MicroLink 14.4 T, TM & TL"
+Modem3="ELSA MicroLink 24oooTL"
+Modem2="ELSA MicroLink 14.4TL"
+Modem1="ELSA MicroLink 288ooTL"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F \V8 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAPM<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAPM/V42BIS<cr><lf>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAPM/V42BIS<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAPM<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAPM/V42BIS<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAPM/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAPM/V42BIS<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAPM/V42BIS<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAPM/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAPM/V42BIS<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAPM/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAPM/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 48000<cr><lf>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000<cr><lf>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/REL<cr><lf>", 1, 02, 03, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/REL<cr><lf>", 1, 02, 03, 00,c2,01,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmeric.inx b/private/unimodem/inf/mdmeric.inx
new file mode 100644
index 000000000..7baaeff99
--- /dev/null
+++ b/private/unimodem/inf/mdmeric.inx
@@ -0,0 +1,419 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Ericsson
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect= UNIMODEM02EAE31D, UNIMODEM28C2DB7F
+ExcludeFromSelect= UNIMODEME958F8F7
+
+[Models]
+%Modem1% = Modem1, PCMCIA\INTELLIGENT-ERICSSON_AS-B8E8 ; V34CC
+%Modem2% = Modem2, Eric_V34CC ; V34CC Cellular
+%Modem3% = Modem3, PCMCIA\INTELLIGENT-ERICSSON_14.4CC_FAX/MODEM-7ECF ; 144CC
+%Modem4% = Modem4, UNIMODEMFC8C167B ; V34DT
+%Modem5% = Modem5, UNIMODEMA2A1A049
+%Modem5% = Modem5, UNIMODEM02EAE31D
+%Modem5% = Modem5, UNIMODEM28C2DB7F
+%Modem5% = Modem5, UNIMODEME958F8F7
+%Modem6% = Modem6, Eric_V34CC ; V34TZ
+%Modem7% = Modem7, Eric_V34CC ; V34TZ
+
+[Strings]
+ClassName = "Modem"
+Mfg ="Ericsson"
+Modem1 ="Ericsson V.34CC PCMCIA"
+Modem2 ="Ericsson V.34CC PCMCIA Analogue Cellular " ; V34CC
+Modem3 ="Ericsson 14.4CC PCMCIA"
+Modem4 ="Ericsson V.34DT"
+Modem5 ="Ericsson SBN and ZAT models"
+Modem6 ="Ericsson V.34TZ Pocket Modem" ; V34TZ
+Modem7 ="Ericsson V.34TZ Pocket Modem Analogue Cellular"; V34TZ
+
+[Modem1]
+AddReg=All, MfgAddReg, ModemCC.Addreg, Modem1.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, ModemCC.Addreg, Modem2.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, ModemCC.Addreg, Modem3.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, ModemCC.Addreg, Modem1.AddReg, EXTERNAL
+
+[Modem7]
+AddReg=All, MfgAddReg, ModemCC.Addreg, Modem2.AddReg, EXTERNAL
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[Modem1.AddReg]
+HKR, Init, 2,, "AT &F <cr>"
+
+[Modem2.AddReg]
+HKR, Init, 2,, "AT &F5 <cr>"
+HKR,, Reset,, "AT&F5<cr>"
+
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 00,00,00,00, 0F,00,00,00, 77,02,00,00, 00,C2,01,00, 40,38,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 C1 &D2 S0=0<cr>"
+HKR, Init, 4,, "AT W1 S7=50 X4<cr>"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, InactivityTimeout,, "S40=<#>"
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Tone,, "T"
+HKR,, InactivityScale, 1, 3C,00,00,00
+
+
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 2D,00,00,00, FF,00,00,00, 00,00,00,00, 0F,00,00,00, 77,07,00,00, 00,C2,01,00, 80,70,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 S0=0 S25=20<cr>"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, Compression_Off,, "&E14"
+HKR, Settings, Compression_On,, "&E15"
+HKR, Settings, ErrorControl_Forced,, "&E2"
+HKR, Settings, ErrorControl_Off,, "&E0"
+HKR, Settings, ErrorControl_On,, "&E1"
+HKR, Settings, FlowControl_Hard,, "&E4"
+HKR, Settings, FlowControl_Off,, "&E3"
+HKR, Settings, FlowControl_Soft,, "&E5"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Modulation_BELL,, "B1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_CCITT_V23,, "$MB75 "
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR,, InactivityScale, 1, 3C,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 RELIABLE<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 RELIABLE<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 RELIABLE<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 RELIABLE<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 RELIABLE<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 RELIABLE<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 RELIABLE<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 RELIABLE COMPRESSED<cR><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 LAPM COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 LAPM COMPRESSED<cR><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+
+
+
+
+
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3C,00,00,00, FF,00,00,00, 00,00,00,00, 0F,00,00,00, F7,07,00,00, 00,96,00,00, 00,4B,00,00
+
+HKR, Init,1,, "AT<cr>"
+HKR, Init,2,, "AT &F<cr>"
+HKR, Init,3,, "AT E0 &D2 V1 \Q3 +M2 \N3<cr>"
+HKR, Init,4,, "AT S0=0 S7=50 +Q1<cr>"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, SpeedNegotiation_Off,, "+M0"
+HKR, Settings, SpeedNegotiation_On,, "+M2"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, InactivityTimeout,, "+S8=<#>"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_CCITT_V23,, "B0" ; No extra settings needed for V.23
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR,, InactivityScale, 1, 0A,00,00,00
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "\Q0"
+HKR, Fax, Class1FlowHW,, "\Q3"
+HKR, Fax, Class1FlowSW,, "\Q1"
+HKR, Fax, Class2FlowOff,, "\Q0"
+HKR, Fax, Class2FlowHW,, "\Q3"
+HKR, Fax, Class2FlowSW,, "\Q1"
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+
+[ModemCC.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 00,00,00,00, 0F,00,00,00, F7,06,00,00, 00,C2,01,00, 80,70,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 3,, "AT E0 V1 W1 S0=0 S7=50<cr>"
+HKR, Init, 4,, "AT &C1 &D2 \V1<cr>"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_CCITT_V23,, "B0 B2 "
+HKR, Settings, Pulse,, "P"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR,, InactivityScale, 1, 3C,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP 2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP 3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP 2,4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP 3,4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 2C,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, B0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, B0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, B0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, 00,00,00,00, C0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, 00,00,00,00, A0,41,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,4B,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75TX/1200RX<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75RX/1200TX<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER Transmit: 19200 Receive: 19200 V.34<cr><lf>",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 19200 Receive: 21600 V.34<cr><lf>",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 19200 Receive: 21600 V.34<cr><lf>",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 21600 Receive: 21600 V.34<cr><lf>",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 24000 Receive: 21600 V.34<cr><lf>",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 21400 Receive: 24000 V.34<cr><lf>",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 24000 Receive: 24000 V.34<cr><lf>",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 26400 Receive: 24000 V.34<cr><lf>",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 24000 Receive: 26400 V.34<cr><lf>",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 26400 Receive: 26400 V.34<cr><lf>",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 26400 Receive: 28800 V.34<cr><lf>",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 28800 Receive: 26400 V.34<cr><lf>",1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER Transmit: 28800 Receive: 28800 V.34<cr><lf>",1, 01, 00, 80,70,00,00, 00,00,00,00
+
+
+[MfgAddReg]
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>" , 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>" , 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>" , 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>" , 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>" , 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED NUMBER<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED NUMBER<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+
+
+
+
+
+
diff --git a/private/unimodem/inf/mdmetech.inx b/private/unimodem/inf/mdmetech.inx
new file mode 100644
index 000000000..74d485ea4
--- /dev/null
+++ b/private/unimodem/inf/mdmetech.inx
@@ -0,0 +1,415 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: E-Tech
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem6% = Modem6, UNIMODEM4C1D473A
+%Modem6% = Modem6, PCMCIA\E-TECH-C1414AX_0839
+%Modem5% = Modem5, UNIMODEM6CD27B0F
+
+%Modem5% = Modem5, UNIMODEM3E0C166B
+
+%Modem4% = Modem4, UNIMODEMAF7845E8
+
+%Modem3% = Modem3, MDMETECH_Modem3
+%Modem2% = Modem2, MDMETECH_Modem2
+%Modem1% = Modem1, MDMETECH_Modem1
+
+; Installation sections
+
+[Modem6]
+AddReg=All, MfgAddReg, Extra, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Extra, Modem5.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Extra, Modem4.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Extra, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+; AddReg sections
+
+[Modem6.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+HKR, Settings, InactivityTimeout,, "S36=<#>"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+
+Mfg = "E-Tech/Bullet Telecom"
+
+; Model strings
+
+Modem6="E-Tech C1414AX PCMCIA"
+Modem5="E-Tech Ufomate P1414MX"
+Modem4="E-Tech Bullet E288MX"
+Modem3="E-Tech Bullet E1414MX"
+Modem2="E-Tech E9696M"
+Modem1="E-Tech Ufomate P1496MX"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[Extra]
+HKR, Settings, FlowControl_Off,, "$F5"
+HKR, Settings, FlowControl_Hard,, "$F4"
+HKR, Settings, FlowControl_Soft,, "$F0"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E0"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, Compression_Off,, "$C0"
+HKR, Settings, SpeedNegotiation_Off,, "$M1"
+HKR, Settings, SpeedNegotiation_On,, "$M0"
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3C,00,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmexp.inx b/private/unimodem/inf/mdmexp.inx
new file mode 100644
index 000000000..8d3b87a22
--- /dev/null
+++ b/private/unimodem/inf/mdmexp.inx
@@ -0,0 +1,576 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: EXP and Angia
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%EXP%
+
+[ControlFlags]
+ExcludeFromSelect=PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-2682 ; Angia Netherlands + USA combo
+ExcludeFromSelect=PCMCIA\EXP-THINFAX_9624-24D9 ; EXP 9600/2400, EXP Basic
+
+[Manufacturer]
+%EXP% = EXP
+%ANGIA% = ANGIA
+%CreativeLabs% = CreativeLabs
+
+; Modem models
+
+[CreativeLabs]
+%Modem15% = Modem14, PCMCIA\INTELLIGENT-CREATIVE_LABS_MODEM_BLASTER_288-66EC
+%Modem15% = Modem14, UNIMODEM2AE184B5
+
+[ANGIA]
+%Modem14% = Modem14, PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-D5C4
+%Modem14% = Modem14, UNIMODEMA01C6D2D
+%Modem14% = Modem14, UNIMODEMBF68F0DA
+%Modem13% = Modem13, EXP_Modem13, PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-2682 ; Angia safejack terbo 19200 Data FAX
+%Modem13% = Modem13, UNIMODEM27391FB3 ; Angia safejack terbo 19200 Data FAX
+%Modem13% = Modem13, UNIMODEM8856B9C3 ; Angia safejack terbo 19200 Data FAX
+%Modem11% = Modem11, PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-2682 ; Angia Netherlands + USA combo
+%Modem10% = Modem10, EXP_Modem10, PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-2682 ; Angia 14.4 PCMCIA (PCM144) - USA
+; bugbug -- rank0 collision with mdmtosh.inf -- commented out until we resolv
+; %Modem10% = Modem10, UNIMODEM39888E6F ; Angia 14.4 PCMCIA (PCM144) - USA
+%Modem9% = Modem9, EXP_Modem9, PCMCIA\INTELLIGENT-ANGIA_FAX/MODEM-2682 ; Angia 14.4 PCMCIA (FAX-PCM2-NL) - Netherlands
+
+[EXP]
+%Modem12%= Modem2, PCMCIA\EXP-THINFAX_9624-24D9 ; ThinFax BASIC, 9600/2400
+%Modem8% = Modem8, EXP_Modem8, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; fax/data modem 1414CL PCMCIA
+%Modem8% = Modem8, EXP_Modem8, UNIMODEM858E1599 ; fax/data modem 1414CL PCMCIA
+%Modem7% = Modem7, PCMCIA\EXP-THINFAX_1414I-5671 ; fax/data modem 14.4i PCMCIA
+%Modem7% = Modem7, EXP_Modem7, UNIMODEM5C047344 ; fax/data modem 14.4i PCMCIA
+%Modem6% = Modem6, PCMCIA\EXP-THINFAX_288-D8A3 ; fax/data modem 28.8 PCMCIA
+%Modem6% = Modem6, UNIMODEM36048F4E ; fax/data modem 28.8 PCMCIA
+%Modem5% = Modem5, PCMCIA\EXP-THINFAX_1414-5B67 ; fax/data modem 14400/14400 PCMCIA
+%Modem4% = Modem4, PCMCIA\EXP-THINFAX_9696-AB4A ; fax/data modem 9600/9600 PCMCIA
+%Modem3% = Modem3, EXP_Modem3, PCMCIA\EXP-THINFAX_9624-24D9 ; fax/data modem 9600/2400 PCMCIA
+%Modem2% = Modem2, EXP_Modem2, PCMCIA\EXP-THINFAX_9624-24D9 ; ThinFax BASIC FAX/DATA PCMCIA Modem
+%Modem1% = Modem1, EXP_Modem1
+
+; Installation sections
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, PCMCIA
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, PCMCIA
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, PCMCIA
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, PCMCIA
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, PCMCIA
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem14.AddReg] ; Angia safejack 28.8, V.34 - no cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 3,, "AT E0 V1 W2<cr>"
+HKR, Init, 4,, "AT &C1 &D2 \V1<cr>"
+HKR, Settings, Compression_On,, "%%C1"
+
+[Modem13.AddReg] ; Angia safejack terbo 19200 Data FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 3,, "AT E0 V1 &C1 &D2 W2 \V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, ErrorControl_Cellular,, "\N7 )M1 *H1 -K1 -Q1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 )M1 *H1 -K1 -Q1"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+
+[Modem11.AddReg] ; Angia Netherlands + USA combo PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 3,, "AT E0 V1 &C1 &D2 W2<cr>"
+
+[Modem10.AddReg] ; Angia 14.4 PCMCIA (PCM144) - USA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 3,, "AT E0 V1 &C1 &D2 W2<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem9.AddReg] ; Angia 14.4 PCMCIA (FAX-PCM2-NL) - Netherlands
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 3,, "AT E0 V1 &C1 &D2 W2<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, ErrorControl_Cellular,, "\N7 )M1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 )M1 *H1"
+
+[Modem8.AddReg] ; EXP 1414CL Fax-Data PCMCIA Modem - cirrus chipset
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 3,, "AT E0 V1 &C1 &D2 S0=0 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3 -J1"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem7.AddReg] ; EXP 144i Fax-Data PCMCIA Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 4,, "AT F0 &C1 &D2<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 -Q1 *H1 :E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 -Q1 *H1 :E0"
+
+[Modem6.AddReg] ; EXP 28.8 Fax-Data PCMCIA Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 4,, "AT F0 &C1 &D2<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 -Q1 *H1 :E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 -Q1 *H1 :E0"
+
+[Modem5.AddReg] ; EXP 14400-14400 Fax-Data PCMCIA Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 4,, "AT F0 N1 &C1 &D2 \N3<cr>"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR, Init, 4,, "AT F0 N1 &C1 &D2 \N3<cr>"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 4,, "AT F0 N1 &C1 &D2 \N3<cr>"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 3,, "AT E0 V1 <cr>"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 60,09,00,00, 60,09,00,00
+
+; Strings
+
+[Strings]
+
+ANGIA ="Angia"
+Modem14="Angia Safejack 28.8, V.34 PCMCIA"
+Modem13="Angia Safejack Terbo 19200 Data Fax"
+Modem11="Angia PCMCIA Modem" ;USA + Netherlands combo
+Modem10="Angia 14.4 PCMCIA (PCM144)" ;USA
+Modem9 ="Angia 14.4 PCMCIA (FAX-PCM2-NL)" ;Netherlands
+
+EXP ="EXP"
+Modem12="EXP 2400 Data 9600 Fax PCMCIA Modem"
+Modem8="EXP 1414CL Fax-Data PCMCIA Modem"
+Modem7="EXP 144i Fax-Data PCMCIA Modem"
+Modem6="EXP 28.8i Fax-Data PCMCIA Modem"
+Modem5="EXP 14400-14400 Fax-Data PCMCIA Modem"
+Modem4="EXP 9600-9600 Fax-Data PCMCIA Modem"
+Modem3="EXP 9600-2400 Fax-Data PCMCIA Modem"
+Modem2="EXP ThinFax Basic Fax-Data PCMCIA Modem"
+Modem1="EXP Basic-LX PCMCIA Modem"
+
+CreativeLabs = "Creative Labs"
+Modem15 = "Creative Labs Modem Blaster 28.8 PCMCIA"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 W2 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+; CONNECT xxxx (DTE!)
+
+HKR, Responses, "9<cr>", 1, 02, 00, 00,00,00,00, 58,02,00,00 ; CONNECT 9600 (for 600)
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00 ; CONNECT 4800
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00 ; CONNECT 9600
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00 ; CONNECT 7200
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00 ; CONNECT 12000
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00 ; CONNECT 14400
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00 ; CONNECT 19200
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00 ; CONNECT 38400
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00 ; CONNECT 57600
+HKR, Responses, "19<cr>", 1, 02, 00, 00,c2,01,00, 00,00,00,00 ; Not in manual
+
+; Misc. CONNECT xxxx result codes (DCE)
+
+HKR, Responses, "22<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00 ; CONNECT 75TX/1200RX
+HKR, Responses, "23<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00 ; CONNECT 1200TX/75RX
+
+HKR, Responses, "24<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; Not in manual
+HKR, Responses, "32<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; Not in manual
+HKR, Responses, "33<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; FAX
+HKR, Responses, "35<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; DATA
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+
+; CARRIER xxxx result codes (requires X4)
+
+HKR, Responses, "44<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00 ; CARRIER 1200/75
+HKR, Responses, "45<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00 ; CARRIER 75/100
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00 ; CARRIER 1200
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400
+HKR, Responses, "48<cr>", 1, 01, 00, c0,12,00,00, 00,00,00,00 ; CARRIER 4800
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1c,00,00, 00,00,00,00 ; CARRIER 7200
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600
+HKR, Responses, "51<cr>", 1, 01, 00, e0,2e,00,00, 00,00,00,00 ; CARRIER 12000
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400
+
+; COMPRESSSION result codes (requires X4)
+
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42bis
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE
+
+; PROTOCOL result codes (requires X4)
+
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL-LAPM V.42 BIS<cr><lf>",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL-LAPM V.42 BIS<cr><lf>",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/NONE<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/NONE<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/NONE<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/NONE<cr><lf>",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/NONE<cr><lf>",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NONE<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NONE<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NONE<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NONE<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NONE<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NONE<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NONE<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NONE<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NONE<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NONE<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NONE<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NONE<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NONE<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/NONE<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/NONE<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/NONE<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmeyp.inx b/private/unimodem/inf/mdmeyp.inx
new file mode 100644
index 000000000..69aa9b110
--- /dev/null
+++ b/private/unimodem/inf/mdmeyp.inx
@@ -0,0 +1,460 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: E.Y.P. Telecomunicación.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem9% = Modem9, EYP_Modem9 ; BV32B
+%Modem8% = Modem8, EYP_Modem8 ; PCVOX
+%Modem7% = Modem7, EYP_Modem7 ; PCMNP
+%Modem6% = Modem6, EYP_Modem6 ; MVMNP
+%Modem5% = Modem5, EYP_Modem5 ; PCMUL
+%Modem4% = Modem4, EYP_Modem4 ; MVMUL
+%Modem3% = Modem3, EYP_Modem3 ; MV32 Plus
+%Modem2% = Modem2, UNIMODEM07474619 ; microV32B
+%Modem1% = Modem1, UNIMODEM3B5036FF ; MV32B#
+
+; Installation sections
+
+[Modem9] ; BV32B
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8] ; PCVOX
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem7] ; PCMNP
+AddReg=All, MfgAddReg, Modem7.AddReg, Internal
+
+[Modem6] ; MVMNP
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5] ; PCMUL
+AddReg=All, MfgAddReg, Modem5.AddReg, Internal
+
+[Modem4] ; MVMUL
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3] ; MV32 Plus
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; microV32B
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; MV32B#
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem9.AddReg] ; BV32B
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F V1 S0=0 S95=47<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, CallSetupFailTimer,, "S7=40"
+
+[Modem8.AddReg] ; PCVOX
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, CallSetupFailTimer,, "S7=30"
+
+[Modem7.AddReg] ; PCMNP
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 73,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S46=136S48=128"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "&Q5S36=7S46=138S48=7"
+HKR, Settings, Compression_Off,, "&Q6"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Blind_On,, "X0"
+HKR, Settings, CallSetupFailTimer,, "S7=30"
+
+[Modem6.AddReg] ; MVMNP
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,, "&K5S36=7S46=136S48=138"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, Compression_On,, "&Q5S36=7S46=138S48=7"
+HKR, Settings, Compression_Off,, "&Q6"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, CallSetupFailTimer,, "S7=30"
+
+[Modem5.AddReg] ; PCMUL
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, CallSetupFailTimer,, "S7=30"
+
+[Modem4.AddReg] ; MVMUL
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 70,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem3.AddReg] ; MV32 Plus
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 03,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Settings, FlowControl_Soft,, "&K1"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, SpeedNegotiation_On,, "F0"
+HKR, Settings, Blind_On,, "X0"
+
+[Modem2.AddReg] ; microV32B
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 01,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, ErrorControl_Cellular,, ")M1"
+
+[Modem1.AddReg] ; MV32B#
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "E.Y.P. Telecomunicación."
+
+; Model strings
+
+Modem9="E.Y.P. BV32B"
+Modem8="E.Y.P. PCVOX"
+Modem7="E.Y.P. PCMNP"
+Modem6="E.Y.P. MVMNP"
+Modem5="E.Y.P. PCMUL"
+Modem4="E.Y.P. MVMUL"
+Modem3="E.Y.P. MV32 Plus"
+Modem2="E.Y.P. microV32B"
+Modem1="E.Y.P. MV32B#"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 S0=0 S95=47<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
diff --git a/private/unimodem/inf/mdmgal.inx b/private/unimodem/inf/mdmgal.inx
new file mode 100644
index 000000000..3f0bdb7cc
--- /dev/null
+++ b/private/unimodem/inf/mdmgal.inx
@@ -0,0 +1,380 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Galaxy Networks
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM4F144745
+
+[Models]
+%Modem3% = Modem3, UNIMODEM4F144745 ; Generic Galaxy
+%Modem2% = Modem2, Galaxy_Modem2, UNIMODEM4F144745
+%Modem1% = Modem1, Galaxy_Modem1, UNIMODEM4F144745
+
+
+; Installation sections
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 80,25,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Galaxy"
+
+; Model strings
+
+Modem3="Galaxy UFO & Apollo"
+Modem2="Galaxy Apollo"
+Modem1="Galaxy UFO"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR, Init, 2,, "AT &F E0 V1 S0=0<cr>"
+HKR, Init, 3,, "ATW2\Q3 <cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<ff><cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<ff><cr><cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmgar.inx b/private/unimodem/inf/mdmgar.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmgar.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmgatew.inx b/private/unimodem/inf/mdmgatew.inx
new file mode 100644
index 000000000..1d71c6c9e
--- /dev/null
+++ b/private/unimodem/inf/mdmgatew.inx
@@ -0,0 +1,398 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Gateway 2000
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem7% = Modem7, UNIMODEMD4884CC1
+%Modem6% = Modem6, UNIMODEM4EC60D76 ;Telepath, version 1.5 firmware
+%Modem5% = Modem5, "PCMCIA\GATEWAY2000-CC3144-5F5F" ;PC14.4SR - MHZ CC3144
+%Modem5% = Modem5, "PCMCIA\GATEWAY2000-CC3144-2C32" ;PC14.4SR - MHZ CC3144
+%Modem5% = Modem5, GATEW_Modem5, UNIMODEMD3A140D7 ;PC14.4SR - MHZ CC3144
+%Modem4% = Modem4, "PCMCIA\GATEWAY2000-XJ1144-CA60" ;PC14.4SRXJ - MHZ XJ1144
+%Modem4% = Modem4, GATEW_Modem4, UNIMODEMD3A140D7 ;PC14.4SRXJ - MHZ XJ1144
+%Modem3% = Modem3, "PCMCIA\GATEWAY2000-CC324FM-8460" ;PC24/96SR PCMCIA - MHZ CC324FM
+%Modem3% = Modem3, GATEW_Modem3, UNIMODEM484C7614 ;PC24/96SR PCMCIA - MHZ CC324FM
+%Modem2% = Modem2, UNIMODEM4A73715E ;USR sportster 14.4 internal
+%Modem2% = Modem2, UNIMODEM6544B126 ;USR sportster 14.4 internal
+%Modem1% = Modem1, GATEW_Modem1, UNIMODEM9F2BBC58 ;Cardinal mb2650sr internal
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, INTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 Q0 V1 &B1 &C1 &D2 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&I0&R2"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Compression_On,, "&K1"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 Q0 V1 &C1 &D2 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 Q0 V1 &B1 &C1 &D2 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&I0&R2"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Compression_On,, "&K1"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+;Modem1 *must* turn blind dialing off or cannot handshake.
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,01,00,00, 00,c2,01,00, 60,09,00,00
+HKR, Init, 2,, "AT&FS0=0E0&C1&D2<cr>"
+
+[Strings]
+Mfg = "Gateway 2000"
+
+Modem7 ="Gateway 2000 Telepath II 28.8 Data Fax Voice"
+Modem6 ="Gateway 2000 Telepath 14400 Internal" ;Telepath, version 1.5 firmware
+Modem5 ="Gateway 2000 Telepath 14.4-14.4 PCMCIA" ;PC14.4SR - MHZ CC3144
+Modem4 ="Gateway 2000 Telepath 14.4-14.4 XJack PCMCIA" ;PC14.4SRXJ - MHZ XJ1144
+Modem3 ="Gateway 2000 2400-9600 PCMCIA" ;PC24/96SR PCMCIA - MHZ CC324FM
+Modem2 ="Gateway 2000 Telepath II 14400 Internal" ;USR sportster 14.4 int
+Modem1 ="Gateway 2000 2400-9600 Internal" ;Cardinal mb2650sr int
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 W1 B1 &C1 &D2 S0=0 S95=47<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAPM", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAPM", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAPM", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAPM", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAPM", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAPM", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAPM", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAPM", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAPM", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAPM", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmgen.inx b/private/unimodem/inf/mdmgen.inx
new file mode 100644
index 000000000..bcb6daf4c
--- /dev/null
+++ b/private/unimodem/inf/mdmgen.inx
@@ -0,0 +1,701 @@
+; MDMGEN.INF
+;
+; This is the INF file for modems supported using generic
+; command set information. Specific models are moved to
+; MDM*.INF when correct command set information is available.
+;
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=MDMGEN,UNIMODEM9F2BBC58,UNIMODEM8A085313,UNIMODEM901DD6E5
+ExcludeFromSelect=*PNPC100,*PNPC101,*PNPC102,*PNPC103,*PNPC104,*PNPC105
+ExcludeFromSelect=*PNPC106,*PNPC107,*PNPC108,*PNPC109,*PNPC10A,*PNPC10B
+ExcludeFromSelect=*PNPC10C,*PNPC10D,*PNPC10E,*PNPC10F,*PNPC200
+
+; --------------------------------------------------
+; Manufacturers
+
+[Manufacturer]
+%Generic% = Generic
+%MagicRam% = MagicRam
+%Exar% = Exar
+%Apex% = Apex
+%Intel% = Intel
+%SMART% = SMART
+%NewMedia% = NewMedia
+%GVC% = GVC
+%Boca% = Boca
+%Piiceon% = Piiceon
+
+%Rockwell% = Rockwell
+%IBM% = IBM
+
+; --------------------------------------------------
+; Driver sections
+
+[Generic]
+%Gen% = Gen, MDMGEN
+%Gen3% = Gen3, MDMGEN3
+%Gen12% = Gen12, MDMGEN12
+%Gen24% = Gen24, MDMGEN24
+%Gen96% = Gen96, MDMGEN96
+%Gen144% = Gen144, MDMGEN144
+%Gen192% = Gen192, MDMGEN192
+%Gen288% = Gen288, MDMGEN288
+%Gen2496I% = Gen24I, UNIMODEM9F2BBC58
+%PNPC100% = PNPC100, *PNPC100
+%PNPC101% = PNPC101, *PNPC101
+%PNPC102% = PNPC102, *PNPC102
+%PNPC103% = PNPC103, *PNPC103
+%PNPC104% = PNPC104, *PNPC104
+%PNPC105% = PNPC105, *PNPC105
+%PNPC106% = PNPC106, *PNPC106
+%PNPC107% = PNPC107, *PNPC107
+%PNPC108% = PNPC108, *PNPC108
+%PNPC109% = PNPC109, *PNPC109
+%PNPC10A% = PNPC10A, *PNPC10A
+%PNPC10B% = PNPC10B, *PNPC10B
+%PNPC10C% = PNPC10C, *PNPC10C
+%PNPC10D% = PNPC10D, *PNPC10D
+%PNPC10E% = PNPC10E, *PNPC10E
+%PNPC10F% = PNPC10F, *PNPC10F
+%PNPC200% = PNPC200, *PNPC200
+
+[MagicRam]
+%MagicRam1% = Gen96P, PCMCIA\FAX_MODEM_VOICE-CFMV-9624C-252D
+
+[Exar]
+%Exar1% = Gen96P, PCMCIA\RCS-XM-2496_Fax/Data_MODEM_CARD-8729
+
+[Apex]
+%Apex1% = Gen144P, GEN_Apex1, PCMCIA\RIPICAA-RC144ACL-08E5 ; Same as Rockwell2
+
+[Intel]
+%Intel1% = Gen24P, PCMCIA\INTEL-MODEM_2400+-BC95
+%Intel2% = Gen144P, GEN_Intel2, "PCMCIA\INTEL-PCMCIA_Faxmodem_14.4/14.4-121B"
+
+[SMART]
+%SMART1% = Gen144P, PCMCIA\SMART_MODULAR_TECHNOLOGIES-ST1414-79C9
+%SMART2% = Gen24P, PCMCIA\SMART_MODULAR_TECHNOLOGIES-ST9624-6F3C
+%SMART3% = Gen24P, PCMCIA\SMART_MODULAR_TECHNOLOGIES-ST9624E-F38E
+
+[NewMedia]
+%NewMedia1% = Gen144P, GEN_NewMedia1, PCMCIA\RIPICAA-RC144ACL-845A ; Same as Rockwell1
+%NewMedia1% = Gen144P, GEN_NewMedia1, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874
+
+[GVC]
+%GVC1% = Gen24NFC, UNIMODEM901DD6E5
+%GVC1% = Gen24, UNIMODEM8A085313
+
+[Boca]
+%Boca1% = Gen144P, PCMCIA\RIPICAA-RC144ACL-A0E5 ; Same as Rockwell1
+
+[Piiceon]
+%Piiceon1% = Gen144P, GEN_Piiceon1, PCMCIA\RIPICAA-RC144ACL-845A ; Same as Rockwell1
+
+[Rockwell]
+%Rockwell1% = Gen144P, PCMCIA\RIPICAA-RC144ACL-845A
+%Rockwell2% = Gen144P, PCMCIA\RIPICAA-RC144ACL-08E5
+
+[IBM]
+%IBM1% = Gen144P, "PCMCIA\IBM-PUSH/POP_MODEM(14.4K)-DD48"
+
+; --------------------------------------------------
+; Generic modem install sections
+
+[Gen]
+AddReg=All, GenericAddReg, GenReg, EXTERNAL
+
+[Gen3]
+AddReg=All, GenericAddReg, Gen3Reg, EXTERNAL
+
+[Gen12]
+AddReg=All, GenericAddReg, Gen12Reg, EXTERNAL
+
+[Gen24]
+AddReg=All, GenericAddReg, Gen24Reg, EXTERNAL
+
+[Gen24NFC]
+AddReg=All, GenericAddReg, Gen24NFCReg, EXTERNAL
+
+[Gen24I]
+AddReg=All, GenericAddReg, Gen24Reg, INTERNAL
+
+[Gen24P]
+AddReg=All, GenericAddReg, Gen24Reg, PCMCIA
+
+[Gen96]
+AddReg=All, GenericAddReg, Gen96Reg, EXTERNAL
+
+[Gen96I]
+AddReg=All, GenericAddReg, Gen96Reg, INTERNAL
+
+[Gen96P]
+AddReg=All, GenericAddReg, Gen96Reg, PCMCIA
+
+[Gen144]
+AddReg=All, GenericAddReg, Gen144Reg, EXTERNAL
+
+[Gen144I]
+AddReg=All, GenericAddReg, Gen144Reg, INTERNAL
+
+[Gen144P]
+AddReg=All, GenericAddReg, Gen144Reg, PCMCIA
+
+[Gen192]
+AddReg=All, GenericAddReg, Gen192Reg, EXTERNAL
+
+[Gen288]
+AddReg=All, GenericAddReg, Gen288Reg, EXTERNAL
+
+[PNPC100]
+AddReg=All, GenericAddReg, Gen96Reg, EXTERNAL
+
+[PNPC101]
+AddReg=All, GenericAddReg, Gen144Reg, EXTERNAL
+
+[PNPC102]
+AddReg=All, GenericAddReg, Gen288Reg, EXTERNAL
+
+[PNPC103]
+AddReg=All, GenericAddReg, GenAnyReg, EXTERNAL
+
+[PNPC104]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh96Reg, EXTERNAL
+
+[PNPC105]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh144Reg, EXTERNAL
+
+[PNPC106]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh288Reg, EXTERNAL
+
+[PNPC107]
+AddReg=All, GenericAddReg, EnhancedAddReg, EnhAnyReg, EXTERNAL
+
+[PNPC108]
+AddReg=All, GenericAddReg, Gen96Reg, INTERNAL
+
+[PNPC109]
+AddReg=All, GenericAddReg, Gen144Reg, INTERNAL
+
+[PNPC10A]
+AddReg=All, GenericAddReg, Gen288Reg, INTERNAL
+
+[PNPC10B]
+AddReg=All, GenericAddReg, GenAnyReg, INTERNAL
+
+[PNPC10C]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh96Reg, INTERNAL
+
+[PNPC10D]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh144Reg, INTERNAL
+
+[PNPC10E]
+AddReg=All, GenericAddReg, EnhancedAddReg, Enh288Reg, INTERNAL
+
+[PNPC10F]
+AddReg=All, GenericAddReg, EnhancedAddReg, EnhAnyReg, INTERNAL
+
+; Generic PCMCIA Device -- specified as the compatible id for unknown pcmcia
+; modems.
+[PNPC200]
+;PCMCIA_GEN overrides the GenReg behavior of assuming speeds >= 38400
+; are DTE speeds -- this doesn't work with the Megahertz xj4288
+; and cc4288 pcmcia modems, which mystifyingly return connect 23400
+; Note also that GenReg doesn't specify a DCB, so there is no uppper bound on
+; post speed and in practice 115K is used.
+AddReg=All, GenericAddReg, GenReg, PCMCIA, PCMCIA_GEN
+
+; --------------------------------------------------
+; Common AddReg sections
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[EnhancedAddReg]
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+
+[GenericAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "ATE0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+
+
+
+; DTE/DCE speeds will not be exact for generic modems because we will
+; treat CONNECT ### as a DCE speed when some modems will report it as DTE.
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA_GEN] ; custom override responses, generic pcmcia modems
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+; --------------------------------------------------
+; Model AddReg sections
+
+[GenReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,c2,01,00, 00,c2,01,00
+
+[Gen3Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 2c,01,00,00, 2c,01,00,00
+HKR,, DCB, 1, 1C,00,00,00, 2C,01,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen12Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, b0,04,00,00, b0,04,00,00
+HKR,, DCB, 1, 1C,00,00,00, B0,04,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen24Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 80,25,00,00, 60,09,00,00
+HKR,, DCB, 1, 1C,00,00,00, 60,09,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen24NFCReg] ; No Flow Control
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 80,25,00,00, 60,09,00,00
+HKR,, DCB, 1, 1C,00,00,00, 60,09,00,00, 11,00,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen96Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,96,00,00, 80,25,00,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen144Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen192Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen288Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[GenAnyReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,01,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh96Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 10,03,00,00, 00,96,00,00, 80,25,00,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh144Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 10,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh288Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 10,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[EnhAnyReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 10,03,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+; --------------------------------------------------
+[Strings]
+MS = "Microsoft"
+
+Generic = "(Standard Modem Types)"
+Gen = "Standard Modem"
+Gen3 = "Standard 300 bps Modem"
+Gen12 = "Standard 1200 bps Modem"
+Gen24 = "Standard 2400 bps Modem"
+Gen96 = "Standard 9600 bps Modem"
+Gen144 = "Standard 14400 bps Modem"
+Gen192 = "Standard 19200 bps Modem"
+Gen288 = "Standard 28800 bps Modem"
+Gen2496I = "2400 Data, 9600 Fax Modem"
+PNPC100 = "Standard 9600 bps Modem"
+PNPC101 = "Standard 14400 bps Modem"
+PNPC102 = "Standard 28800 bps Modem"
+PNPC103 = "Standard Modem"
+PNPC104 = "Standard 9600 bps Modem"
+PNPC105 = "Standard 14400 bps Modem"
+PNPC106 = "Standard 28800 bps Modem"
+PNPC107 = "Standard Modem"
+PNPC108 = "Standard 9600 bps Modem"
+PNPC109 = "Standard 14400 bps Modem"
+PNPC10A = "Standard 28800 bps Modem"
+PNPC10B = "Standard Modem"
+PNPC10C = "Standard 9600 bps Modem"
+PNPC10D = "Standard 14400 bps Modem"
+PNPC10E = "Standard 28800 bps Modem"
+PNPC10F = "Standard Modem"
+PNPC200 = "Standard PCMCIA Card Modem"
+
+MagicRam = "Magic Ram"
+MagicRam1 = "Magic Ram Mercury 9624 Voice-Fax"
+
+Exar = "Exar"
+Exar1 = "Exar ROHM Card 24-96 Data-Fax"
+
+Apex = "Apex Data Inc."
+Apex1 = "Apex Data-Fax PCR-1414"
+
+Intel = "Intel"
+Intel1 = "Intel 2400 PCMCIA"
+Intel2 = "Intel Faxmodem 14.4 PCMCIA"
+
+SMART = "SMART Modular Technologies"
+SMART1 = "SMART Modular Tech ST 1414 PCMCIA"
+SMART2 = "SMART Modular Tech ST 9624 PCMCIA"
+SMART3 = "SMART Modular Tech ST 9624E PCMCIA"
+
+NewMedia = "New Media Corporation"
+NewMedia1 = "New Media 14.4 DataFax"
+
+GVC = "GVC"
+GVC1 = "2400 bps Modem"
+
+Boca = "Boca Research"
+Boca1 = "Bocamodem 14.4kbps V.32bis Data-Fax"
+
+Piiceon = "Piiceon"
+Piiceon1 = "Piiceon 14.4 Data 14.4 Fax"
+
+Rockwell = "Rockwell"
+Rockwell1 = "14400 bps PCMCIA Data-Fax Modem"
+Rockwell2 = "14400 bps PCMCIA Data-Fax Modem"
+
+IBM = "IBM"
+IBM1 = "IBM Push-Pop 14.4 Data FAX PCMCIA"
diff --git a/private/unimodem/inf/mdmgv.inx b/private/unimodem/inf/mdmgv.inx
new file mode 100644
index 000000000..24f3eefa6
--- /dev/null
+++ b/private/unimodem/inf/mdmgv.inx
@@ -0,0 +1,462 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Global Village Communication
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem2% = Modem2, UNIMODEM28F89CC7 ; TelePort Platinum
+%Modem1% = Modem1, PCMCIA\GLOBAL_VILLAGE_COMMUNICATION__INC.-POWERPORT_GOLD-8422 ; PowerPort Gold PC Card
+%Modem1% = Modem1, UNIMODEM40CE44A0 ; PowerPort Gold PC Card
+
+[Modem2] ; TelePort Platinum
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; PowerPort Gold PC Card
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+[Modem2.AddReg] ; TelePort Platinum
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 80,70,00,00
+
+[Modem1.AddReg] ; PowerPort Gold PC Card
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 40,38,00,00
+
+[Strings]
+Mfg = "Global Village Communication"
+Modem2 = "Global Village TelePort Platinum"
+Modem1 = "Global Village PowerPort Gold PC Card"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00 ; 10 seconds
+HKR, Init, 2,, "AT &F1 E0 V1 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F1<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/NOR<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NOR<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NOR<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NOR<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NOR<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NOR<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NOR<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NOR<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NOR<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NOR<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NOR<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NOR<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NOR<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NOR<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NOR<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NOR<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-V.42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-V.42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-V.42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-V.42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-V.42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-V.42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-V.42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-V.42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-V.42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-V.42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-V.42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-V.42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-V.42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-V.42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-V.42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-V.42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-V.42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmgvc.inx b/private/unimodem/inf/mdmgvc.inx
new file mode 100644
index 000000000..72eaf0e3b
--- /dev/null
+++ b/private/unimodem/inf/mdmgvc.inx
@@ -0,0 +1,973 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturers: GVC, Packard Bell, IBM, Turbomodem, Compaq, Eiger
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM8FC45DA6
+ExcludeFromSelect=UNIMODEMD6E032DF ; GVC+Turbomodem combo
+ExcludeFromSelect=UNIMODEM7C37DAC5 ; GVC+Turbomodem combo
+ExcludeFromSelect=UNIMODEMD209269F ; IBM+Viva modem combo
+ExcludeFromSelect=UNIMODEM7EBF3F36 ; Packard Bell+GVC
+ExcludeFromSelect=UNIMODEMC1E06F72 ; Maxtech, GVC
+ExcludeFromSelect=UNIMODEMEB2448CD ; Maxtech, Acer
+ExcludeFromSelect=UNIMODEMDE96F803 ; Smart, GVC
+ExcludeFromSelect=PCMCIA\14.4/14.4_DATA/FAX_MODEM-001-113D ; Eiger, IBM
+
+[Manufacturer]
+%GVC% = GVC
+%PB% = PB
+%IBM% = IBM
+%Turbomodem% = Turbomodem
+%Maxtech% = Maxtech
+%Eiger% = Eiger
+
+; Modem models
+
+[GVC]
+%Modem38% = Modem38, UNIMODEM4CB07362
+%Modem37% = Modem37, UNIMODEM64344979
+%Modem32% = Modem32, GVC_Modem32, UNIMODEM24FFB24B ; FM-9648(Fax Modem 9648) External
+%Modem20% = Modem20, GVC_Modem20, UNIMODEM7EBF3F36 ; GVC F-1114HV/R2 Internal
+%Modem7% = Modem7, UNIMODEM8FC45DA6 ; Generic name
+%Modem7a% = Modem7, UNIMODEM162E4132 ; FM-144VBIS/R
+%Modem7a% = Modem7, GVC_Modem7a, UNIMODEM8FC45DA6 ; FM-144HVBIS/R1
+%Modem7a% = Modem7, GVC_Modem7a, UNIMODEM7C37DAC5 ; FM-144VBIS/R(Fax 14400 V.42bis/MNP5) External
+%Modem7a% = Modem7, UNIMODEM9208DC74 ; GVC 14.4 Data Fax
+%Modem7a% = Modem9, GVC_Modem7a, UNIMODEMD6E032DF ; GVC 14.4 Data Fax
+%Modem6% = Modem6, UNIMODEMCE46DD7D ; FM-9696(FaxModem 9696) External
+%Modem5% = Modem5, GVC_Modem5, UNIMODEM901DD6E5 ; FM-9648(Fax Modem 9648) External
+%Modem4% = Modem4, GVC_Modem4, UNIMODEM8A085313 ; SM-24(Super Modem 2400) External
+%Modem3% = Modem3, PCMCIA\INTELLIGENT-MODEM-C15D ; FM144/144V(P) PCMCIA
+%Modem3% = Modem3, GVC_Modem3, UNIMODEM5C047344 ; FM144/144V(P) PCMCIA
+%Modem3a% = Modem3, UNIMODEMDE96F803 ; combo gvc and smart
+%Modem3% = Modem3, GVC_Modem3, UNIMODEMDE96F803 ; FM144/144V(P) PCMCIA
+%Modem2% = Modem2, PCMCIA\INTELLIGENT-MODEM-DAF0 ; PFM-964824(Faxmodem) PCMCIA
+%Modem2% = Modem2, PCMCIA\INTELLIGENT-MODEM-4AF2 ; PFM-964824(Faxmodem) PCMCIA
+%Modem1% = Modem1, GVC_Modem1, UNIMODEMC1E06F72 ; F-1128V/R6(28800 Fax Modem) External
+
+[PB]
+%Modem8% = Modem8, UNIMODEM3F5F15FA ; PB-144HV/R6
+%Modem18% = Modem18, GVC_Modem18, UNIMODEME466C599 ; 144AM(SP)
+%Modem21% = Modem21, UNIMODEM184DD74A ; 24DBF internal modem
+%Modem25% = Modem20, GVC_Modem25, UNIMODEM7EBF3F36 ; Packard Bell F-1114HV/R2 Internal
+%Modem26% = Modem20, UNIMODEM7EBF3F36 ; Packard Bell+GVC
+
+[IBM]
+%Modem31% = Modem31, UNIMODEMBA90396C ; IBM 7852 013 V.34 Data FAX
+%Modem30% = Modem30, UNIMODEM43221094 ; IBM 7852 010 V.34 Data FAX
+%Modem29% = Modem29, UNIMODEMD9DEC170 ; IBM ISA 28.8 V.34 modem with wakeup on ring
+%Modem28% = Modem28, GVC_Modem28, PCMCIA\14.4/14.4_DATA/FAX_MODEM-001-113D ; IBM 14.4 PCMCIA
+
+%Modem28% = Modem28, UNIMODEM49F994F9 ; IBM 14.4 PCMCIA
+%Modem19% = Modem19, BIOS\*IBM0033 ; IBM (butterfly) Thinkpad 701
+%Modem19% = Modem19, UNIMODEM2AECBE97 ; IBM (butterfly) Thinkpad 701
+%Modem19% = Modem19, UNIMODEM7627C87A ; IBM (butterfly) Thinkpad 701
+%Modem7b% = Modem7, GVC_Modem7b, UNIMODEM8FC45DA6 ; IBM PS-1 Internal
+%Modem13% = Modem13, GVC_Modem13, UNIMODEM9F2BBC58 ; IBM 24-96 Internal
+%Modem14% = Modem14, GVC_Modem14, UNIMODEMD209269F ; IBM SM-24HN-1
+%Modem15% = Modem14, UNIMODEMD209269F ; IBM+Viva modem combo
+%Modem16% = Modem13, GVC_Modem16, UNIMODEM9F2BBC58 ; IBM Aptiva F-942H-R1, 2400 bps internal
+%Modem17% = Modem17, UNIMODEMF7974461 ; IBM Aptiva 14.4 Data FAX Modem internal
+%Modem22% = Modem22, GVC_Modem22, UNIMODEMCFA485CD ; IBM Aptiva 510 - 14.4 Data FAX Modem internal
+%Modem23% = Modem23, UNIMODEMB265D456 ; IBM Aptiva 730 - Data FAX modem
+%Modem24% = Modem13, GVC_Modem24, UNIMODEM9F2BBC58 ; IBM Aptiva 310 - Data FAX modem
+
+[Turbomodem]
+%Modem9% = Modem9, GVC_Modem9, UNIMODEMD6E032DF ; Turbomodem 14.4, internal
+%Modem10% = Modem9, UNIMODEMD6E032DF ; Combo, Turbomodem+GVC, internal
+%Modem11% = Modem7, GVC_Modem11, UNIMODEM7C37DAC5 ; Turbomodem Plus External
+%Modem12% = Modem7, UNIMODEM7C37DAC5 ; Combo, Turbomodem+GVC, external
+
+[Maxtech]
+%Maxtech1% = Modem1, GVC_Maxtech1, UNIMODEMC1E06F72
+%Maxtech2% = Modem1, UNIMODEMC1E06F72
+%Maxtech3% = Modem33, GVC_Maxtech3, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874
+%Maxtech3% = Modem33, GVC_Maxtech3, UNIMODEM858E1599
+%Maxtech4% = Modem34, GVC_Maxtech4, UNIMODEMEB2448CD
+%Maxtech5% = Modem34, UNIMODEMEB2448CD
+%Maxtech6% = Modem35, GVC_Maxtech6, UNIMODEM535147EF
+%Maxtech7% = Modem36, GVC_Maxtech7, UNIMODEM858E1599
+%Maxtech7% = Modem36, GVC_Maxtech7, UNIMODEM16E3BF9F
+
+[Eiger]
+%Eiger1% = Modem28, GVC_Eiger1, PCMCIA\14.4/14.4_DATA/FAX_MODEM-001-113D
+%Eiger1GEN% = Modem28, PCMCIA\14.4/14.4_DATA/FAX_MODEM-001-113D ; combo IBM and Eiger
+%Eiger1% = Modem28, GVC_Eiger1, UNIMODEM5C047344
+
+; Installation sections
+
+[Modem38]
+AddReg=All, MfgAddReg, Modem38.AddReg, EXTERNAL
+
+[Modem37]
+AddReg=All, MfgAddReg, Modem37.AddReg, EXTERNAL
+
+[Modem36] ; Maxtech XVM144i
+AddReg=All, MfgAddReg, CIRRUS_VOICE_ALL, Modem36.AddReg, INTERNAL
+
+[Modem35] ; Maxtech 144i (RPI), XM144i
+AddReg=All, MfgAddReg, Modem35.AddReg, INTERNAL
+
+[Modem34] ; Maxtech 28.8i
+AddReg=All, MfgAddReg, Modem34.AddReg, INTERNAL
+
+[Modem33] ; Maxtech 14.4 pcmcia
+AddReg=All, MfgAddReg, Modem33.AddReg, PCMCIA
+
+[Modem32] ; GVC GM9648E
+AddReg=All, MfgAddReg, Modem32.AddReg, EXTERNAL
+
+[Modem31] ; IBM 7852 013
+AddReg=All, MfgAddReg, Modem31.AddReg, EXTERNAL
+
+[Modem30] ; IBM 7852 010
+AddReg=All, MfgAddReg, Modem30.AddReg, EXTERNAL
+
+[Modem29] ; IBM ISA 28.8 V.34 modem with wakeup on ring
+AddReg=All, MfgAddReg, Modem29.AddReg, INTERNAL
+
+[Modem28] ; IBM 14.4 Data FAX PCMCIA with DAA
+AddReg=All, MfgAddReg, Modem28.AddReg, PCMCIA
+
+[Modem23] ; IBM Aptiva 730 Data FAX Modem
+AddReg=All, MfgAddReg, Modem23.AddReg, INTERNAL
+
+[Modem22] ; IBM Aptiva 510 Data FAX Modem
+AddReg=All, MfgAddReg, Modem22.AddReg, INTERNAL
+
+[Modem21] ; 24DBF internal modem
+AddReg=All, MfgAddReg, Modem21.AddReg, INTERNAL
+
+[Modem20] ; GVC F-1114HV/R2 Internal
+AddReg=All, MfgAddReg, Modem20.AddReg, INTERNAL
+
+[Modem19] ; IBM (butterfly) Thinkpad 701
+AddReg=All, MfgAddReg, Modem19.AddReg, Modem19_Voice.AddReg, INTERNAL
+
+[Modem18] ; Packard Bell 144AM(SP) Modem-Soundcard
+AddReg=All, MfgAddReg, Modem18.AddReg, INTERNAL
+
+[Modem17] ; IBM Aptiva 14.4 Data FAX Modem internal
+AddReg=All, MfgAddReg, Modem17.AddReg, INTERNAL
+
+[Modem14] ; IBM SM-24HN-1
+AddReg=All, MfgAddReg, Modem14.AddReg, INTERNAL
+
+[Modem13] ; IBM 24-96 Internal
+AddReg=All, MfgAddReg, Modem13.AddReg, INTERNAL
+
+[Modem9] ; Turbomodem and GVC 14.4 internal
+AddReg=All, MfgAddReg, Modem9.AddReg, INTERNAL
+
+[Modem8] ; PB-144HV/R6
+AddReg=All, MfgAddReg, Modem8.AddReg, INTERNAL
+
+[Modem7] ; GVC Fax 14400 V.42bis-MNP5
+AddReg=All, MfgAddReg, Modem7.AddReg, EXTERNAL
+
+[Modem6] ; FaxModem 9696
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; Fax Modem 9648
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4] ; GVC Super Modem 2400
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem3] ; FM144/144V(P)
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2] ; GVC Faxmodem PFM-964824
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1] ; 28800 Fax Modem
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+
+; AddReg sections
+
+[Modem38.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 80,25,00,00, 80,25,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 Q0 S0=0<cr>"
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+
+[Modem37.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem36.AddReg] ; Maxtech XVM144i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem35.AddReg] ; Maxtech 144i (RPI), XM144i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem34.AddReg] ; Maxtech 28.8i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V1 S0=0<cr>"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem33.AddReg] ; Maxtech 14.4 pcmcia
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem32.AddReg] ; GVC GM9648E
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Modem31.AddReg] ; IBM 7852 013, V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V1 W2<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem30.AddReg] ; IBM 7852 010, V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem29.AddReg] ; IBM ISA 28.8 V.34 modem with wakeup on ring
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem28.AddReg] ; IBM 14.4 Data FAX PCMCIA with DAA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem23.AddReg] ; IBM Aptiva 730 14.4 Data FAX Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem22.AddReg] ; IBM Aptiva 510 14.4 Data FAX Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Modem21.AddReg] ; 24DBF internal modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&F&C1&D2E0V1S95=47S0=0<cr>"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem20.AddReg] ; GVC F-1114HV/R2 Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem19.AddReg] ; IBM (butterfly) Thinkpad 701
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+
+HKR, Init, 2,, "AT&FE0V1&D2&C1\V2W1S0=0<cr>"
+
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00 ; 10 sec
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W1 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00 ; minutes
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem14.AddReg] ; IBM SM-24HN-1
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V1Q0&C1&D2<cr>"
+
+[Modem13.AddReg] ; IBM 24-96 Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&F&C1&D2E0V1<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Modem9.AddReg] ; Turbomodem and GVC 14.4 internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem8.AddReg] ; PB-144HV/R6
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem7.AddReg] ; GVC Fax 14400 V.42bis-MNP5
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem6.AddReg] ; FaxModem 9696
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+
+[Modem5.AddReg] ; GVC Fax Modem 9648 External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+
+[Modem4.AddReg] ; GVC Super Modem 2400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, DialSuffix,, ""
+HKR, Init, 2,, "AT&FS0=0E0V1Q0&C1&D2<cr>"
+
+[Modem3.AddReg] ; FM144/144V(P)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 &C1 &D2 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem2.AddReg] ; GVC Faxmodem PFM-964824
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,01,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+
+[Modem1.AddReg] ; 28800 Fax Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; User visible strings
+
+[Strings]
+MS = "Microsoft"
+Eiger = "Eiger Labs Inc."
+Eiger1 = "Eiger 14.4 Data Fax PCMCIA"
+Eiger1GEN = "14.4 Data Fax PCMCIA" ; combo IBM and Eiger
+GVC = "GVC"
+Modem38 ="GVC V.32 9600 Modem"
+Modem37 ="GVC Super Modem 9600"
+Modem32 ="GVC External Fax Modem GM9648E"
+Modem20 ="GVC 14.4 Data Fax GM144i, F-1114HV-R2"
+Modem7a="GVC 14.4 Data Fax GM144e, 14400 V.42bis-MNP5"
+Modem7 ="14400 Data Fax Modem"
+Modem6 ="GVC External Fax Modem 9696"
+Modem5 ="GVC External Fax Modem 9648"
+Modem4 ="GVC External Super Modem 2400"
+Modem3 ="GVC PCMCIA Faxmodem FM144-144V(P)"
+Modem3a ="14.4 Data Fax Modem PCMCIA" ; combo gvc and smart
+Modem2 ="GVC PCMCIA Faxmodem PFM-964824"
+Modem1 ="GVC External 28800 Fax Modem"
+
+IBM = "IBM"
+Modem31 ="IBM 7852 013, V.34 Data Fax"
+Modem30 ="IBM 7852 010, V.34 Data Fax"
+Modem29 ="IBM 28.8, V.34 Data Fax"
+Modem28 ="IBM 14.4 Data Fax with DAA PCMCIA"
+Modem26 ="14.4 Bps Data Fax Modem"
+Modem24 ="IBM Aptiva 310, 2400 Bps Data Fax"
+Modem23 ="IBM Aptiva 730, 14.4 Data Fax"
+Modem22 ="IBM Aptiva 510, 14.4 Data Fax Voice"
+Modem19 ="IBM Thinkpad 701 Internal Modem Voice"
+Modem17 ="IBM Aptiva 14.4 Data Fax Modem"
+Modem16 ="IBM Aptiva 2400-9600 Data Fax Modem"
+Modem15 ="2400 Bps Internal Modem"
+Modem14 ="IBM 2400, SM-24HN-1 Modem"
+Modem13 ="IBM 2400-9600 Data Fax Modem"
+Modem12 ="14400 Data Fax Modem"
+Modem7b="IBM PS-1 Internal Fax Modem"
+
+PB = "Packard Bell"
+Modem25 ="Packard Bell F-1114HV-R2 Data Fax"
+Modem21 ="Packard Bell 24DBF Data Fax Modem"
+Modem18 ="Packard Bell 14.4AM(SP) Modem-Soundcard"
+Modem8 ="Packard Bell F-114 Modem Fax"
+
+Turbomodem = "Turbomodem"
+Modem11 ="Turbomodem Plus FM-144VR-1"
+Modem10 ="14400 Data Fax Modem"
+Modem9 ="Turbomodem 14.4 Data Fax Modem"
+
+Maxtech = "Maxtech"
+Maxtech1 = "Maxtech 28.8 Data Fax XM288E"
+Maxtech2 = "28.8 Data Fax Modem"
+Maxtech3 = "Maxtech 14.4 Data Fax PCMCIA, PCM144C"
+Maxtech4 = "Maxtech 28.8 Data Fax Internal, XM288I"
+Maxtech5 = "28.8 Data Fax Modem"
+Maxtech6 = "Maxtech 14.4 Data Fax (RPI), XM144I"
+Maxtech7 = "Maxtech 14.4 Data Fax Voice, XVM144I"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[Modem19_Voice.AddReg]
+HKR,, Enumerator,,serwave.vxd
+HKR,, VoiceProfile, 1, 25,12,00,00
+HKR,, ForwardDelay, 1, 88,13
+HKR,, SpeakerPhoneSpecs, 1, 89,00,00,00, 53,00,00,00, ff,00,00,00, 01,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#spk=1<cr>"
+HKR, SpeakerPhoneEnable, 2,, "ata<cr>"
+HKR, SpeakerPhoneEnable, 3,, "at#vdx=0<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#spk=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at#vgm=1<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at#vgm=128<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at#vgs=<Vol><cr>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, GenerateDigit, 1,, "atdt<Digit><cr>"
+HKR, LineSetPlayFormat, 1,, "None"
+HKR, LineSetPlayFormat, 2,, "NoResponse"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, StartPlay, 1,, "at#spk=0<cr>"
+HKR, StartPlay, 2,, "ata<cr>"
+HKR, StartPlay, 3,, "at+vgt=134<cr>"
+HKR, StartPlay, 4,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#spk=0<cr>"
+HKR, StartRecord, 2,, "ata<cr>"
+HKR, StartRecord, 3,, "at+vgr=134<cr>"
+HKR, StartRecord, 4,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 4,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 5,, "ats30=60<cr>"
+HKR, VoiceAnswer, 6,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 6,, "ats30=60<cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+
+[CIRRUS_VOICE_ALL] ; Cirrus voice
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile, 1,E3,10,20,00
+HKR,, HandsetCloseDelay, 1, 05,00,00,00
+HKR, StartPlay, 1,, "at#vpy<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrd<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h1A><cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10>Aat<cr>"
+HKR, OpenHandset, 1,, "at#vcl=1<cr>"
+HKR, OpenHandset, 2,, "at#vln=2<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR, LineSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#vcl=1<cr>"
+HKR, VoiceAnswer, 2,, "at#vln=1<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#vcl=1<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vln=17<cr>"
+HKR, VoiceDialNumberSetup, 3,, "atdt,;<cr>"
+HKR, GenerateDigit, 1,, "atdt<Digit>;<cr>"
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "&E0"
+HKR, Settings, SpeedNegotiation_On,, "&E1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf><cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/MNP COMPRESSED<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP COMPRESSED<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP COMPRESSED<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP COMPRESSED<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP COMPRESSED<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP COMPRESSED<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/VBIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/NONE<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NONE<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NONE<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NONE<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NONE<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NONE<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NONE<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NONE<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NONE<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NONE<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NONE<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NONE<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NONE<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NONE<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NONE<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/NONE<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/NONE<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-V.42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-V.42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-V.42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-V.42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-V.42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-V.42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-V.42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-V.42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-V.42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-V.42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-V.42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-V.42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-V.42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-V.42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-V.42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-V.42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-V.42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-LAPM<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-LAPM<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-LAPM<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-LAPM<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-LAPM<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300T/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200T/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400T/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800T/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200T/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600T/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000T/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400T/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800T/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200T/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600T/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000T/V42BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400T/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800T/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400T/V42BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600T/V42BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200T/V42BIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmgvcd.inx b/private/unimodem/inf/mdmgvcd.inx
new file mode 100644
index 000000000..2d27f4ced
--- /dev/null
+++ b/private/unimodem/inf/mdmgvcd.inx
@@ -0,0 +1,14 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: GVC Corporation (Europe)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+
+[Strings]
+Mfg = "Tornado"
diff --git a/private/unimodem/inf/mdmhaeu.inx b/private/unimodem/inf/mdmhaeu.inx
new file mode 100644
index 000000000..57835890c
--- /dev/null
+++ b/private/unimodem/inf/mdmhaeu.inx
@@ -0,0 +1,448 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Haeussler DK & NO
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM5BF77830, UNIMODEM2AC868CC
+
+[Models]
+%Modem12% = Modem9, UNIMODEM2AC868CC ; Generic 144ce + 144op
+%Modem11% = Modem4, UNIMODEM5BF77830 ; Generic 144i + 144Mca
+%Modem10% = Modem10, Haeus_Modem10, UNIMODEM2AC868CC
+%Modem9% = Modem9, Haeus_Modem9, UNIMODEM2AC868CC
+%Modem8% = Modem8, UNIMODEME3C73357
+%Modem7% = Modem7, UNIMODEMDFCCB899
+%Modem6% = Modem6, UNIMODEM58AEA69E
+%Modem6% = Modem6, PCMCIA\HAEUSSLER-H-288CC-F2C9
+%Modem5% = Modem5, Haeus_Modem5, UNIMODEM5BF77830
+%Modem4% = Modem4, Haeus_Modem4, UNIMODEM5BF77830
+%Modem3% = Modem3, UNIMODEM38C600ED
+%Modem3% = Modem3, PCMCIA\HAEUSSLER-H-144CC-311F
+%Modem2% = Modem2, UNIMODEM899AE922
+%Modem1% = Modem1, UNIMODEM4CEC9373
+
+
+; Installation sections
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, Internal
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, Internal
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Haeussler"
+
+; Model strings
+
+Modem12="Haeussler 144ce & 144op [DK,NO]"
+Modem11="Haeussler 144mca & 144i [DK,NO]"
+Modem10="Haeussler 144op [DK,NO]"
+Modem9="Haeussler 144ce [DK,NO]"
+Modem8="Haeussler 144e [DK,NO]"
+Modem7="Haeussler 288i [DK,NO]"
+Modem6="Haeussler 288cc [DK,NO]"
+Modem5="Haeussler 144i [DK,NO]"
+Modem4="Haeussler 144mca [DK,NO]"
+Modem3="Haeussler 144cc [DK,NO]"
+Modem2="Haeussler 288e [DK,NO]"
+Modem1="Haeussler 288e (voice) [DK,NO]"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0)M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmhaeus.inx b/private/unimodem/inf/mdmhaeus.inx
new file mode 100644
index 000000000..a7d12a0e5
--- /dev/null
+++ b/private/unimodem/inf/mdmhaeus.inx
@@ -0,0 +1,327 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: haeussler
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEMB1897FB5 ; H-144e
+%Modem2% = Modem2,UNIMODEM065375DC ; H-288e
+%Modem3% = Modem3, Haeus_Modem3, UNIMODEM37A490A3 ; H-288E-V.34
+
+
+; Installation sections
+
+[Modem1] ; H-144
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; H-288e
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; H-288E-V.34
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; H-144
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem2.AddReg] ; H-288e
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem3.AddReg] ; H-288E-V.34
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 4f,00,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Haeussler"
+
+; Model strings
+
+Modem1="Haeussler H-144"
+Modem2="Haeussler H-288e"
+Modem3="Haeussler H-288E-V.34"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F S95=249<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+
+
+
+
+
diff --git a/private/unimodem/inf/mdmhandy.inx b/private/unimodem/inf/mdmhandy.inx
new file mode 100644
index 000000000..5bc7a1ba8
--- /dev/null
+++ b/private/unimodem/inf/mdmhandy.inx
@@ -0,0 +1,388 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Hot Line Export AB
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=PCMCIA\HOTLINE-HANDY-F4E4
+
+[Models]
+%Modem5% = Modem3, PCMCIA\HOTLINE-HANDY-F4E4
+%Modem4% = Modem4, UNIMODEMB226CDCC
+%Modem4% = Modem4, PCMCIA\HOTLINE-HANDY-27CD
+%Modem3% = Modem3, UNIMODEME982D4D9
+%Modem3% = Modem3, Handy_Modem3, PCMCIA\HOTLINE-HANDY-F4E4
+%Modem1% = Modem1, UNIMODEME3D4A8A0
+%Modem1% = Modem1, Handy_Modem1, PCMCIA\HOTLINE-HANDY-F4E4
+
+; Installation sections
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 80,70,00,00, 00,96,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Hotline"
+
+; Model strings
+
+Modem5="Hotline Handy 144CC & 288CC"
+Modem4="Hotline Handy 9672CC"
+Modem3="Hotline Handy 144CC"
+Modem1="Hotline Handy V.34CC"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&FE0Q0V1W1&C1&S0S0=0S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "&K0"
+HKR, Fax, Class1FlowHW,, "&K3"
+HKR, Fax, Class1FlowSW,, "&K4"
+HKR, Fax, Class2FlowOff,, "&K0"
+HKR, Fax, Class2FlowHW,, "&K3"
+HKR, Fax, Class2FlowSW,, "&K4"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmhay2.inx b/private/unimodem/inf/mdmhay2.inx
new file mode 100644
index 000000000..fa26b49c0
--- /dev/null
+++ b/private/unimodem/inf/mdmhay2.inx
@@ -0,0 +1,516 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Hayes Optima 288 v.34 + Fax + Voice
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg%=Models
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\HAY0001
+
+[Modem1.NoResDup]
+UNIMODEM89638C47
+
+[Models]
+%Modem1% = Modem1, UNIMODEM89638C47
+%Modem1PNP% = Modem1, SERENUM\HAY0001
+
+[Modem1]
+AddReg=All, MfgAddReg, Rock_Voice, Modem1.AddReg, EXTERNAL
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,84,03,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00,0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Strings]
+Mfg = "Hayes"
+Modem1="Hayes Optima 288 V.34-V.FC + FAX + Voice"
+Modem1PNP="Hayes Optima 288 V.34-V.FC + FAX + Voice Plug & Play"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[Rock_Voice]
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile, 1,23,02,08,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "ATS101=1<cr>"
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=4<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CALR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING A<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING B<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING C<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=128"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0 B15"
+HKR, Settings, Modulation_Bell,, "B1 B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/NOR<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NOR<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NOR<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NOR<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NOR<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NOR<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NOR<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NOR<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NOR<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NOR<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NOR<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NOR<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NOR<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NOR<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NOR<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NOR<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-V.42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-V.42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-V.42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-V.42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-V.42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-V.42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-V.42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-V.42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-V.42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-V.42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-V.42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-V.42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-V.42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-V.42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-V.42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-V.42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-V.42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmhayes.inx b/private/unimodem/inf/mdmhayes.inx
new file mode 100644
index 000000000..989b9305b
--- /dev/null
+++ b/private/unimodem/inf/mdmhayes.inx
@@ -0,0 +1,801 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturers: Hayes, Megahertz, InteCom, Psion, Ventel
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM3CDAB153 ;M1820 = M1803, M1807, M1834
+ExcludeFromSelect=UNIMODEMC2F907F8 ;M1821 = M1804, M1808, M1815, M1818
+ExcludeFromSelect=UNIMODEMF56738B3 ;M1824 = M1813, M1817
+ExcludeFromSelect=UNIMODEM905D2725 ;M1833 = M1801, M1832
+ExcludeFromSelect=UNIMODEM84D3C9A1 ;M1812 = M1835, M1836
+ExcludeFromSelect=SERENUM\HAYF000 ;M1826, M1811
+ExcludeFromSelect=UNIMODEMD94B6060
+ExcludeFromSelect=UNIMODEMBABC57FF
+ExcludeFromSelect=SERENUM\HAYF0001
+ExcludeFromSelect.NT=PNPC032
+
+[M1811.NoResDup]
+UNIMODEM45B7D789,UNIMODEMD94B6060,UNIMODEM42330287,UNIMODEMFEC6AE4C,UNIMODEM26F8E7C2,UNIMODEM59894D5E,UNIMODEM2E873C6E
+
+[Manufacturer]
+%M18% = M18
+%M21% = M21
+%M27% = M27
+%M29% = M29
+%M43% = M43
+%M44% = M44
+
+[M18]
+%M1700% = M1700, UNIMODEM53CA2903
+%M1700% = M1700, UNIMODEM434EF5E7
+%M1701% = M1701, HAYES_M1701
+%M1702% = M1702, HAYES_M1702
+%M1800% = M1701, UNIMODEMF182FC17
+%M1801% = M1701, UNIMODEMFDC73ED1
+%M1801% = M1701, UNIMODEM6D87CB0A
+%M1801% = M1701, UNIMODEM634A6CD7
+%M1801% = M1701, UNIMODEM787F6E8E
+%M1801% = M1701, HAYES_M1801, UNIMODEM905D2725
+%M1802% = M1702, UNIMODEM1EC0EA6F
+%M1803% = M1803, HAYES_M1803
+%M1804% = M1804, HAYES_M1804
+%M1805% = M1805, UNIMODEM0BC7FC09
+%M1805% = M1805, UNIMODEMFB3276DB
+%M1805% = M1805, UNIMODEM03C8547C
+%M1805% = M1805, UNIMODEM76DBB0AA
+%M1805% = M1805, UNIMODEMED55C6EF
+%M1806% = M1806, UNIMODEMEF2A517E
+%M1806% = M1806, UNIMODEM296D71CF
+%M1806% = M1806, UNIMODEMEE9915F2
+%M1806% = M1806, UNIMODEMEDF0AD66
+%M1807% = M1803, HAYES_M1807
+%M1808% = M1804, HAYES_M1808, UNIMODEMBABC57FF
+%M1809% = M1809, HAYES_M1809
+%M1810% = M1810, HAYES_M1810, UNIMODEMBABC57FF
+%M1810% = M1840, UNIMODEMD67FD1EE
+%M1811% = M1811, UNIMODEM42330287
+%M1811% = M1811, UNIMODEM2E873C6E
+%M1811% = M1811, UNIMODEMFEC6AE4C
+%M1811PNP% = M1811, SERENUM\HAYF000
+%M1812% = M1812, UNIMODEM84D3C9A1 ; M1835, M1836
+%M1813% = M1813, HAYES_M1813
+%M1814% = M1809, HAYES_M1814
+%M1815% = M1810, HAYES_M1815
+%M1816% = M1812, HAYES_M1816
+%M1817% = M1813, HAYES_M1817
+%M1818% = M1804, HAYES_M1818
+%M1819% = M1846, UNIMODEM26F8E7C2
+%M1819% = M1847, UNIMODEMA5103083
+%M1820% = M1803, UNIMODEM3CDAB153 ; M1803, M1807, M1834
+%M1821% = M1804, UNIMODEMC2F907F8 ; M1804, M1808, M1815, M1818
+%M1822% = M1804, UNIMODEM35355BF6
+%M1823% = M1823, PCMCIA\HAYES-SMO_144/144-CFED
+%M1823% = M1823, PCMCIA\HAYES-SMO_144/144-CA80
+%M1823% = M1823, UNIMODEM848E479C
+%M1823% = M1823, UNIMODEM6D0D9291
+%M1824% = M1813, UNIMODEMF56738B3 ; M1813, M1817
+%M1825% = M1825, UNIMODEM4BF7D584
+%M1825% = M1825, UNIMODEMF0CA77EC
+%M1826% = M1811, HAYES_M1826, UNIMODEMD94B6060
+%M1826% = M1811, UNIMODEM45B7D789
+%M1827% = M1827, PCMCIA\HAYES-SMO24/96-2B98
+%M1828% = M1828, UNIMODEM105DA558
+%M1829% = M1829, UNIMODEMEC44F86C
+%M1830% = M1830, UNIMODEME75A5936
+%M1831% = M1831, PCMCIA\HAYES-OPTIMA_288_+_FAX_FOR_PCMCIA_WITH_EZ-4FA5
+%M1831% = M1831, UNIMODEM2981D201
+%M1832% = M1832, HAYES_M1832, UNIMODEM905D2725
+%M1833% = M1701, UNIMODEM905D2725
+%M1834% = M1803, HAYES_M1834, UNIMODEM3CDAB153
+%M1834% = M1803, UNIMODEMC707F94A
+%M1835% = M1812, HAYES_M1835, UNIMODEM84D3C9A1
+%M1836% = M1812, HAYES_M1836, UNIMODEM84D3C9A1
+%M1837% = M1837, HAYES_M1837, UNIMODEMF17C76B0
+%M1838% = M1846, UNIMODEM59894D5E
+%M1838% = M1846, UNIMODEM35436654
+%M1839% = M1811, HAYES_M1839
+%M1840% = M1811, HAYES_M1840, UNIMODEMD94B6060
+%M1840% = M1811, UNIMODEM68625726
+%M1841% = M1811, UNIMODEMD94B6060
+%M1842% = M1804, UNIMODEMBABC57FF
+%M1843% = M1823, PCMICA\HAYES-OPTIMA_144_+_FAX_FOR_PCMCIA_WITH_EZ-C2CD
+%M1844% = M1823, PCMICA\HAYES-OPTIMA_144_+_FAX_FOR_PCMICA-564B
+%M1845% = M1845, HAYES_M1845, UNIMODEM733C4E29
+%M1848PNP% = M1811, SERENUM\HAYF0001
+%M1848% = M1811, HAYES_M1848
+
+[M21]
+%M2100% = M2100, UNIMODEM8457DDE8
+%M2101% = M2100, MEGAHERTZ_M2101
+%M2102% = M2100, MEGAHERTZ_M2102
+%M2103% = M2100, MEGAHERTZ_M2103
+%M2104% = M2100, MEGAHERTZ_M2104
+%M2105% = M2105, MEGAHERTZ_M2105
+%M2106% = M2105, UNIMODEMBEFE2517
+%M2107% = M2105, MEGAHERTZ_M2107
+%M2108% = M2105, MEGAHERTZ_M2108
+%M2109% = M2105, MEGAHERTZ_M2109
+%M2114% = M2112, MEGAHERTZ_M2114
+%M2116% = M2116, MEGAHERTZ_M2116
+%M2119% = M2119, MEGAHERTZ_M2119
+
+[M27]
+%M2700% = M2700, PNPC031
+%M2701% = M2701, PNPC032
+
+[M29]
+%M2900% = M2900, UNIMODEMECA1A04A
+%M2900% = M2900, UNIMODEM91C6BD5C
+
+[M43]
+%M4300% = M4300, PCMCIA\PSION_DACOM-GOLD_CARD_PCMCIA_MODEM-AC05
+
+[M44]
+%M4400% = M4400, VENTEL_M4400
+%M4401% = M4401, UNIMODEME12FFF74
+%M4402% = M4402, VENTEL_M4402
+%M4403% = M4402, VENTEL_M4403
+
+[M1700]
+AddReg=All, Common, M1700Reg, EXTERNAL
+[M1701]
+AddReg=All, Common, M1701Reg, EXTERNAL
+[M1702]
+AddReg=All, Common, M1702Reg, EXTERNAL
+[M1803]
+AddReg=All, Common, M1803Reg, EXTERNAL
+[M1804]
+AddReg=All, Common, M1804Reg, EXTERNAL
+[M1805]
+AddReg=All, Common, M1805Reg, EXTERNAL
+[M1806]
+AddReg=All, Common, M1806Reg, 19200, EXTERNAL
+[M1809]
+AddReg=All, Common, M1803Reg, INTERNAL
+[M1810]
+AddReg=All, Common, M1804Reg, INTERNAL
+[M1811]
+AddReg=All, Common, M1811Reg, EXTERNAL
+[M1812]
+AddReg=All, Common, M1812Reg, EXTERNAL
+[M1813]
+AddReg=All, Common, M1812Reg, INTERNAL
+[M1823]
+AddReg=All, Common, M1823Reg, PCMCIA
+[M1825]
+AddReg=All, Common, M1825Reg, EXTERNAL
+[M1827]
+AddReg=All, Common, M1827Reg, PCMCIA
+[M1828]
+AddReg=All, Common, M1828Reg, EXTERNAL
+[M1829]
+AddReg=All, Common, M1811Reg, INTERNAL
+[M1830]
+AddReg=All, Common, M1700Reg, INTERNAL
+[M1831]
+AddReg=All, Common, M1831Reg, PCMCIA
+[M1832]
+AddReg=All, Common, M1832Reg, EXTERNAL
+[M1837]
+AddReg=All, Common, M1837Reg, EXTERNAL
+[M1840]
+AddReg=All, Common, M1823Reg, EXTERNAL
+[M1845]
+AddReg=All, Common, M1845Reg, INTERNAL
+[M1846]
+AddReg=All, Common, M1846Reg, EXTERNAL
+[M1847]
+AddReg=All, Common, M1847Reg, EXTERNAL
+[M2100]
+AddReg=All, Common, M2100Reg, INTERNAL
+[M2105]
+AddReg=All, Common, M2105Reg, INTERNAL
+[M2112]
+AddReg=All, Common, M2112Reg, INTERNAL
+[M2116]
+AddReg=All, Common, M2116Reg, INTERNAL
+[M2119]
+AddReg=All, Common, M2119Reg, INTERNAL
+[M2700]
+AddReg=All, M2700Reg, 19200, SERIAL
+[M2701]
+AddReg=All, M2700Reg, PARALLEL
+[M2900]
+AddReg=All, Common, M2900Reg, 9600, EXTERNAL
+[M4300]
+AddReg=All, Common, M4300Reg, PCMCIA
+[M4400]
+AddReg=All, Common, M4400Reg, INTERNAL
+[M4401]
+AddReg=All, Common, M4401Reg, INTERNAL
+[M4402]
+AddReg=All, Common, M4402Reg, EXTERNAL
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+; DeviceTypes
+[SERIAL]
+HKR,, DeviceType, 1, 00
+
+[PARALLEL]
+HKR,, DeviceType, 1, 04
+HKR,,Override,,Paralink.vxd
+HKR,, DCB, 1, 1C,00,00,00, 00,00,06,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[Common]
+; Hayes standard init/monitor/answer mechanisms. Override if different for a specific modem/manufacture
+HKR, Init, 1,, "AT<cr>" ; do an "AT" to get autobaud correct (start other init strings with 2)
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>" ; slam in a reset before closing
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+; These are the Hayes responses.
+; Differences for non-Hayes modems should be addressed in the specific modem/manufacturer sections
+; | State
+; | Options (Compression, Error-Correction, Cellular)
+; | DCE Rate
+; | DTE Rate
+; Command Response and Call Progress Monitoring
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800
+HKR, Responses, "16<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; TIMEOUT
+HKR, Responses, "17<cr>", 1, 02, 00, C0,DA,00,00, 00,00,00,00 ; CONNECT 56000
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600
+HKR, Responses, "19<cr>", 1, 02, 00, 00,FA,00,00, 00,00,00,00 ; CONNECT 64000
+HKR, Responses, "20<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600/75
+HKR, Responses, "21<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 75/600
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800
+HKR, Responses, "27<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; CALL WAITING
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000
+HKR, Responses, "30<cr>", 1, 02, 00, 40,83,00,00, 00,00,00,00 ; CONNECT 33600
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200
+HKR, Responses, "32<cr>", 1, 02, 00, 80,BB,00,00, 00,00,00,00 ; CONNECT 48000
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX call detected
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - Data call detected
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600
+HKR, Responses, "39<cr>", 1, 01, 00, 80,BB,00,00, 00,00,00,00 ; CARRIER 48000
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300
+HKR, Responses, "41<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 600
+HKR, Responses, "42<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 600/75
+HKR, Responses, "43<cr>", 1, 01, 00, 58,02,00,00, 00,00,00,00 ; CARRIER 75/600
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800
+HKR, Responses, "56<cr>", 1, 01, 00, 00,96,00,00, 00,00,00,00 ; CARRIER 38400
+HKR, Responses, "57<cr>", 1, 01, 00, C0,DA,00,00, 00,00,00,00 ; CARRIER 56000
+HKR, Responses, "58<cr>", 1, 01, 00, 00,E1,00,00, 00,00,00,00 ; CARRIER 57600
+HKR, Responses, "59<cr>", 1, 01, 00, 00,FA,00,00, 00,00,00,00 ; CARRIER 64000
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600
+HKR, Responses, "61<cr>", 1, 02, 00, 40,51,00,00, 00,00,00,00 ; CONNECT 20800
+HKR, Responses, "62<cr>", 1, 02, 00, 80,A2,00,00, 00,00,00,00 ; CONNECT 41600
+HKR, Responses, "63<cr>", 1, 02, 00, 00,C8,00,00, 00,00,00,00 ; CONNECT 51200
+HKR, Responses, "64<cr>", 1, 02, 00, C0,F3,00,00, 00,00,00,00 ; CONNECT 62400
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ISDN
+HKR, Responses, "82<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25
+HKR, Responses, "83<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: V.120
+HKR, Responses, "84<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: T-LINK
+HKR, Responses, "85<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: DTMF
+HKR, Responses, "86<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: FAX
+HKR, Responses, "87<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "88<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "89<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "90<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+HKR, Responses, "94<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 4
+HKR, Responses, "95<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 5
+HKR, Responses, "96<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "97<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "98<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "99<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "101<cr>",1, 02, 00, 00,2C,01,00, 00,00,00,00 ; CONNECT 76800
+HKR, Responses, "102<cr>",1, 02, 00, 80,E7,01,00, 00,00,00,00 ; CONNECT 124800
+HKR, Responses, "103<cr>",1, 02, 00, 00,58,02,00, 00,00,00,00 ; CONNECT 153600
+HKR, Responses, "104<cr>",1, 02, 00, E0,79,00,00, 00,00,00,00 ; CONNECT 31200
+HKR, Responses, "105<cr>",1, 01, 00, 00,C2,01,00, 00,00,00,00 ; CARRIER 115200
+HKR, Responses, "111<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; DELAYED
+HKR, Responses, "112<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; BLACKLISTED
+HKR, Responses, "119<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Express
+HKR, Responses, "120<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Bell103
+HKR, Responses, "121<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: Bell212
+HKR, Responses, "122<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.21
+HKR, Responses, "123<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.22
+HKR, Responses, "124<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.22bis
+HKR, Responses, "125<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.23
+HKR, Responses, "126<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.32
+HKR, Responses, "127<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.32bis
+HKR, Responses, "128<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.FC
+HKR, Responses, "129<cr>",1, 01, 00, 00,00,00,00, 00,00,00,00 ; MODULATION: V.34
+
+; DCB's - dwords and words are byte reversed
+; ByteSize (Number of bits/byte, 4-8)
+; Parity (0-4=None,Odd,Even,Mark,Space)
+; StopBits (0,1,2 = 1, 1.5, 2)
+; |DCBLength |BaudRate |Bit Mask |Rsvd |XonLim|XofLim| | | |Xon|Xof|Err|Eof|Evt
+[9600]
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+[19200]
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[M1700Reg] ; Hayes Smartmodem 1200
+HKR, Init, 2,, "ATE0Q0V0X1S0=0<cr>"
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 00,01,00,00, b0,04,00,00, b0,04,00,00
+
+[M1701Reg] ; feature-less Smartmodem 2400
+HKR, Init, 2,, "AT&FE0V0&C1&D2S0=0<cr>"
+HKR,, Properties, 1, 80,01,00,00, 3b,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[M1702Reg] ; feature-less Smartmodem 9600
+HKR, Init, 2,, "AT&FE0V0&C1&D2S0=0<cr>"
+HKR,, Properties, 1, 80,01,00,00, 3b,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 80,25,00,00, 80,25,00,00
+
+[M1803Reg] ; Hayes 9600 Optima & Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[M1804Reg] ; Hayes 14400 Optima & Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[M1805Reg] ; Hayes 9600 Ultra
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[M1806Reg] ; Hayes 14400 Ultra
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+
+[M1811Reg] ; Hayes 28800 Optima
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[M1812Reg] ; Hayes 2400 Optima & Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, Compression_Off,, "&Q8S46=136"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+
+[M1823Reg] ; Hayes 14400 Optima PCMCIA and Accura 14.4
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[M1825Reg] ; Hayes V-series Smartmodem 9600
+HKR, Init, 2,, "AT&FE0V0W2&C1&D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[M1827Reg] ; Hayes 2400 - 9600 PCMCIA
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, Compression_Off,, "&Q8S46=136"
+
+[M1828Reg] ; Hayes 28800 Optima - no CCITT/Bell
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[M1831Reg] ; Hayes 28800 Optima PCMCIA - no CCITT/Bell or dial suffix
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, DialSuffix,, ""
+
+[M1832Reg] ; Hayes Ultra 24 with Express 96
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[M1837Reg] ; Hayes Accura 2400
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[M1845Reg] ; Hayes 28800 Accura 288B + FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT&FE0V0W2&C1&D2S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200
+HKR, Responses, "55<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600
+HKR, Responses, "56<cr>", 1, 01, 00, c0,5d,00,00, 00,00,00,00 ; CARRIER 24000
+HKR, Responses, "57<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400
+HKR, Responses, "58<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800
+
+[M1846Reg] ; Hayes 28800 Accura
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[M1847Reg] ; Hayes 28800 Accura - no CCITT/Bell
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[M2100Reg] ; Megahertz C5144, C6144, T3144, Z5144, Z3144
+HKR, Init, 2,, "AT&F0E0V0W1&C1&D2\G0\J0\Q3\N7<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 2C,01,00,00 ; CONNECT 300 (DTE) - Connection at 300 bps
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 1200 (DTE) - Connection at 1200 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00 ; CONNECT 2400 (DTE) - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, C0,12,00,00 ; CONNECT 4800 (DTE) - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00 ; CONNECT 9600 (DTE) - Connection at 9600 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,4B,00,00 ; CONNECT 19200 (DTE) - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00 ; CONNECT 38400 (DTE) - Connection at 38400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 1200/75 (DTE) - Connection at 1200/75 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 75/1200 (DTE) - Connection at 75/1200 bps
+HKR, Responses, "34<cr>", 1, 02, 00, 00,00,00,00, 20,1C,00,00 ; CONNECT 7200 (DTE) - Connection at 7200 bps
+HKR, Responses, "35<cr>", 1, 02, 00, 00,00,00,00, E0,2E,00,00 ; CONNECT 12000 (DTE) - Connection at 12000 bps
+HKR, Responses, "36<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00 ; CONNECT 14400 (DTE) - Connection at 14400 bps
+
+[M2105Reg] ; Megahertz C696FM, C596FM, T396FM, Z596FM, Z396FM
+HKR, Init, 2,, "AT&F0E0V0W1&C1&D2\G0\J0\Q3\N7<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 2C,01,00,00 ; CONNECT 300 (DTE) - Connection at 300 bps
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 1200 (DTE) - Connection at 1200 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00 ; CONNECT 2400 (DTE) - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, C0,12,00,00 ; CONNECT 4800 (DTE) - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00 ; CONNECT 9600 (DTE) - Connection at 9600 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,4B,00,00 ; CONNECT 19200 (DTE) - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00 ; CONNECT 38400 (DTE) - Connection at 38400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 1200/75 (DTE) - Connection at 1200/75 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, B0,04,00,00 ; CONNECT 75/1200 (DTE) - Connection at 75/1200 bps
+HKR, Responses, "34<cr>", 1, 02, 00, 00,00,00,00, 20,1C,00,00 ; CONNECT 7200 (DTE) - Connection at 7200 bps
+HKR, Responses, "35<cr>", 1, 02, 00, 00,00,00,00, E0,2E,00,00 ; CONNECT 12000 (DTE) - Connection at 12000 bps
+HKR, Responses, "36<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00 ; CONNECT 14400 (DTE) - Connection at 14400 bps
+
+[M2112Reg] ; Megahertz P2144, TX3144
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,E1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+
+[M2116Reg] ; Megahertz P296FMV
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+
+[M2119Reg] ; Megahertz P224FMV
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+
+[M2700Reg] ; Null-Modem
+HKR, Init, 1,, "None"
+HKR, Init, 2,, "NoResponse"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "CLIENTSERVER"
+HKR, Answer, 2,, "NoResponse"
+HKR, Settings, DialPrefix,, "CLIENT"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 30,00,00,00, 00,c2,01,00, 00,c2,01,00
+HKR, Responses, "CLIENT", 1, 08, 00, 00, 00, 00, 00, 00,00,00,00 ; Server side - the client is requesting a connection
+HKR, Responses, "<h00>CLIENT", 1, 08, 00, 00, 00, 00, 00, 00,00,00,00 ; Server side - the client is requesting a connection
+HKR, Responses, "CLIENTSERVER", 1, 02, 00, 00, 00, 00, 00, 00,00,00,00 ; Client side - the server has acknowledged and the connection is completed
+
+[M2900Reg]
+HKR, Init, 2,, "AT&FE0V0&C1&D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 10,00,00,00, 00,4b,00,00, 00,4b,00,00
+HKR, Settings, DialPrefix,, "DT"
+HKR, Settings, DialSuffix,, "" ; replace the one provided by the Common section
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; ignore and parse following numeric response
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; ignore and parse following numeric response
+HKR, Responses, "CONNECT", 1,02, 00, 00,00,00,00, 00,00,00,00 ; CONNECT from remote modem
+; we want to ignore the numeric connect response for the pdi, we will use the connect from the remote modem as above
+HKR, Responses, "1<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "5<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "10<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "14<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+
+[M4300Reg] ; Psion Dacom Gold Card V.32 PCMCIA
+HKR, Init, 2,, "AT&FE0V0W1&Q5&S0S95=47<cr>"
+HKR,, Properties, 1, b0,01,00,00, 3a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_Off,, "\N0-K0S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "\N3-K0S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "\N2-K0S36=4S48=7"
+HKR, Settings, ErrorControl_Cellular,, "\N3-K1S36=7S48=7"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2-K1S36=0S48=7"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Responses, "9<cr>", 1, 02, 00, 58, 02, 00, 00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40, 38, 00, 00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00, 4B, 00, 00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00, 96, 00, 00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "19<cr>", 1, 02, 00, 00, C2, 01, 00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "24<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00 ; DELAYED
+HKR, Responses, "32<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00 ; BLACKLISTED
+HKR, Responses, "34<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00 ; +FCERROR
+HKR, Responses, "42<cr>", 1, 01, 00, 58, 02, 00, 00, 00,00,00,00 ; CARRIER 600 - Carrier at 600 bps
+HKR, Responses, "81<cr>", 1, 01, 0a, 00, 00, 00, 00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR - Alternative protocol MNP10 error-control negotiated
+
+[M4400Reg] ; Ven-Tel PCM9600
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40, 38, 00, 00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00, 4B, 00, 00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00, 96, 00, 00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+
+[M4401Reg] ; Ven-Tel PCM14400
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40, 38, 00, 00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00, 4B, 00, 00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00, 96, 00, 00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+
+[M4402Reg] ; Ven-Tel 9600 Plus and 9600 Plus II
+HKR, Init, 2,, "AT&F%%F2\N3\Q3E0V0&C1&D2S0=0<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>" ; seconds
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3*Y0"
+HKR, Settings, ErrorControl_Forced,, "\N2*Y0"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Responses, "9<cr>", 1, 02, 00, B0, 04, 00, 00, 00,00,00,00 ; CONNECT V.22 - Connection at 1200 bps with V.22
+HKR, Responses, "11<cr>", 1, 02, 02, B0, 04, 00, 00, 00,00,00,00 ; CONNECT V.22/REL - Connection at 1200 bps with V.22 and MNP2-4
+HKR, Responses, "13<cr>", 1, 02, 00, 2C, 01, 00, 00, 00,00,00,00 ; CONNECT V.21 - Connection at 300 bps with V.21
+HKR, Responses, "15<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00 ; ABORTED - A call in progress has been aborted
+HKR, Responses, "17<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00 ; V.42 DISCONNECTED
+HKR, Responses, "21<cr>", 1, 02, 02, 00, 00, 00, 00, 00,00,00,00 ; CONNECT/REL
+HKR, Responses, "22<cr>", 1, 02, 02, B0, 04, 00, 00, 00,00,00,00 ; CONNECT 1200/REL - Connection at 1200 bps with MNP2-4
+HKR, Responses, "23<cr>", 1, 02, 02, 60, 09, 00, 00, 00,00,00,00 ; CONNECT 2400/REL - Connection at 2400 bps with MNP2-4
+HKR, Responses, "24<cr>", 1, 02, 00, C0, 12, 00, 00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "25<cr>", 1, 02, 00, C0, 12, 00, 00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps with MNP2-4
+HKR, Responses, "26<cr>", 1, 02, 00, B0, 04, 00, 00, 00,00,00,00 ; CONNECT V.23 - Connection at 1200/75 bps
+HKR, Responses, "27<cr>", 1, 02, 02, 80, 25, 00, 00, 00,00,00,00 ; CONNECT 9600/REL - Connection at 9600 bps with MNP2-4
+HKR, Responses, "28<cr>", 1, 02, 00, 80, 25, 00, 00, 00,00,00,00 ; CONNECT 9600 TRELLIS - Connection at 9600 bps
+HKR, Responses, "29<cr>", 1, 02, 02, 80, 25, 00, 00, 00,00,00,00 ; CONNECT 9600 TRELLIS/REL - Connection at 9600 bps with MNP2-4
+HKR, Responses, "30<cr>", 1, 01, 00, 00, 00, 00, 00, 00,00,00,00 ; COMPRESSION NOT AVAILABLE
+HKR, Responses, "31<cr>", 1, 01, 01, 00, 00, 00, 00, 00,00,00,00 ; COMPRESSION LEVEL 5
+HKR, Responses, "32<cr>", 1, 01, 01, 00, 00, 00, 00, 00,00,00,00 ; COMPRESSION V.42bis
+HKR, Responses, "34<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "41<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "42<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "43<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 03, 00, 00, 00, 00, 00, 00,00,00,00
+HKR, Responses, "60<cr>", 1, 02, 00, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 TRELLIS - Connection at 7200 bps
+HKR, Responses, "61<cr>", 1, 02, 00, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 TRELLIS - Connection at 12000 bps
+HKR, Responses, "62<cr>", 1, 02, 02, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 TRELLIS/REL - Connection at 7200 bps with MNP2-4
+HKR, Responses, "63<cr>", 1, 02, 02, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 TRELLIS/REL - Connection at 12000 bps with MNP2-4
+HKR, Responses, "64<cr>", 1, 02, 02, 00, 00, 00, 00, 00,00,00,00 ; CONNECT/LAPM
+HKR, Responses, "65<cr>", 1, 02, 02, B0, 04, 00, 00, 00,00,00,00 ; CONNECT 1200/LAPM
+HKR, Responses, "66<cr>", 1, 02, 02, 60, 09, 00, 00, 00,00,00,00 ; CONNECT 2400/LAPM
+HKR, Responses, "67<cr>", 1, 02, 02, B0, 04, 00, 00, 00,00,00,00 ; CONNECT V.22/LAPM
+HKR, Responses, "68<cr>", 1, 02, 02, C0, 12, 00, 00, 00,00,00,00 ; CONNECT 4800/LAPM
+HKR, Responses, "69<cr>", 1, 02, 02, 20, 1C, 00, 00, 00,00,00,00 ; CONNECT 7200 TRELLIS/LAPM
+HKR, Responses, "70<cr>", 1, 02, 02, 80, 25, 00, 00, 00,00,00,00 ; CONNECT 9600/LAPM
+HKR, Responses, "71<cr>", 1, 02, 02, 80, 25, 00, 00, 00,00,00,00 ; CONNECT 9600 TRELLIS/LAPM
+HKR, Responses, "72<cr>", 1, 02, 02, E0, 2E, 00, 00, 00,00,00,00 ; CONNECT 12000 TRELLIS/LAPM
+
+[Strings]
+MS = "Microsoft"
+
+M18 = "Hayes"
+M1700 = "Hayes Smartmodem 1200"
+M1701 = "Hayes Compatible 2400"
+M1702 = "Hayes Compatible 9600"
+M1800 = "Hayes Pocket Modem 2400"
+M1801 = "Hayes Smartmodem 2400"
+M1802 = "Hayes Smartmodem 9600"
+M1803 = "Hayes Optima 96 + FAX96"
+M1804 = "Hayes Optima 144 + FAX144"
+M1805 = "Hayes V-series Ultra Smartmodem 9600"
+M1806 = "Hayes V-series Ultra Smartmodem 14400"
+M1807 = "Hayes Accura 96 + FAX96"
+M1808 = "Hayes Accura 144 + FAX144"
+M1809 = "Hayes Accura 96B + FAX96"
+M1810 = "Hayes Accura 144B + FAX144"
+M1811 = "Hayes Optima 288 V.FC + FAX"
+M1811PNP = "Hayes 288, V.34 + FAX"
+M1812 = "Hayes 2400 Bps Modem"
+M1813 = "Hayes Optima 24B + FAX96"
+M1814 = "Hayes Optima 96B + FAX96"
+M1815 = "Hayes Optima 144B + FAX144"
+M1816 = "Hayes Accura 24 EC + FAX96"
+M1817 = "Hayes Accura 24B EC + FAX96"
+M1818 = "Hayes Optima 144 + FAX144 Pocket Edition"
+M1819 = "Hayes Accura 288 V.FC + FAX"
+M1820 = "Hayes 9600 Bps Modem"
+M1821 = "Hayes 14.4 Kbps Modem"
+M1822 = "Hayes Optima 144"
+M1823 = "Hayes Optima 144 + FAX144 PCMCIA"
+M1824 = "Hayes 2400 Bps Modem"
+M1825 = "Hayes V-series Smartmodem 9600"
+M1826 = "Hayes Optima 288 V.34 + FAX"
+M1827 = "Hayes Optima 24 + FAX96 PCMCIA"
+M1828 = "Hayes Optima 288 V.FC + FAX (UK)"
+M1829 = "Hayes Optima 288B V.FC + FAX"
+M1830 = "Hayes Smartmodem 1200B"
+M1831 = "Hayes Optima 288 V.34 + FAX PCMCIA"
+M1832 = "Hayes Ultra 24 Smartmodem 2400 with Express 96"
+M1833 = "Hayes 2400 Bps Modem"
+M1834 = "Hayes Optima 96"
+M1835 = "Hayes Optima 24"
+M1836 = "Hayes Optima 24 + FAX96"
+M1837 = "Hayes Accura 2400"
+M1838 = "Hayes Accura 288 V.34-V.FC + FAX 144"
+M1839 = "Hayes Optima 288 V.34 + FAX + Voice"
+M1840 = "Hayes Optima 288 V.34-V.FC + FAX 144"
+M1841 = "Hayes Optima 288 Data Fax Modem"
+M1842 = "Hayes Accura 144 Data Fax Modem"
+M1843 = "Hayes Optima 144 + FAX for PCMCIA with EZjack"
+M1844 = "Hayes Optima 144 + FAX for PCMCIA"
+M1845 = "Hayes Accura 288B V.34 + FAX"
+M1848PNP = "Hayes Optima 288 V.34 + FAX + Voice, Plug & Play"
+M1848 = "Hayes Optima 288 V.34 + FAX + Voice"
+
+M21 = "Megahertz Corp."
+M2100 = "Megahertz C5144 for Compaq LTE"
+M2101 = "Megahertz C6144"
+M2102 = "Megahertz T3144"
+M2103 = "Megahertz Z5144"
+M2104 = "Megahertz Z3144"
+M2105 = "Megahertz C696FM"
+M2106 = "Megahertz C596FM"
+M2107 = "Megahertz T396FM"
+M2108 = "Megahertz Z596FM"
+M2109 = "Megahertz Z396FM"
+M2114 = "Megahertz TX3144"
+M2116 = "Megahertz P296FMV"
+M2119 = "Megahertz P224FMV"
+
+M27 = "(Standard Modem Types)"
+M2700 = "Dial-Up Networking Serial Cable between 2 PCs"
+M2701 = "Dial-Up Networking Parallel Cable between 2 PCs"
+
+M29 = "InteCom"
+M2900 = "PDI-1000"
+
+M43 = "Psion"
+M4300 = "Psion Dacom Gold V.32 PCMCIA Card"
+
+M44 = "Ven-Tel"
+M4400 = "Ven-Tel PCM9600 Fax Modem"
+M4401 = "Ven-Tel PCM14400 Fax Modem"
+M4402 = "Ven-Tel 9600 Plus Fax Modem"
+M4403 = "Ven-Tel 9600 Plus II Fax Modem"
diff --git a/private/unimodem/inf/mdmico.inx b/private/unimodem/inf/mdmico.inx
new file mode 100644
index 000000000..4e12b3170
--- /dev/null
+++ b/private/unimodem/inf/mdmico.inx
@@ -0,0 +1,301 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ICO
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEMD106616F ; TELEJET 14400
+
+
+; Installation sections
+
+[Modem1] ; TELEJET 14400
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; TELEJET 14400
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, INIT,3,,"AT&F S95=248 <cr>"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ICO"
+
+; Model strings
+
+Modem1="ICO TELEJET 14400"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdminfot.inx b/private/unimodem/inf/mdminfot.inx
new file mode 100644
index 000000000..099ec8027
--- /dev/null
+++ b/private/unimodem/inf/mdminfot.inx
@@ -0,0 +1,531 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Infotel and Creatix
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+%Infotel% = Infotel
+%Creatix% = Creatix
+
+[Creatix]
+%Modem13% = Modem13, UNIMODEME19AC0D8 ; Creatix 14.4 PCMCIA
+%Modem13% = Modem13, INFOT_Modem13, PCMCIA\INTEL-DATAFAX_14.4-7462 ; Creatix 14.4 PCMCIA - rank0 in mdmcpq
+%Modem12% = Modem12, UNIMODEME4C76F90 ; Creatix 14.4 Internal
+
+[Infotel]
+%Modem14% = Modem14, INFOT_Modem14, UNIMODEM16E3BF9F
+%Modem11% = Modem11, INFOT_Modem11, UNIMODEMF0C04D74 ; Infotel Modem 1414VQE (same as Digicom Scout Classic 144 external)
+%Modem10% = Modem10, UNIMODEM0F3E5258 ; Infotel Modem 2400 SM-24-NS
+%Modem9% = Modem9, UNIMODEM848FC3E5 ; Infotel 2400P
+%Modem8% = Modem8, UNIMODEM1BC27B10 ; Infotel 2400 SF
+%Modem7% = Modem7, UNIMODEM580306EA ; Infotel 1414Vqh
+%Modem6% = Modem6, UNIMODEM56F75F64 ; Infotel 9624P
+%Modem5% = Modem5, UNIMODEM31A3765D ; Infotel 9624H-S
+%Modem4% = Modem4, INFOT_Modem4, UNIMODEM959C40CA ; Infotel 144I (Rockwell clone)
+%Modem3% = Modem3, UNIMODEM8976FCA7 ; Infotel 1414VQP
+%Modem2% = Modem2, UNIMODEM29A037D6 ; Infotel 1428VQE
+%Modem1% = Modem1, UNIMODEMB6C628AC ; Infotel 1428VQH-R
+
+
+[Modem14]
+AddReg=All, MfgAddReg, CIRRUS_VOICE_ALL, Modem14.AddReg, INTERNAL
+
+[Modem13] ; Creatix 14.4 PCMCIA
+AddReg=All, MfgAddReg, Modem13.AddReg, PCMCIA
+
+[Modem12] ; Creatix 14.4 Internal modem
+AddReg=All, MfgAddReg, Modem12.AddReg, INTERNAL
+
+[Modem11] ; Infotel 1414VQE
+AddReg=All, MfgAddReg, Modem11.AddReg, EXTERNAL
+
+[Modem10] ; Infotel Modem 2400 SM-24-NS
+AddReg=All, MfgAddReg, Modem10.AddReg, EXTERNAL
+
+[Modem9] ; Infotel 2400P
+AddReg=All, MfgAddReg, Modem9.AddReg, EXTERNAL
+
+[Modem8] ; Infotel 2400 SF
+AddReg=All, MfgAddReg, Modem8.AddReg, INTERNAL
+
+[Modem7] ; Infotel 1414Vqh
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem6] ; Infotel 9624P
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; Infotel 9624H-S
+AddReg=All, MfgAddReg, Modem5.AddReg, INTERNAL
+
+[Modem4] ; Infotel 144I
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; Infotel 1414VQP
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem2] ; Infotel 1428VQE
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; Infotel 1428VQH-R
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f3,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem13.AddReg] ; Creatix 14.4 PCMCIA - with cellular
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT&FE0W2V1X4S95=47&C1&D2&S0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 *H1 -K1 -Q1 @M0 :E1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 *H1 -K1 -Q1 @M0 :E1"
+
+[Modem12.AddReg] ; Creatix 14.4 Internal modem
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1 W2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Modem11.AddReg] ; Infotel 1414VQE
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem10.AddReg] ; Infotel Modem 2400 SM-24-NS
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1<cr>"
+
+[Modem9.AddReg] ; Infotel 2400P
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1<cr>"
+
+[Modem8.AddReg] ; Infotel 2400 SF (default to 2400 to avoid frame errors)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR,, DCB, 1, 1C,00,00,00, 60,09,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1<cr>"
+
+[Modem7.AddReg] ; Infotel 1414Vqh
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem6.AddReg] ; Infotel 9624P
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1<cr>"
+
+[Modem5.AddReg] ; Infotel 9624H-S
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1<cr>"
+
+[Modem4.AddReg] ; Infotel 144I
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; Infotel 1414VQP
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg] ; Infotel 1428VQE
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg] ; Infotel 1428VQH-R
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+MS = "Microsoft"
+Infotel = "Infotel"
+Modem14="Infotel V1414VH-L Data Fax Voice"
+Modem11="Infotel 1414VQE"
+Modem10="Infotel Modem 2400 SM-24N-S"
+Modem9 ="Infotel 2400P"
+Modem8 ="Infotel 2400 SF"
+Modem7 ="Infotel 1414VQH"
+Modem6 ="Infotel 9624P"
+Modem5 ="Infotel 9624H-S"
+Modem4 ="Infotel 144I"
+Modem3 ="Infotel 1414VQP"
+Modem2 ="Infotel 1428VQE"
+Modem1 ="Infotel 1428VQH-R"
+
+Creatix = "Creatix"
+Modem13="Creatix 14.4 PCMCIA"
+Modem12="Creatix 14.4"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCON", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[CIRRUS_VOICE_ALL] ; Cirrus voice settings
+HKR,,Enumerator,,serwave.vxd
+; HKR,, VoiceProfile, 1, 63,00,20,00
+HKR,, VoiceProfile, 1, E3,10,20,00
+HKR,, HandsetCloseDelay, 1, 05,00,00,00
+HKR,, ForwardDelay, 1,88,13
+HKR, StartPlay, 1,, "at#vpy<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrd<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h1A><cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10>Aat<cr>"
+HKR, OpenHandset, 1,, "at#vcl=1<cr>"
+HKR, OpenHandset, 2,, "at#vln=2<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR, LineSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR, CloseHandset, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#vcl=1<cr>"
+HKR, VoiceAnswer, 2,, "at#vln=1<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#vcl=1<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vln=17<cr>"
+HKR, VoiceDialNumberSetup, 3,, "atdt,;<cr>"
+HKR, GenerateDigit, 1,, "atdt<Digit>;<cr>"
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdminsys.inx b/private/unimodem/inf/mdminsys.inx
new file mode 100644
index 000000000..35964cd52
--- /dev/null
+++ b/private/unimodem/inf/mdminsys.inx
@@ -0,0 +1,326 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: INSYS
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem11% = Modem2,UNIMODEMB0583818 ; Steckkarte 144 BA
+%Modem10% = Modem2,UNIMODEM7D78A7F1 ; Steckkarte 144 Voice
+%Modem9% = Modem2, ; PC Steckkarte 288
+%Modem7% = Modem1, ; ONBIT 144 Fax
+%Modem5% = Modem1,UNIMODEM4EC36F08 ; ONBIT 144 Voice
+%Modem4% = Modem1,UNIMODEMFA93A03B ; ONBIT 144 Plusversion
+%Modem2% = Modem1,UNIMODEM8BD1FE44 ; ONBIT 288 Plusversion
+%Modem2% = Modem1,UNIMODEM74F2D94D ; ONBIT 288 Plusversion
+%Modem1% = Modem1,UNIMODEM38F6BB85 ; ONBIT 288FAX
+
+
+; Installation sections
+
+[Modem2] ; internal
+AddReg=All, MfgAddReg, Modem2.AddReg
+
+[Modem1] ; external
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+
+; AddReg sections
+[Modem1.AddReg] ; external
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, 3a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem2.AddReg] ; internal
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, PortDriver,, "serial.vxd"
+HKR,, Contention,, *vcd
+HKR,, Properties, 1, 80,01,00,00, 3a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "INSYS"
+
+; Model strings
+
+Modem11="INSYS Steckkarte 144 BA"
+Modem10="INSYS Steckkarte 144 Voice"
+Modem9="INSYS PC Steckkarte 288"
+Modem8="INSYS ORBIT 9624 FAX"
+Modem7="INSYS ONBIT 144 FAX"
+Modem5="INSYS ONBIT 144 Voice"
+Modem4="INSYS ONBIT 144 Plusversion"
+Modem2="INSYS ONBIT 288 Plusversion"
+Modem1="INSYS ONBIT 288 FAX"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F E1 W0 S95=249<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmintel.inx b/private/unimodem/inf/mdmintel.inx
new file mode 100644
index 000000000..f6baaf3b6
--- /dev/null
+++ b/private/unimodem/inf/mdmintel.inx
@@ -0,0 +1,326 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Intel Corp.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Intel%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM2D08133E ; Intel 300 and Viva 14.4 combo
+ExcludeFromSelect=UNIMODEM3DBAACC2 ; Intel Faxmodem 144/144i and Intel Faxmodem 144/144e combo
+ExcludeFromSelect=UNIMODEM5DC8F5BA ; Intel Faxmodem 144/144i and Intel Faxmodem 144/144e combo
+ExcludeFromSelect=UNIMODEMAF312C16 ; Intel Faxmodem 96/96e and 96/96i combo
+ExcludeFromSelect=UNIMODEM1308F3EC ; Intel Faxmodem 400 and 400e combo
+ExcludeFromSelect=UNIMODEM857A2E1B ; Intel/Puredata 400e combo
+ExcludeFromSelect=UNIMODEMEB77762B ; Intel/Puredata 200 combo
+ExcludeFromSelect=UNIMODEM9729BF96 ; Intel/Puredata 200 combo
+ExcludeFromSelect=UNIMODEM6E4ABD3B ; Intel/Puredata 400e and 14.4EX combo
+ExcludeFromSelect=UNIMODEM6C4FF788 ; 24v/96i, 24v/96e
+
+[Manufacturer]
+%Intel% = Intel
+%Puredata% = Puredata
+
+[Intel]
+%Modem30% = Modem12, UNIMODEM6C4FF788 ; 24v/96i, 24v/96e
+%Modem24% = Modem5, UNIMODEM6E4ABD3B ; Intel SatisFAXtion 400e and 14.4EX combo
+%Modem23% = Modem19, UNIMODEM1308F3EC ; Intel SatisFAXtion 400 and 400e combo
+%Modem22% = Modem9, UNIMODEMAF312C16 ; Intel Faxmodem 96/96i and 96/96e combo
+%Modem21% = Modem7, UNIMODEM5DC8F5BA ; Intel Faxmodem 144/144i and Intel Faxmodem 144/144e combo
+%Modem21% = Modem7, UNIMODEM3DBAACC2 ; Intel Faxmodem 144/144i and Intel Faxmodem 144/144e combo
+%Modem20% = Modem20, UNIMODEM2D08133E ; Intel 300 and Viva 14.4 combo
+%Modem19% = Modem19, INTEL_Modem19, UNIMODEM857A2E1B ; SatisFAXtion Modem/400e
+%Modem19% = Modem19, INTEL_Modem19, UNIMODEM6E4ABD3B ; SatisFAXtion Modem/400e
+%Modem19% = Modem19, INTEL_Modem19, UNIMODEM1308F3EC ; SatisFAXtion Modem/400e
+%Modem18% = Modem18, UNIMODEMBD094F8B ; Intel Faxmodem 144/144i v2.28
+%Modem18% = Modem18, INTEL_Modem18, UNIMODEM5DC8F5BA ; Intel Faxmodem 144/144i v1.43, v2.20
+%Modem18% = Modem18, INTEL_Modem18, UNIMODEM3DBAACC2 ; Intel Faxmodem 144/144i v1.43, v2.20
+%Modem14% = Modem14, INTEL_Modem14, UNIMODEM9F2BBC58 ; Intel Faxmodem 24/96i
+%Modem14% = Modem14, INTEL_Modem14, UNIMODEM901DD6E5 ; Intel Faxmodem 24/96i
+%Modem13% = Modem13, INTEL_Modem13, UNIMODEM6C4FF788 ; Intel Faxmodem 24v/96i
+%Modem12% = Modem12, INTEL_Modem12, UNIMODEM6C4FF788 ; Intel Faxmodem 24v/96e
+%Modem11% = Modem11, UNIMODEM81FDF22E ; Intel 2400e V.42bis Modem
+
+%Modem11% = Modem11, INTEL_Modem11, UNIMODEMD209269F ; Intel 2400e V.42bis Modem
+%Modem10% = Modem10, INTEL_Modem10, UNIMODEMAF312C16 ; Intel Faxmodem 96/96i
+%Modem9% = Modem9, INTEL_Modem9, UNIMODEMAF312C16 ; Intel Faxmodem 96/96e
+%Modem7% = Modem7, INTEL_Modem7, UNIMODEM5DC8F5BA ; Intel Faxmodem 144/144e v1.70
+%Modem7% = Modem7, INTEL_Modem7, UNIMODEM3DBAACC2 ; Intel Faxmodem 144/144e v1.43, v2.20
+%Modem6% = Modem6, UNIMODEM52C15FC7 ; 9600EX
+%Modem5% = Modem5, UNIMODEM0589FB57 ; 14.4EX
+%Modem5% = Modem5, INTEL_Modem5, UNIMODEM6E4ABD3B ; 14.4EX
+%Modem5% = Modem19, INTEL_Modem5, UNIMODEM857A2E1B ; 14.4EX / 400e clone
+%Modem4% = Modem4, INTEL_Modem4, UNIMODEM2D08133E ; SatisFAXtion Modem/300
+%Modem3% = Modem3, UNIMODEM03326EC6 ; SatisFAXtion Classic
+%Modem2% = Modem2, INTEL_Modem2, UNIMODEMEB77762B ; SatisFAXtion Modem/200
+%Modem2% = Modem2, INTEL_Modem2, UNIMODEM9729BF96 ; SatisFAXtion Modem/200
+%Modem1% = Modem1, INTEL_Modem1, UNIMODEM1308F3EC ; SatisFAXtion Modem/400
+
+[Puredata]
+%Modem25% = Modem19, INTEL_Modem25, UNIMODEM857A2E1B ; SatisFAXtion Modem/400e
+%Modem25% = Modem19, INTEL_Modem25, UNIMODEM6E4ABD3B ; SatisFAXtion Modem/400e
+%Modem25% = Modem19, INTEL_Modem25, UNIMODEM1308F3EC ; SatisFAXtion Modem/400e
+%Modem26% = Modem19, UNIMODEM857A2E1B ; Intel and Puredata SatisFAXtion Modem/400e combo
+%Modem27% = Modem2, INTEL_Modem27, UNIMODEMEB77762B ; SatisFAXtion Modem/200
+%Modem27% = Modem2, INTEL_Modem27, UNIMODEM9729BF96 ; SatisFAXtion Modem/200
+%Modem28% = Modem2, UNIMODEMEB77762B ; Intel and Puredata SatisFAXtion Modem/200 combo
+%Modem28% = Modem2, UNIMODEM9729BF96 ; Intel and Puredata SatisFAXtion Modem/200 combo
+%Modem29% = Modem1, INTEL_Modem29, UNIMODEM1308F3EC ; SatisFAXtion Modem/400
+
+; Installation sections
+
+[Modem20] ; Intel 300 and Viva 14.4 combo
+AddReg=All, MfgAddReg, Modem20.AddReg, EXTERNAL
+
+[Modem19] ; SatisFAXtion Modem/400e
+AddReg=All, MfgAddReg, Modem19.AddReg, EXTERNAL
+
+[Modem18] ; Intel Faxmodem 144/144i v2.28
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem14] ; Intel Faxmodem 24/96i
+AddReg=All, MfgAddReg, Modem14.AddReg, INTERNAL
+
+[Modem13] ; Intel Faxmodem 24v/96i
+AddReg=All, MfgAddReg, Modem13.AddReg, INTERNAL
+
+[Modem12] ; Intel Faxmodem 24v/96e
+AddReg=All, MfgAddReg, Modem12.AddReg, EXTERNAL
+
+[Modem11] ; Intel 2400e V.42bis Modem
+AddReg=All, MfgAddReg, Modem11.AddReg, EXTERNAL
+
+[Modem10] ; Intel Faxmodem 96/96i
+AddReg=All, MfgAddReg, Modem9.AddReg, INTERNAL
+
+[Modem9] ; Intel Faxmodem 96/96e
+AddReg=All, MfgAddReg, Modem9.AddReg, EXTERNAL
+
+[Modem7] ; Intel Faxmodem 144/144e v1.43, v1.70
+AddReg=All, MfgAddReg, Modem7.AddReg, EXTERNAL
+
+[Modem6] ; 9600EX
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5] ; 14.4EX
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4] ; SatisFAXtion Modem/300
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; SatisFAXtion Classic
+AddReg=All, MfgAddReg, Modem3.AddReg, INTERNAL
+
+[Modem2] ; SatisFAXtion Modem/200
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1] ; SatisFAXtion Modem/400
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+; AddReg sections
+
+[Modem20.AddReg] ; Intel 300 and Viva 14.4 combo
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem19.AddReg] ; SatisFAXtion Modem/400e
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem14.AddReg] ; Intel Faxmodem 24/96i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem13.AddReg] ; Intel Faxmodem 24v/96i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,,"\N7"
+HKR, Settings, Compression_On,, "\N7%%C1"
+
+[Modem12.AddReg] ; Intel Faxmodem 24v/96e
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem11.AddReg] ; Intel 2400e V.42bis Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem9.AddReg] ; Intel Faxmodem 96/96e or i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 59,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V2<cr>"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem7.AddReg] ; Intel Faxmodem 144/144e or i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 59,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem6.AddReg] ; 9600EX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem5.AddReg] ; 14.4EX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg] ; SatisFAXtion Modem/300
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; SatisFAXtion Classic
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,09,00,00, c0,12,00,00
+HKR, Init, 2,, "AT&FE0<cr>"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem2.AddReg] ; SatisFAXtion Modem/200
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem1.AddReg] ; SatisFAXtion Modem/400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Strings]
+Intel = "Intel"
+
+Modem30="Intel Faxmodem 24v-96i or 24v-96e"
+Modem24="SatisFAXtion Modem 400e or 14.4EX"
+Modem23="SatisFAXtion Modem 400 or 400e"
+Modem22="Intel Faxmodem 96-96e or i"
+Modem21="Intel Faxmodem 144-144e or i"
+Modem20="14.4 Modem"
+Modem19="Intel SatisFAXtion Modem 400e"
+Modem18="Intel Faxmodem 144-144i"
+Modem14="Intel Faxmodem 24-96i"
+Modem13="Intel Faxmodem 24v-96i"
+Modem12="Intel Faxmodem 24v-96e"
+Modem11="Intel 2400e V.42bis Modem"
+Modem10="Intel Faxmodem 96-96i"
+Modem9="Intel Faxmodem 96-96e"
+Modem7="Intel Faxmodem 144-144e"
+Modem6="Intel 9600EX"
+Modem5="Intel 14.4EX"
+Modem4="Intel SatisFAXtion Modem 300"
+Modem3="Intel SatisFAXtion Classic"
+Modem2="Intel SatisFAXtion Modem 200"
+Modem1="Intel SatisFAXtion Modem 400"
+
+Puredata = "Puredata"
+Modem25="Puredata SatisFAXtion Modem 400e"
+Modem26="SatisFAXtion Modem 400e"
+Modem27="Puredata SatisFAXtion Modem 200"
+Modem28="SatisFAXtion Modem 200"
+Modem29="Puredata SatisFAXtion Modem 400"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FE0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM-COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM-COMP<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 40,38,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 40,38,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL-MNP<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-MNP<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-MNP<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-MNP-COMP<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-MNP-COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-MNP-COMP<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-MNP-COMP<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-MNP-COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-MNP-COMP<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-MNP-COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-LAPM-COMP<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-LAPM-COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM-COMP<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM-COMP<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM-COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmintpc.inx b/private/unimodem/inf/mdmintpc.inx
new file mode 100644
index 000000000..91a75b047
--- /dev/null
+++ b/private/unimodem/inf/mdmintpc.inx
@@ -0,0 +1,440 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Intel Corp. (PCMCIA models)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Strings]
+Mfg = "Intel"
+
+Modem1="Intel Faxmodem 24-96 PCMCIA"
+Modem2="Intel Faxmodem 9600 PCMCIA (MBFM6820)"
+Modem3="Intel Faxmodem 9600 PCMCIA (MBFM6821)"
+Modem4="Intel Faxmodem 14.4 PCMCIA (MBFM6830)"
+Modem5="Intel Faxmodem 14.4 PCMCIA (MBFM6831)"
+Modem6="Intel Cellular Faxmodem 14.4 PCMCIA"
+Modem7="Intel International Faxmodem 24-96 PCMCIA"
+Modem8="Intel International Faxmodem 14.4 PCMCIA"
+
+[Models]
+%Modem1% = Modem1, "PCMCIA\Intel-PCMCIA_Faxmodem_24/96-1972"
+%Modem2% = Modem2, INTPC_Modem2, "PCMCIA\Intel-PCMCIA_Faxmodem_96/96-A09E"
+%Modem3% = Modem3, INTPC_Modem3, "PCMCIA\INTEL-PCMCIA_FAXMODEM_96/96-A09E"
+%Modem4% = Modem4, INTPC_Modem4,, "PCMCIA\INTEL-PCMCIA_Faxmodem_14.4/14.4-121B"
+%Modem5% = Modem5, INTPC_Modem5,, "PCMCIA\Intel-PCMCIA_Faxmodem_14.4/14.4-121B"
+%Modem6% = Modem6, "PCMCIA\Intel-Cellular_Faxmodem_14.4/14.4-0BB0"
+%Modem7% = Modem7, "PCMCIA\Intel-FaxModem_24/96-2CC4"
+%Modem8% = Modem8, "PCMCIA\Intel-International_FaxModem_14.4/14.4-0D40"
+
+%Modem1% = Modem1, UNIMODEMA7FE9D20 ; 6810
+%Modem1% = Modem1, UNIMODEM334A17F8 ; Misc. 24-96
+%Modem1% = Modem1, UNIMODEMD9DC222C ; 6811
+%Modem2% = Modem2, UNIMODEME0B10A1B ; 6820
+%Modem3% = Modem3, UNIMODEMA8665160 ; 6821
+%Modem4% = Modem4, UNIMODEM8F381095 ; 6830
+%Modem5% = Modem5, UNIMODEM44B00931 ; 6831
+%Modem6% = Modem6, UNIMODEM9E766856 ; 6840
+%Modem8% = Modem8, UNIMODEMFDD73D98 ; INC235US
+
+
+[Modem1] ; Intel Faxmodem 24-96 PCMCIA
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA, VerboseResponses
+
+[Modem2] ; Intel Faxmodem 9600 PCMCIA (MBFM6820)
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA, VerboseResponses
+
+[Modem3] ; Intel Faxmodem 9600 PCMCIA (MBFM6821)
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA, VerboseResponses
+
+[Modem4] ; Intel Faxmodem 14.4 PCMCIA (MBFM6830)
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA, VerboseResponses
+
+[Modem5] ; Intel Faxmodem 14.4 PCMCIA (MBFM6831)
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA, VerboseResponses
+
+[Modem6] ; Intel Cellular Faxmodem 14.4 PCMCIA
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA, VerboseResponses
+
+[Modem7] ; International Faxmodem 24-96 PCMCIA
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA, VerboseResponses
+
+[Modem8] ; Intel International Faxmodem 14.4 PCMCIA
+AddReg=All, MfgAddReg, Modem8.AddReg, PCMCIA, VerboseResponses
+
+
+[Modem1.AddReg] ; Intel Faxmodem 24-96 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V1\V2<cr>"
+HKR, Settings, SpeedNegotiation_Off,, "%%N6"
+HKR, Settings, SpeedNegotiation_On,, "%%N0"
+
+[Modem2.AddReg] ; Intel Faxmodem 9600 PCMCIA (MBFM6820)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_On,, "\N3S48=7S36=7"
+HKR, Settings, ErrorControl_Off,, "\N0S48=128S36=3"
+HKR, Settings, ErrorControl_Forced,, "\N2S48=128S36=4"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+
+[Modem3.AddReg] ; Intel Faxmodem 9600 PCMCIA (MBFM6821)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Init, 2,, "AT&FE0W1V1S95=47<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3S48=7S36=7"
+HKR, Settings, ErrorControl_Off,, "\N0S48=128S36=3"
+HKR, Settings, ErrorControl_Forced,, "\N2S48=128S36=4"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+
+[Modem4.AddReg] ; Intel Faxmodem 14.4 PCMCIA (MBFM6830)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&FE0V1S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3S48=7S36=7"
+HKR, Settings, ErrorControl_Off,, "\N0S48=128S36=3"
+HKR, Settings, ErrorControl_Forced,, "\N2S48=128S36=4"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, ErrorControl_Cellular,, "\N3S48=7S36=7-K1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2S48=128S36=4-K1"
+
+[Modem5.AddReg] ; Intel Faxmodem 14.4 PCMCIA (MBFM6831)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Init, 2,, "AT&FE0W1V1S95=47<cr>"
+HKR, Settings, ErrorControl_Forced,, "\N2S48=128S36=4"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, ErrorControl_Cellular,, "\N3S48=7S36=7-K1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2S48=128S36=4-K1"
+
+[Modem6.AddReg] ; Intel Cellular Faxmodem 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&FE0W1V1S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C1S46=2"
+HKR, Settings, Compression_Off,, "%%C0S46=0"
+HKR, Settings, ErrorControl_On,, "S48=7 S36=7"
+HKR, Settings, ErrorControl_Off,, "S48=128 S36=3"
+HKR, Settings, ErrorControl_Forced,, "S48=128 S36=4"
+HKR, Settings, ErrorControl_Cellular,, "S48=7 S36=7 -K1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "S48=128 S36=4 -K1"
+
+[Modem7.AddReg] ; International Faxmodem 24-96 PCMCIA"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V1\V2<cr>"
+HKR, Settings, SpeedNegotiation_Off,, "%%N6"
+HKR, Settings, SpeedNegotiation_On,, "%%N0"
+
+[Modem8.AddReg] ; Intel International Faxmodem 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&FE0W1V1S95=47<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3S48=7S36=7"
+HKR, Settings, ErrorControl_Off,, "\N0S48=128S36=3"
+HKR, Settings, ErrorControl_Forced,, "\N2S48=128S36=4"
+HKR, Settings, Compression_On,, "%%C3S46=138"
+HKR, Settings, Compression_Off,, "%%C0S46=136"
+HKR, Settings, ErrorControl_Cellular,, "\N3S48=7S36=7 -K1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2S48=128S36=4 -K1"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[VerboseResponses]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmitex.inx b/private/unimodem/inf/mdmitex.inx
new file mode 100644
index 000000000..e96f68f3a
--- /dev/null
+++ b/private/unimodem/inf/mdmitex.inx
@@ -0,0 +1,459 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Intertex
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM56F0CD11, UNIMODEM9C635E54
+
+[Models]
+%Modem1% = Modem1, UNIMODEM855CBE23
+%Modem1% = Modem1, UNIMODEMB8715773
+%Modem2% = Modem2, Itex_Modem2, UNIMODEM56F0CD11
+%Modem2% = Modem2, UNIMODEMDD632160
+%Modem3% = Modem3, UNIMODEM36E42237
+%Modem3% = Modem3, Itex_Modem3, UNIMODEMD41A549B
+%Modem4% = Modem4, UNIMODEM69C07DFC
+%Modem4% = Modem4, Itex_Modem4a, UNIMODEMD9D880B5
+%Modem4% = Modem4, PCMCIA\INTERTEX-IX33-PCMCIA_28-9CD9
+%Modem5% = Modem5, Itex_Modem5a, UNIMODEM855CBE23
+%Modem5% = Modem5, PCMCIA\INTERTEX-DATA/FAX_MODEM-342A
+%Modem5% = Modem5, PCMCIA\INTERTEX-IX33-PCMCIA-5358
+%Modem5% = Modem5, UNIMODEM01F0262A
+%Modem6% = Modem6, UNIMODEMBB0A4A00
+%Modem6% = Modem6, UNIMODEMD41A549B
+%Modem7% = Modem7, Itex_Modem7a, UNIMODEM9C635E54
+%Modem7% = Modem7, Itex_Modem7b, UNIMODEM56F0CD11
+%Modem8% = Modem8, Itex_Modem8, UNIMODEM9C635E54
+%Modem8% = Modem8, UNIMODEMB3655524
+%Modem9% = Modem9, UNIMODEMD9D880B5
+%Modem9% = Modem9, Itex_Modem9b, UNIMODEM9C635E54
+%Modem9% = Modem9, PCMCIA\INTERTEX-IX34-PCMCIA-C8FB
+%Modem10% = Modem10, UNIMODEM37A490A3
+%Modem10% = Modem10, UNIMODEM9AB122A9
+%Modem11% = Modem2, UNIMODEM56F0CD11 ; Generic IX33 28.8 / IX34 Extern
+%Modem12% = Modem7, UNIMODEM9C635E54 ; Generic 7a & 9
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, Internal
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, PCMCIA
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Intertex"
+
+; Model strings
+
+Modem1="Intertex IX33 ext 14.4"
+Modem2="Intertex IX33 28.8"
+Modem3="Intertex IX33 intern 14.4"
+Modem4="Intertex IX33 PCMCIA 28.8"
+Modem5="Intertex IX33 PCMCIA"
+Modem6="Intertex IX33 voice 14.4"
+Modem7="Intertex IX34 extern"
+Modem8="Intertex IX34 intern"
+Modem9="Intertex IX34 PCMCIA"
+Modem10="Intertex IX34 voice"
+Modem11="Intertex IX33 28.8 & IX34 extern"
+Modem12="Intertex IX34 modem"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0)M0"
+
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmke.inx b/private/unimodem/inf/mdmke.inx
new file mode 100644
index 000000000..7efca84ec
--- /dev/null
+++ b/private/unimodem/inf/mdmke.inx
@@ -0,0 +1,419 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ke Kommunikations Elektronic
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEM9F4AD308 ; LOGEM 914 V.32bis, 928 V.34
+%Modem2% = Modem2,UNIMODEM2BE7B3AB ; WorldBlazer
+%Modem3% = Modem3,PCMCIA\Psion_Dacom-Gold_Card_PCMCIA_Modem-3471 ; LOGEM 532fax PCMCIA Modem
+%Modem4% = Modem4;no Unimodemid ; LOGEM 64K ISDN Terminal-Adapter X.75 Modus
+%Modem5% = Modem5;no Unimodemid ; LOGEM 64K ISDN Terminal-Adapter Datex-J Modus
+
+; Installation sections
+
+[Modem1] ; LOGEM 914 V.32bis, 928 V.34
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; WorldBlazer
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; LOGEM 532fax PCMCIA Modem
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem4] ; LOGEM 64K ISDN Terminal-Adapter X.75 Modus
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem5] ; LOGEM 64K ISDN Terminal-Adapter Datex-J Modus
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; LOGEM 914 V.32bis, 928 V.34
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, INIT,3,,"AT S0=0 &D2 &I0<cr>"
+
+[Modem2.AddReg] ; WorldBlazer
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, INIT,2,,"AT&F S50=0 S38=1 &D2<cr>"
+HKR, Settings, FlowControl_Off,, "S58=0 S68=255"
+HKR, Settings, FlowControl_Hard,, "S58=2 S68=255"
+HKR, Settings, FlowControl_Soft,, "S58=3 S68=255"
+HKR, Settings, ErrorControl_On,, "S180=2 S181=1"
+HKR, Settings, ErrorControl_Off,, "S180=0 S181=1"
+HKR, Settings, ErrorControl_Forced,, "S180=2 S181=2"
+HKR, Settings, Compression_On,, "S190=1"
+HKR, Settings, Compression_Off,, "S190=0"
+HKR, Settings, Blind_On,, "X1"
+HKR, Settings, InactivityTimeout,, "S41=<#>"
+
+[Modem3.AddReg] ; LOGEM 532fax PCMCIA Modem
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, INIT,3,,"AT S95=250<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N4"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+
+[Modem4.AddReg] ; LOGEM 64K ISDN Terminal-Adapter X.75 Modus
+HKR,, Properties, 1, 00,00,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, 30,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 3,, "AT E1 V1 &D2 F70 \N6 X1 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+HKR, Settings, SpeakerMode_Off,,
+HKR, Settings, SpeakerMode_Dial,,
+HKR, Settings, SpeakerMode_On,,
+HKR, Settings, SpeakerMode_Setup,,
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,,
+HKR, Settings, Tone,,
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+HKR, Settings, InactivityTimeout,, "S37=<#>"
+
+[Modem5.AddReg] ; LOGEM 64K ISDN Terminal-Adapter Datex-J Modus
+HKR,, Properties, 1, 00,00,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, 30,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 3,, "AT E1 V1 &D2 F70 \N8 X1 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+HKR, Settings, SpeakerMode_Off,,
+HKR, Settings, SpeakerMode_Dial,,
+HKR, Settings, SpeakerMode_On,,
+HKR, Settings, SpeakerMode_Setup,,
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,,
+HKR, Settings, Tone,,
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+HKR, Settings, InactivityTimeout,, "S37=<#>"
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ke Kommunikations Elektronic (Germany)"
+
+; Model strings
+
+Modem1="ke LOGEM 914 V.32bis, 928 V.34"
+Modem2="ke WorldBlazer"
+Modem3="ke LOGEM 532fax PCMCIA Modem"
+Modem4="LOGEM 64K ISDN Terminal-Adapter X.75 Modus"
+Modem5="LOGEM 64K ISDN Terminal-Adapter Datex-J Modus"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q2"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ABORD<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/COMP<cr><lf>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/COMP<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/COMP<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/COMP<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/COMP<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/COMP<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/COMP<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/COMP<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/COMP<cr><lf>", 1, 02, 03, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/COMP<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT FAST<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmkortx.inx b/private/unimodem/inf/mdmkortx.inx
new file mode 100644
index 000000000..2fdbd646f
--- /dev/null
+++ b/private/unimodem/inf/mdmkortx.inx
@@ -0,0 +1,474 @@
+; Windows Modem Setup File
+; Copyright 1995-1996 Microsoft Corp.
+; Manufacturer: KORTEX International
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem17% = Modem17, UNIMODEM906CB001
+%Modem16% = Modem16, UNIMODEMF65B52BD
+%Modem15% = Modem15, Kortex_Modem15
+%Modem14% = Modem14, UNIMODEMD05BA4A0
+%Modem13% = Modem13, UNIMODEM4F32C3DF
+%Modem12% = Modem12, UNIMODEMDD87DED1
+%Modem11% = Modem11, UNIMODEM25AB1772
+%Modem10% = Modem10, UNIMODEMA2712C92
+%Modem9% = Modem9, PCMCIA\RIPICAA-RC9624AC-7E29
+%Modem9% = Modem9, UNIMODEMB596C5FA
+%Modem8% = Modem8, UNIMODEMA7A3B9D3
+%Modem8% = Modem8, UNIMODEM39166726
+%Modem7% = Modem7, UNIMODEM36B6CC12
+%Modem6% = Modem6, PCMCIA\KORTEX_INTERNATIONAL-KXPRO_144_FAX-1181
+%Modem6% = Modem6, Kortex_Modem6, PCMCIA\RIPICAA-RC144ACL-845A
+%Modem5% = Modem5, UNIMODEMEC53C7D5
+%Modem5% = Modem5, UNIMODEM26AC557F
+%Modem5% = Modem5, UNIMODEMB99FCC34
+%Modem5% = Modem5, UNIMODEM579B6B97
+%Modem5% = Modem5, UNIMODEMC1B1FB3F
+%Modem5% = Modem5, UNIMODEM7C1EE94E
+%Modem5% = Modem5, UNIMODEM02CC60D0
+%Modem5% = Modem5, UNIMODEMFF2B4678
+%Modem4% = Modem4, UNIMODEM828ED1C8
+%Modem4% = Modem4, UNIMODEM5F69F760
+%Modem4% = Modem4, UNIMODEM628ED1C8
+%Modem4% = Modem4, UNIMODEMA4C2E541
+%Modem4% = Modem4, UNIMODEM2797756C
+%Modem3% = Modem3, PCMCIA\KORTEX_INTERNATIONAL-KXPRO_288_FAX-2A5D
+%Modem2% = Modem2, UNIMODEM3D6D197D
+%Modem2% = Modem2, UNIMODEM42BA591B
+%Modem1% = Modem1, UNIMODEM1E7C5E3C
+
+
+; Installation sections
+
+[Modem17] ; KORTEX NUMERIS 288 Externe
+AddReg=All, MfgAddReg, Modem17.AddReg, EXTERNAL
+
+[Modem16] ; KORTEX NUMERIS 288 Interne
+AddReg=All, MfgAddReg, Modem16.AddReg, INTERNAL
+
+[Modem15] ; KORTEX NUMERIS 144 Externe
+AddReg=All, MfgAddReg, Modem15.AddReg, EXTERNAL
+
+[Modem14] ; KORTEX NUMERIS 144 Interne
+AddReg=All, MfgAddReg, Modem14.AddReg, INTERNAL
+
+[Modem13] ; KORTEX NUMERIS Externe
+AddReg=All, MfgAddReg, Modem13.AddReg, EXTERNAL
+
+[Modem12] ; KORTEX NUMERIS Interne
+AddReg=All, MfgAddReg, Modem12.AddReg, INTERNAL
+
+[Modem11] ; KORTEX 2400 LECAM Externe
+AddReg=All, MfgAddReg, Modem11.AddReg, EXTERNAL
+
+[Modem10] ; KORTEX 2400 LECAM Interne
+AddReg=All, MfgAddReg, Modem10.AddReg, INTERNAL
+
+[Modem9] ; KORTEX 2400 PCMCIA
+AddReg=All, MfgAddReg, Modem9.AddReg, PCMCIA
+
+[Modem8] ; KORTEX 2400 et MINITEL FAX Externe
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7] ; KORTEX 2400 et MINITEL FAX Interne
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem6] ; KORTEX 14400 PCMCIA
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5] ; KORTEX 14400 Externe
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4] ; KORTEX 14400 Interne
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; KORTEX 28800 PCMCIA
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2] ; KORTEX 28800 Externe
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; KORTEX 28800 Interne
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+
+; AddReg sections
+
+[Modem17.AddReg] ; KORTEX NUMERIS 288 Externe
+HKR,, Properties, 1, 00,00,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,05,00,00, 00,E1,00,00, 00,FA,00,00
+HKR,, FClass, 1, 07,00,00,00
+HKR, Init, 2,, "AT &O3<cr>"
+HKR, Init, 3,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 4,, "AT &O6<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Init, 6,, "AT &O7<cr>"
+HKR, Init, 7,, "AT S0=0 S95=45<cr>"
+HKR, Init, 8,, "AT &O1<cr>"
+HKR, Init, 9,, "AT S112=32<cr>"
+HKR, Init, 10,, "AT S111=7<cr>"
+HKR, Init, 11,, "AT S0=0 S95=45 \N3 %%C3<cr>"
+HKR, Init, 12,, "AT &O0<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, Modulation_CCITT,, "B0 +MS=11,1,300,28800"
+HKR, Settings, Modulation_Bell,, "B1 +MS=11,1,300,28800"
+HKR, Settings, Modulation_CCITT_V23,, "B0 +MS=3,0,1200,1200"
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, FixModemClass,, "2"
+HKR, Fax, ResetCommand,, "AT S111=2"
+HKR, Fax, SetupCommand,, "AT E0 S0=0"
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.14<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+[Modem16.AddReg] ; KORTEX NUMERIS 288 Interne
+HKR,, Properties, 1, 00,00,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,05,00,00, 00,C2,01,00, 00,FA,00,00
+HKR,, FClass, 1, 07,00,00,00
+HKR, Init, 2,, "AT &O3<cr>"
+HKR, Init, 3,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 4,, "AT &O7<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Init, 6,, "AT &O1<cr>"
+HKR, Init, 7,, "AT S112=32<cr>"
+HKR, Init, 8,, "AT S111=7<cr>"
+HKR, Init, 9,, "AT S0=0 S95=45 \N3 %%C3<cr>"
+HKR, Init, 10,, "AT &O0<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, Modulation_CCITT,, "B0 +MS=11,1,300,28800"
+HKR, Settings, Modulation_Bell,, "B1 +MS=11,1,300,28800"
+HKR, Settings, Modulation_CCITT_V23,, "B0 +MS=3,0,1200,1200"
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, FixModemClass,, "2"
+HKR, Fax, ResetCommand,, "AT S111=2"
+HKR, Fax, SetupCommand,, "AT E0 S0=0"
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+[Modem15.AddReg] ; KORTEX NUMERIS 144 Externe
+HKR,, Properties, 1, 00,00,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,05,00,00, 00,E1,00,00, 00,FA,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Init, 2,, "AT &O3<cr>"
+HKR, Init, 3,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 4,, "AT &O6<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Init, 6,, "AT &O7<cr>"
+HKR, Init, 7,, "AT S0=0 S95=45<cr>"
+HKR, Init, 8,, "AT &O1<cr>"
+HKR, Init, 9,, "AT S112=32<cr>"
+HKR, Init, 10,, "AT S111=7<cr>"
+HKR, Init, 11,, "AT S0=0 S95=45 \N3 %%C3<cr>"
+HKR, Init, 12,, "AT &O0<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, FixModemClass,, "2"
+HKR, Fax, ResetCommand,, "AT S111=2"
+HKR, Fax, SetupCommand,, "AT E0 S0=0"
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.14<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+[Modem14.AddReg] ; KORTEX NUMERIS 144 Interne
+HKR,, Properties, 1, 00,00,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,05,00,00, 00,C2,01,00, 00,FA,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Init, 2,, "AT &O3<cr>"
+HKR, Init, 3,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 4,, "AT &O7<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Init, 6,, "AT &O1<cr>"
+HKR, Init, 7,, "AT S112=32<cr>"
+HKR, Init, 8,, "AT S111=7<cr>"
+HKR, Init, 9,, "AT S0=0 S95=45 \N3 %%C3<cr>"
+HKR, Init, 10,, "AT &O0<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, FixModemClass,, "2"
+HKR, Fax, ResetCommand,, "AT S111=2"
+HKR, Fax, SetupCommand,, "AT E0 S0=0"
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+[Modem13.AddReg] ; KORTEX NUMERIS Externe
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,00,00,00, 00,E1,00,00, 00,FA,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 2,, "AT &O6<cr>"
+HKR, Init, 3,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 4,, "AT &O7<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Init, 6,, "AT &O1<cr>"
+HKR, Init, 7,, "AT S112=32<cr>"
+HKR, Init, 8,, "AT S0=0 S95=45<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.14<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+[Modem12.AddReg] ; KORTEX NUMERIS Interne
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,00,00,00, 00,C2,01,00, 00,FA,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 1,, "AT &O7<cr>"
+HKR, Init, 2,, "AT E0 S0=0 S95=45<cr>"
+HKR, Init, 3,, "AT &O1<cr>"
+HKR, Init, 4,, "AT S112=32<cr>"
+HKR, Init, 5,, "AT S0=0 S95=45<cr>"
+HKR, Hangup, 1,, "AT<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Responses, "<cr><lf>CARRIER 64000<cr><lf>", 1, 01, 00, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: PAD<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 00, 00,FA,00,00, 00,00,00,00
+
+
+[Modem11.AddReg] ; KORTEX 2400 LECAM Externe
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b0,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 2,, "AT Z<cr>"
+HKR, Init, 3,, "AT &F<cr>"
+HKR, Init, 4,, "AT E0 S0=0 T V1<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, Modulation_CCITT,, "F0"
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, Modulation_CCITT_V23,, "F3"
+
+[Modem10.AddReg] ; KORTEX 2400 LECAM Interne
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b0,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 00,00,00,00
+HKR, Init, 2,, "AT Z<cr>"
+HKR, Init, 3,, "AT &F<cr>"
+HKR, Init, 4,, "AT E0 S0=0 T V1<cr>"
+HKR,, Reset,, "AT<cr>"
+HKR, Settings, Modulation_CCITT,, "F0"
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, Modulation_CCITT_V23,, "F3"
+
+[Modem9.AddReg] ; KORTEX 2400 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,4B,00,00, 60,09,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem8.AddReg] ; KORTEX 2400 et MINITEL FAX Externe
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,4B,00,00, 60,09,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem7.AddReg] ; KORTEX 2400 et MINITEL FAX Interne
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,4B,00,00, 60,09,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem6.AddReg] ; KORTEX 14400 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,E1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem5.AddReg] ; KORTEX 14400 Externe
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,E1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem4.AddReg] ; KORTEX 14400 Interne
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,E1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem3.AddReg] ; KORTEX 28800 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,C2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Settings, Modulation_CCITT,, "B0 +MS=11,1,300,28800"
+HKR, Settings, Modulation_Bell,, "B1 +MS=11,1,300,28800"
+HKR, Settings, Modulation_CCITT_V23,, "B0 +MS=3,0,1200,1200"
+
+[Modem2.AddReg] ; KORTEX 28800 Externe
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,C2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Settings, Modulation_CCITT,, "B0 +MS=11,1,300,28800"
+HKR, Settings, Modulation_Bell,, "B1 +MS=11,1,300,28800"
+HKR, Settings, Modulation_CCITT_V23,, "B0 +MS=3,0,1200,1200"
+
+[Modem1.AddReg] ; KORTEX 28800 Interne
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,07,00,00, 00,C2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Settings, Modulation_CCITT,, "B0 +MS=11,1,300,28800"
+HKR, Settings, Modulation_Bell,, "B1 +MS=11,1,300,28800"
+HKR, Settings, Modulation_CCITT_V23,, "B0 +MS=3,0,1200,1200"
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "KORTEX International"
+
+
+; Model strings
+
+Modem17="KORTEX NUMERIS 288 Externe"
+Modem16="KORTEX NUMERIS 288 Interne"
+Modem15="KORTEX NUMERIS 144 Externe"
+Modem14="KORTEX NUMERIS 144 Interne"
+Modem13="KORTEX NUMERIS Externe"
+Modem12="KORTEX NUMERIS Interne"
+Modem11="KORTEX 2400 LECAM Externe"
+Modem10="KORTEX 2400 LECAM Interne"
+Modem9="KORTEX 2400 PCMCIA"
+Modem8="KORTEX 2400 et MINITEL FAX Externe"
+Modem7="KORTEX 2400 et MINITEL FAX Interne"
+Modem6="KORTEX 14400 PCMCIA"
+Modem5="KORTEX 14400 Externe"
+Modem4="KORTEX 14400 Interne"
+Modem3="KORTEX 28800 PCMCIA"
+Modem2="KORTEX 28800 Externe"
+Modem1="KORTEX 28800 Interne"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT Z<cr>"
+HKR, Init, 3,, "AT &F<cr>"
+HKR, Init, 4,, "AT E0 S0=0 T V1 S95=45 \N3 %%C3<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "AT H<cr>"
+HKR, Answer, 1,, "AT A<cr>"
+HKR,, Reset,, "AT &F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 F0"
+HKR, Settings, Modulation_Bell,, "B1 F0"
+HKR, Settings, Modulation_CCITT_V23,, "B0 F3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, ")M1"
+HKR, Settings, Cellular_Off,, ")M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "&K0"
+HKR, Fax, Class1FlowHW,, "&K3"
+HKR, Fax, Class1FlowSW,, "&K4"
+HKR, Fax, Class2FlowOff,, "&K0"
+HKR, Fax, Class2FlowHW,, "&K3"
+HKR, Fax, Class2FlowSW,, "&K4"
+
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
diff --git a/private/unimodem/inf/mdmlasat.inx b/private/unimodem/inf/mdmlasat.inx
new file mode 100644
index 000000000..5ba8a3950
--- /dev/null
+++ b/private/unimodem/inf/mdmlasat.inx
@@ -0,0 +1,513 @@
+; Windows Modem Setup File
+; Copyright 1995-1996 Microsoft Corp.
+; Manufacturer: LASAT COMMUNICATIONS A/S
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\ROK0100
+ExcludeFromSelect=SERENUM\ROK4120
+
+[Modem2.NoResDup]
+UNIMODEM729EF760,UNIMODEMC1B1FB3F,UNIMODEM579B6B97,UNIMODEM26AC557F,UNIMODEMB99FCC34,UNIMODEM7C1EE94E,UNIMODEM02CC60D0,UNIMODEMFF2B4678,UNIMODEMEC53C7D5
+
+[Modem1.NoResDup]
+UNIMODEM3CCDE23D,UNIMODEM40795F6F
+
+[Manufacturer]
+%Mfg% = LASAT
+
+
+; Modem models
+
+[LASAT]
+%Modem12% = Modem12, LASAT_modem5, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem11% = Modem11, LASAT_modem4, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem10% = Modem10, LASAT_modem3, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem9% = Modem9, LASAT_modem2, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem8% = Modem8, LASAT_modem1, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem7% = Modem7, UNIMODEM2E6425E3 ;LASAT unique 640i
+%Modem6% = Modem6, UNIMODEM63BCEE7B ;LASAT CREDIT 288
+%Modem6% = Modem6, UNIMODEM9E96B9D1 ;LASAT CREDIT 288
+%Modem6% = Modem6, UNIMODEMD1F8B849 ;LASAT CREDIT 288
+%Modem6% = Modem6, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_288-BD1B ;LASAT CREDIT 288
+%Modem6% = Modem6, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_288-0AFE ;LASAT CREDIT 288
+%Modem5% = Modem5, UNIMODEM77AF074B ;LASAT CREDIT 144
+%Modem5% = Modem5, UNIMODEM1F4CA49F ;LASAT CREDIT 144
+%Modem5% = Modem5, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_144-7ABA ;LASAT CREDIT 144
+%Modem5% = Modem5, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_144-F6FB ;LASAT CREDIT 144
+%Modem5% = Modem5, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_144-602C ;LASAT CREDIT 144
+%Modem5% = Modem5, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_144-2B36 ;LASAT CREDIT 144
+%Modem5% = Modem5, PCMCIA\LASAT_COMMUNICATIONS_A/S-LASAT_CREDIT_144-2E27 ;LASAT CREDIT 144
+%Modem4% = Modem4, UNIMODEM8C70D25B ;LASAT PCM144 Fax
+%Modem3% = Modem3 ;LASAT unique 24/96
+%Modem2PNP% = Modem2, SERENUM\ROK0100 ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEME07B8BCB ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEM729EF760 ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEM3A7DE24C ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEM01729681 ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEMD4593886 ;LASAT unique SAFIRE 144
+%Modem2% = Modem2, UNIMODEM3145524B ;LASAT unique SAFIRE 144
+%Modem1PNP% = Modem1, SERENUM\ROK4120 ;LASAT unique SAFIRE 288
+%Modem1% = Modem1, UNIMODEM3CCDE23D ;LASAT unique SAFIRE 288
+%Modem1% = Modem1, UNIMODEMC2DAB101 ;LASAT unique SAFIRE 288
+%Modem1% = Modem1, UNIMODEMF3535933 ;LASAT unique SAFIRE 288
+
+
+; Installation sections
+
+[Modem12]
+AddReg=All, MfgAddReg, u640i.shorthold, Modem7.AddReg, External
+
+[Modem11]
+AddReg=All, MfgAddReg, u640i.v110, Modem7.AddReg, External
+
+[Modem10]
+AddReg=All, MfgAddReg, u640i.v120, Modem7.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, u640i.hdlc, Modem7.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, u640i.x25, Modem7.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, u640i.x75, Modem7.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+
+; AddReg sections
+[Modem7.AddReg] ; unique 640i
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 5a,00,00,00, 00,00,00,00, 00,00,00,00, 10,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 1,, "AT%%A<cr>"
+HKR, Settings, FlowControl_Off,, "&K2"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem6.AddReg] ; CREDIT 288
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5.AddReg] ; CREDIT 144
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg] ; PCM144 Fax
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; unique 24/96
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem2.AddReg] ; unique SAFIRE 144
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg] ; unique SAFIRE 288
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Protocol setting of unique 640i
+[u640i.x75] ; X.75 protocol
+HKR, Init, 2,, "AT&F%%AE0V1&S0\N3<cr>"
+
+[u640i.x25] ; X.25 protocol
+HKR, Init, 2,, "AT&F%%AE0V1&S0\N2<cr>"
+
+[u640i.hdlc] ; HDLC protocol
+HKR, Init, 2,, "AT&F%%AE0V1&S0\N1<cr>"
+
+[u640i.v120] ; V.120 protocol
+HKR, Init, 2,, "AT&F%%AE0V1&S0\N7<cr>"
+
+[u640i.v110] ; V.110 protocol
+HKR, Init, 2,, "AT&F%%AE0V1&S0\N0<cr>"
+
+[u640i.shorthold] ; Short hold
+HKR, Init, 2,, "ATE0V1&S0\N3%%S1<cr>"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "LASAT"
+
+; Model strings
+
+Modem12="LASAT unique 640i - Short hold"
+Modem11="LASAT unique 640i - V.110"
+Modem10="LASAT unique 640i - V.120"
+Modem9="LASAT unique 640i - HDLC"
+Modem8="LASAT unique 640i - X.25"
+Modem7="LASAT unique 640i - X.75"
+Modem6="LASAT CREDIT 288"
+Modem5="LASAT CREDIT 144"
+Modem4="LASAT PCM144 Fax"
+Modem3="LASAT unique 24-96"
+Modem2PNP="Rockwell compatible 14.4 Plug & Play Modem"
+Modem2="LASAT unique SAFIRE 144"
+Modem1PNP="Rockwell compatible 28.8 Plug & Play Modem"
+Modem1="LASAT unique SAFIRE 288"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&FE0V1&S0 W0S95=44<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+;V.FC responses
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmlasno.inx b/private/unimodem/inf/mdmlasno.inx
new file mode 100644
index 000000000..71062e759
--- /dev/null
+++ b/private/unimodem/inf/mdmlasno.inx
@@ -0,0 +1,14 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: LASAT COMMUNICATIONS A/S
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+
+[Strings]
+Mfg = "LASAT Commun."
diff --git a/private/unimodem/inf/mdmlce.inx b/private/unimodem/inf/mdmlce.inx
new file mode 100644
index 000000000..04bda6b3d
--- /dev/null
+++ b/private/unimodem/inf/mdmlce.inx
@@ -0,0 +1,499 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: LCE
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEMC60F268D
+%Modem2% = Modem2, UNIMODEM655B93D9
+%Modem3% = Modem3, UNIMODEM72948889
+%Modem4% = Modem4
+%Modem5% = Modem5, UNIMODEM13269CAA
+%Modem6% = Modem6, UNIMODEM8CDF6AB3
+%Modem7% = Modem7, UNIMODEME7528F93
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00,07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 3,, "ATE0W1V1<cr>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 10,00,00,00, 00,e1,00,00, 00,e1,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "ATX6=1X8=1S0=0S15=10<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialSuffix,,
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, CallSetupFailTimer,,
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, Blind_Off,,
+HKR, Settings, Blind_On,,
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00,07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "ATE0V1<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B2"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,,
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00,07,00,00,00, 0f,00,00,00, 00,03,00,00, b0,04,00,00, b0,04,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR, Init, 3,, "ATE0V1B1<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, FlowControl_Off,,
+HKR, Settings, FlowControl_Hard,,
+HKR, Settings, FlowControl_Soft,,
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,,
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00,01,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 10,03,00,00, b0,04,00,00, b0,04,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "ATZ<cr>"
+HKR,, Reset,, "ATZ<cr>"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 2a,00,00,00,07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR,, FClass, 1, 01,00,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "ATZ12<cr>"
+HKR, Init, 3,, "ATV1\V1<cr>"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "&Q5"
+HKR, Settings, Compression_Off,, "&Q0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B0"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "LCE"
+
+; Model strings
+
+Modem1="LCE MINI 126"
+Modem2="LCE NUMERIS"
+Modem3="LCE 124"
+Modem4="LCE 124 V23"
+Modem5="LCE 144P"
+Modem6="LCE Minimodem 23"
+Modem7="LCE 132P"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&F<cr>"
+HKR, Init, 3,, "ATE0W1V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "ATE0V0", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "22<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "66<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmlight.inx b/private/unimodem/inf/mdmlight.inx
new file mode 100644
index 000000000..b73a999ea
--- /dev/null
+++ b/private/unimodem/inf/mdmlight.inx
@@ -0,0 +1,372 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: LightSpeed
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM9E972242
+
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 2a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 B0"
+HKR, Settings, Modulation_Bell,, "B1 B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
+; CopyFiles sections
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "LightSpeed"
+
+; Model strings
+
+Modem1="LightSpeed ETH 1414LC"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmlngsh.inx b/private/unimodem/inf/mdmlngsh.inx
new file mode 100644
index 000000000..190935720
--- /dev/null
+++ b/private/unimodem/inf/mdmlngsh.inx
@@ -0,0 +1,280 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: LONGSHINE
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEM18BCD5F8 ; 14.4K 9600 bps External Modem Fax
+%Modem2% = Modem2,UNIMODEM2AB2EA9D ; Pocket Modem FAX-DATA 9600-2400
+%Modem3% = Modem3,PCMCIA\LONGSHINE-FAX/MODEM_9600/2400-4DAB ; PCMCI FAX-Modem CARD 9600-2400
+%Modem4% = Modem4 ; FAX-DATA MODEM 9600-2400 INTERN
+
+
+; Installation sections
+
+[Modem1] ; 14.4K 9600 bps External Modem Fax
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; Pocket Modem FAX-DATA 9600-2400
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; PCMCI FAX-Modem CARD 9600-2400
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem4] ; FAX-DATA MODEM 9600-2400 INTERN
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; 14.4K 9600 bps External Modem Fax
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 3,, "AT &F V1 W1<cr>"
+
+[Modem2.AddReg] ; Pocket Modem FAX-DATA 9600-2400
+HKR,, Properties, 1, 80,01,00,00, 1e,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, FlowControl_Off,, "&E6"
+HKR, Settings, FlowControl_Hard,, "&E6"
+HKR, Settings, FlowControl_Soft,, "&E4"
+
+[Modem3.AddReg] ; PCMCI FAX-Modem CARD 9600-2400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 10,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 03,00,00,00
+HKR, Settings, FlowControl_Off,, ""
+HKR, Settings, FlowControl_Hard,, ""
+HKR, Settings, FlowControl_Soft,, ""
+HKR, Settings, ErrorControl_On,, ""
+HKR, Settings, ErrorControl_Off,, ""
+HKR, Settings, ErrorControl_Forced,, ""
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+
+[Modem4.AddReg] ; Pocket Modem FAX-DATA 9600-2400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, FlowControl_Off,, "&E6"
+HKR, Settings, FlowControl_Hard,, "&E6"
+HKR, Settings, FlowControl_Soft,, "&E4"
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "LONGSHINE"
+
+; Model strings
+
+Modem1="14.4K 9600 bps External Modem Fax"
+Modem2="Pocket FAX-DATA Modem 9600-2400"
+Modem3="PCMCIA FAX-Modem CARD 9600-2400"
+Modem4="FAX-DATA MODEM 9600-2400 INTERN"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,,
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr>OK<lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CED<cr><lf> ", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR SERIAL SPEED SETUP<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 00,00,00,00, 2c,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 00,00,00,00, 58,02,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 V.42<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 V.42<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 V.42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 V.42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600T V.42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 NORMAL<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 NORMAL<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 NORMAL<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 NORMAL<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 V.42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400T V.42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 9600 NORMAL<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600T RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400T RELIABLE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL/V42<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/MNP5<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/MNP5<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/MNP5<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/MNP5<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/MNP5<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 03, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42BIS<cr><lf>", 1, 02, 00, 00,96,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42BIS<cr><lf>", 1, 02, 00, 00,96,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42BIS<cr><lf>", 1, 02, 00, 00,96,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42BIS<cr><lf>", 1, 02, 00, 00,96,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42BIS<cr><lf>", 1, 02, 00, 00,96,00,00, 40,38,00,0
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL 1<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL 2<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL 3<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL 4<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL 5<cr><lf> ", 1, 02, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmart.inx b/private/unimodem/inf/mdmmart.inx
new file mode 100644
index 000000000..480efd1cf
--- /dev/null
+++ b/private/unimodem/inf/mdmmart.inx
@@ -0,0 +1,326 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Martignoni Electronics AG
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1,UNIMODEMF13D8588 ; Bullet E1414 MX-DX
+%Modem2% = Modem2,UNIMODEMEB359D62 ; Bullet 100E 28800
+%Modem3% = Modem3, Mart_Modem3, PCMCIA\E-TECH-C1414AX-0839 ; Bullet PCMCIA 14
+%Modem4% = Modem4,UNIMODEMC3C3BED2 ; Martignoni Cash Com
+%Modem5% = Modem1,UNIMODEM17054A5F ; Bullet PC 192 MX
+%Modem6% = Modem1,UNIMODEMFC12BBBA ; Bullet ModemMan V.terbo
+%Modem7% = Modem1,Mart_Modem7 ; Bullet ModemMan Plus
+%Modem8% = Modem1,Mart_Modem8 ; Bullet ModemMan
+%Modem9% = Modem9,UNIMODEMDDB3B812 ; SpiderMan
+
+; Installation sections
+
+[Modem1] ; E1414MX-DX
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; Bullit 100E 28800
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; E-Tech C1414AX PCMCIA
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem4] ; E-Tech Cash Com
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem9] ; SpiderMan
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; E1414 MX-DX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, INIT,3,,"AT $X3 &D2<cr>"
+
+[Modem2.AddReg] ;Bullit 100E 28800
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, INIT,3,,"AT $X3 &D2<cr>"
+
+[Modem3.AddReg] ; Bullit PCMCIA 14
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, INIT,3,,"AT $X3 &D2<cr>"
+
+[Modem4.AddReg] ; Martignoni Cash Com
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, INIT,3,,"AT S95=122<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem9.AddReg] ; SpiderMan
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, INIT,3,,"AT W1 V1 &D2<cr>"
+HKR, Settings, InactivityTimeout,, "S40=<#>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Blind_On,, "X1"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Martignoni Electronics AG"
+
+; Model strings
+
+Modem1="Martignoni E1414 MX"
+Modem2="Martignoni Bullet 100E"
+Modem3="Martignoni Bullet PCMCIA 14"
+Modem4="Martignoni Cash Com"
+Modem5="Martignoni Bullet PC 192 MX"
+Modem6="Martignoni Bullet ModemMan V.terbo"
+Modem7="Martignoni Bullet ModemMan Plus"
+Modem8="Martignoni Bullet ModemMan"
+Modem9="Martignoni SpiderMan"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "$F0"
+HKR, Settings, FlowControl_Hard,, "$F4"
+HKR, Settings, FlowControl_Soft,, "$F5"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E0"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, Compression_Off,, "$C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S36=<#>"
+
+HKR, Responses, "<cr><lf>RING<cr><lf>" , 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>" , 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>" , 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>" , 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>" , 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>" , 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>" , 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>" , 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 600<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>" , 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>" , 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>" , 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>" , 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>" , 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>" , 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>" , 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>" , 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>" , 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>" , 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>" , 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>" , 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>" , 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>" , 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>" , 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>" , 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>" , 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>" , 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>" , 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 ALT<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 ALT /MNP 5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 ALT / MNP5<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 LAPM<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 LAPM /V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 LAPM / V.42bis<cr><lf>" , 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>" , 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>" , 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>" , 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>" , 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>" , 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>" , 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>" , 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>" , 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>" , 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>" , 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>" , 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>" , 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>" , 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>" , 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>" , 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>" , 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>" , 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>" , 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>" , 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>" , 1, 01, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>" , 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 2<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 3<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 4<cr><lf>" , 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 5<cr><lf>" , 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>" , 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>" , 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>" , 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>" , 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmcom.inx b/private/unimodem/inf/mdmmcom.inx
new file mode 100644
index 000000000..4c7c53ecb
--- /dev/null
+++ b/private/unimodem/inf/mdmmcom.inx
@@ -0,0 +1,914 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Microcom, Inc.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[DestinationDirs]
+DefaultDestDir=11
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\MNP0281
+ExcludeFromSelect=SERENUM\MNP0342
+ExcludeFromSelect=SERENUM\MNP0336
+ExcludeFromSelect=SERENUM\MNP0339
+ExcludeFromSelect=LPTENUM\MICROCOMDESKPORTE_28D6EE
+ExcludeFromSelect=LPTENUM\MICROCOMDESKPORTE_28AF67
+ExcludeFromSelect=SERENUM\MNP0500
+ExcludeFromSelect=SERENUM\MNP0501
+ExcludeFromSelect=SERENUM\MNP0502
+ExcludeFromSelect=UNIMODEMA7920CFE
+ExcludeFromSelect=UNIMODEMC353466F
+ExcludeFromSelect=UNIMODEMF2287246
+ExcludeFromSelect=UNIMODEMD3036EEC
+
+ExcludeFromSelect.NT=LPTENUM\MICROCOMTRAVELPORTE_1FF4
+ExcludeFromSelect.NT=PCMCIA\MICROCOM__INC.-TRAVELCARD_28.8P_DATA/FAX_MODEM-05A2
+ExcludeFromSelect.NT=LPTENUM\MICROCOMDESKPORTE_28D6EE
+ExcludeFromSelect.NT=MICROCOM_Modem6P
+ExcludeFromSelect.NT=LPTENUM\MICROCOMDESKPORTE_28AF67
+ExcludeFromSelect.NT=MICROCOM_Modem3P
+ExcludeFromSelect.NT=PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8_DATA/FAX_MODEM-2288
+ExcludeFromSelect.NT=PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8K_DATA/FAX_MODEM-E5FD
+ExcludeFromSelect.NT=PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AC80
+ExcludeFromSelect.NT=PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AD71
+ExcludeFromSelect.NT=PCMCIA\TDK-DF2814_DATA/FAX_MODEM-9C19
+
+
+[Modem17.NoResDup]
+UNIMODEM338C3E2E,UNIMODEM733C4E29
+
+[Modem12.NoResDup]
+UNIMODEM4BF3E5C4
+
+[Modem10.NoResDup]
+UNIMODEM6D92E082
+
+[Modem6.NoResDup]
+UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15
+
+[Modem5.NoResDup]
+UNIMODEMD3036EEC,UNIMODEMF2287246,UNIMODEMC353466F
+
+[Modem4.NoResDup]
+UNIMODEM99EB2611,UNIMODEMC9720A17
+
+[Modem3.NoResDup]
+UNIMODEM4BF3E5C4,UNIMODEMC93A08AB
+
+[Modem1.NoResDup]
+UNIMODEMA3EEEF33
+
+[Manufacturer]
+%Mfg% = Models
+%TDK% = TDK
+
+[Models]
+%Modem18% = Modem8, UNIMODEMA7920CFE ; combo QX/4232bis II & DeskPorte
+%Modem17PNP% = Modem17, SERENUM\MNP0502 ; Microcom DeskPorte 28.8S internal
+%Modem17% = Modem17, UNIMODEM338C3E2E ; Microcom DeskPorte 28.8S internal
+%Modem17% = Modem17, MDMMCOM_Modem17, UNIMODEM733C4E29 ; Microcom DeskPorte 28.8S internal
+%Modem16% = Modem16, UNIMODEM23719FC3 ; Microcom QX/4232bis +
+%Modem15% = Modem15, MDMMCOM_Modem15, UNIMODEMA7920CFE ; Microcom QX/4232bis II
+%Modem12% = Modem3, UNIMODEM4BF3E5C4
+%Modem12PNP% = Modem3, SERENUM\MNP0281
+%Modem12P% = Modem3P, LPTENUM\MICROCOMTRAVELPORTE_1FF4
+%Modem11P% = Modem11P, PCMCIA\MICROCOM__INC.-TRAVELCARD_28.8P_DATA/FAX_MODEM-05A2 ; V.34 TravelCard 28.8P Serial
+%Modem11% = Modem11, MDMMCOM_Modem11, PCMCIA\MICROCOM__INC.-TRAVELCARD_28.8P_DATA/FAX_MODEM-05A2 ; V.34/V.FC TravelCard 28.8P Serial
+%Modem11% = Modem11, UNIMODEMBCFF2053 ; V.34 travel card fast serial
+%Modem11% = Modem11, UNIMODEMEEEDA05A ; V.34 travel card fast serial
+%Modem11P% = Modem11P, PCMCIA\MICROCOM__INC.-TRAVELCARD_28.8P______DATA/FAX_MODEM-3B9F ; TravelCard 28.8P Serial
+%Modem11% = Modem11, MDMMCOM_Modem11, PCMCIA\MICROCOM__INC.-TRAVELCARD_28.8P______DATA/FAX_MODEM-3B9F ; TravelCard 28.8P Parallel
+%Modem10P% = Modem10P, MDMMCOM_Modem10P, LPTENUM\MICROCOMDESKPORTE_28D6EE ; Deskporte 28.8P parallel mode
+%Modem10% = Modem10, UNIMODEM6D92E082 ; Deskporte 28.8P serial mode
+%Modem10PNP% = Modem10, SERENUM\MNP0342 ; Deskporte 28.8P serial mode
+%Modem9% = Modem9, UNIMODEM679DE81D ; Microcom MicroPorte 4232bis
+%Modem9% = Modem9, UNIMODEM3EFBD076 ; Microcom MicroPorte 4232bis
+%Modem8% = Modem8, MDMMCOM_Modem8, UNIMODEMA7920CFE ; Microcom DeskPorte
+%Modem7% = Modem7, UNIMODEMCA1D000E ; Microcom TravelPorte
+%Modem6% = Modem6, UNIMODEMCC646872 ; Microcom DeskPorte FAST EP 28.8
+%Modem6% = Modem6, UNIMODEMA4970248 ; Microcom DeskPorte FAST EP 28.8
+%Modem6% = Modem6, UNIMODEMB6071C15 ; Microcom DeskPorte FAST EP 28.8
+%Modem6PNP% = Modem6, SERENUM\MNP0339
+%Modem6P% = Modem6P, MDMMCOM_Modem6P, LPTENUM\MICROCOMDESKPORTE_28D6EE ; Deskporte 28.8P parallel mode
+%Modem6and10P% = Modem6P, LPTENUM\MICROCOMDESKPORTE_28D6EE ; Deskporte 28.8P parallel mode
+%Modem5Fast% = Modem5, MDMMCOM_Modem5Fast, UNIMODEMC353466F ; Microcom DeskPorte FAST
+%Modem5Fast% = Modem5, MDMMCOM_Modem5Fast, UNIMODEMF2287246 ; Microcom DeskPorte FAST
+%Modem5Fast% = Modem5, MDMMCOM_Modem5Fast, UNIMODEMD3036EEC ; Microcom DeskPorte FAST
+%Modem5FastP% = Modem5, MDMMCOM_Modem5FastP, UNIMODEMC353466F ; Microcom DeskPorte FAST
+%Modem5FastP% = Modem5, MDMMCOM_Modem5FastP, UNIMODEMF2287246 ; Microcom DeskPorte FAST
+%Modem5FastP% = Modem5, MDMMCOM_Modem5FastP, UNIMODEMD3036EEC ; Microcom DeskPorte FAST
+%Modem5% = Modem5, UNIMODEMC353466F ; Microcom DeskPorte FAST
+%Modem5% = Modem5, UNIMODEMF2287246 ; Microcom DeskPorte FAST
+%Modem5% = Modem5, UNIMODEMD3036EEC ; Microcom DeskPorte FAST
+%Modem5PNP% = Modem5, SERENUM\MNP0336 ; Microcom DeskPorte FAST
+%Modem5P% = Modem5P, LPTENUM\MICROCOMDESKPORTE_28AF67 ; Microcom DeskPorte FAST Parallel
+%Modem4% = Modem4, MDMMCOM_Modem4, UNIMODEMC9720A17 ; Microcom DeskPorte ES 14.4
+%Modem4% = Modem4, UNIMODEM99EB2611 ; Microcom DeskPorte ES 14.4
+%Modem4PNP% = Modem4, SERENUM\MNP0501 ; Microcom DeskPorte ES 14.4
+%Modem3P% = Modem3P, MDMMCOM_Modem3P ; Microcom TravelPorte FAST parallel
+%Modem3% = Modem3, UNIMODEMC93A08AB ; Microcom TravelPorte FAST
+%Modem2P% = Modem2P, PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8_DATA/FAX_MODEM-2288 ; V.34 travel card fast parallel
+%Modem2% = Modem2, MDMMCOM_Modem2, PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8_DATA/FAX_MODEM-2288 ; V.34 travel card fast serial
+%Modem2% = Modem2, UNIMODEM352C2F38 ; V.34 travel card fast serial
+%Modem2% = Modem2, UNIMODEM352C2F3A ; V.34 travel card fast serial
+%Modem2% = Modem2, UNIMODEM50FE98DE ; V.FC travel card fast serrial
+%Modem2P% = Modem2P, PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8K_DATA/FAX_MODEM-E5FD ; TravelCard FAST serial
+%Modem2% = Modem2, MDMMCOM_Modem2, PCMCIA\MICROCOM__INC.-TRAVELCARD_FAST_28.8K_DATA/FAX_MODEM-E5FD ; TravelCard FAST Parallel
+%Modem1PNP% = Modem1, SERENUM\MNP0500 ; Microcom DeskPorte FAST ES 28.8
+%Modem1% = Modem1, MDMMCOM_Modem1, UNIMODEMA3EEEF33 ; Microcom DeskPorte FAST ES 28.8
+
+[TDK]
+%TDK1P% = Modem2P, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AC80
+%TDK1% = Modem2, MICROCOM_TDK1, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AC80
+%TDK2P% = Modem2P, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AD71
+%TDK2P% = Modem2P, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-9C19
+%TDK2% = Modem2, MICROCOM_TDK2, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-AD71
+%TDK2% = Modem2, MICROCOM_TDK2, PCMCIA\TDK-DF2814_DATA/FAX_MODEM-9C19
+
+; Installation sections
+
+[Modem17]
+AddReg=All, Microcom, ES_2, Modem17.AddReg
+
+[Modem16]
+AddReg=All, Microcom, Modem16.AddReg
+
+[Modem15]
+AddReg=All, Microcom, Modem15.AddReg
+
+[Modem11P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, TravelCard.AddReg, Modem11P.AddReg
+
+[Modem11]
+AddReg=All, Microcom, Modem11.AddReg
+
+[Modem10P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, Modem10P.AddReg
+
+[Modem10]
+AddReg=All, Microcom, Modem10.AddReg
+
+[Modem9]
+AddReg=All, Microcom, Modem9.AddReg
+
+[Modem8]
+AddReg=All, Microcom, Modem8.AddReg
+
+[Modem7]
+AddReg=All, Microcom, Modem7.AddReg
+
+[Modem6P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, Modem6P.AddReg
+
+[Modem6]
+AddReg=All, Microcom, Modem6.AddReg
+
+[Modem5P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, Modem5P.AddReg
+
+[Modem5]
+AddReg=All, Microcom, Modem5.AddReg
+
+[Modem4]
+AddReg=All, Microcom, ES, Modem4.AddReg
+
+[Modem3P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, Modem3P.AddReg
+
+[Modem3]
+AddReg=All, Microcom, Modem3.AddReg
+
+[Modem2P]
+CopyFiles=@ppm.vxd
+AddReg=All, Microcom, TravelCard.AddReg, Modem2P.AddReg
+
+[Modem2]
+AddReg=All, Microcom, Modem2.AddReg
+
+[Modem1]
+AddReg=All, Microcom, ES, Modem1.AddReg
+
+; AddReg sections
+
+[Modem17.AddReg]
+HKR,, DeviceType, 1, 02 ; Internal
+; add cell and speed negotiation
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem16.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, 7F,03,00,00, 00,E1,00,00, 40,38,00,00
+
+[Modem15.AddReg] ; no BONG detection per IHV
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, 7F,03,00,00, 00,E1,00,00, 40,38,00,00
+
+[Modem11P.AddReg]
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,,PortDriver,,ppm.vxd
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem11.AddReg]
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem10P.AddReg]
+HKR,, DeviceType, 1, 05 ; External LPT
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, Override,,ppm.vxd
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem10.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem9.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6P.AddReg]
+HKR,, DeviceType, 1, 05 ; External LPT
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, Override,,ppm.vxd
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem6.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5P.AddReg]
+HKR,, DeviceType, 1, 05 ; External LPT
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, Override,,ppm.vxd
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem5.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+; IHV supports BONG detection
+HKR,, Properties, 1, C0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3P.AddReg]
+HKR,, DeviceType, 1, 05 ; External LPT
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, Override,,ppm.vxd
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem3.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem2P.AddReg]
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,,PortDriver,,ppm.vxd
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Responses, "<lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, , ConfigDelay, 1, b8, 0b, 00, 00 ; Specify pccard.vxd config delay.
+
+[Modem2.AddReg]
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, , ConfigDelay, 1, b8, 0b, 00, 00 ; Specify pccard.vxd config delay.
+
+[TravelCard.AddReg]
+; Logical Configuration Overrides for PPM Operation.
+; COR Description
+; 20 COM1 (3F8) Card Decode
+; 21 COM2 (2F8) Card Decode
+; 22 COM3 (3E8) Card Decode
+; 23 COM4 (2E8) Card Decode
+;
+; 24 COMn (Any) Host Decode
+;
+; 25 PPM1 (3BC) Card Decode
+; 26 PPM2 (378) Card Decode
+; 27 PPM3 (278) Card Decode
+;
+; 30 COM1 (3F8) Card Decode + PPMn (Any) Host Decode
+; 31 COM2 (2F8) Card Decode + PPMn (Any) Host Decode
+; 32 COM3 (3E8) Card Decode + PPMn (Any) Host Decode
+; 33 COM4 (2E8) Card Decode + PPMn (Any) Host Decode
+;
+; 35 PPMn (Any) Host Decode
+
+; COM1(3F8) IRQ(4) PPM(Any) COR=30
+HKR,Override,0000,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,03, FF,03, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 10,00, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 30, 03, \
+00,00,00,00
+
+; COM2(2F8) IRQ(3) PPM(Any) COR=31
+HKR,Override,0001,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,02, FF,02, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 08,00, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 31, 03, \
+00,00,00,00
+
+; COM3(3E8) IRQ(4) PPM(Any) COR=32
+HKR,Override,0002,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,03, EF,03, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 10,00, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 32, 03, \
+00,00,00,00
+
+; COM4(2E8) IRQ(3) PPM(Any) COR=33
+HKR,Override,0003,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,02, EF,02, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 08,00, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 33, 03, \
+00,00,00,00
+
+; COM1(3F8) IRQ(Any) PPM(Any) COR=30
+HKR,Override,0004,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,03, FF,03, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 30, 03, \
+00,00,00,00
+
+; COM2(2F8) IRQ(Any) PPM(Any) COR=31
+HKR,Override,0005,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,02, FF,02, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 31, 03, \
+00,00,00,00
+
+; COM3(3E8) IRQ(Any) PPM(Any) COR=32
+HKR,Override,0006,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,03, EF,03, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 32, 03, \
+00,00,00,00
+
+; COM4(2E8) IRQ(Any) PPM(Any) COR=33
+HKR,Override,0007,1, 00,04,00,00, 00,20,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,02, EF,02, 00,00, 00, 00, AA,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, AA,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 33, 03, \
+00,00,00,00
+
+; No COM, IRQ(Any) PPM(Any) COR=35
+HKR,Override,0008,1, 00,04,00,00, 00,50,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0c,00, 00,00, 00,00, 00,00, 00, 00, FC,FF, 04,00, 00,00, FF,FF, 00,00, 00, 00, 23,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 70,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, 00,01,00,00, 08, 00, 00, 35, 03, \
+00,00,00,00
+
+[Modem1.AddReg] ; no bong, per IHV
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+Mfg = "Microcom, Inc."
+
+Modem18 ="Microcom QX-4232bis II or DeskPorte"
+Modem17PNP ="Microcom DeskPorte 28.8S Internal Plug & Play"
+Modem17 ="Microcom DeskPorte 28.8S Internal"
+Modem16 ="Microcom QX-4232bis Plus"
+Modem15 ="Microcom QX-4232bis II"
+Modem6and10P ="Microcom DeskPorte 28.8P or EP 28.8 Parallel"
+Modem12PNP ="Microcom TravelPorte FAST V.34 Plug & Play"
+Modem12P ="Microcom TravelPorte FAST V.34 Parallel"
+Modem12 ="Microcom TravelPorte FAST V.34"
+Modem11P ="Microcom TravelCard 28.8P"
+Modem11 ="Microcom TravelCard 28.8P Serial"
+Modem10PNP ="Microcom DeskPorte 28.8P Plug & Play"
+Modem10P ="Microcom DeskPorte 28.8P Parallel"
+Modem10 ="Microcom DeskPorte 28.8P"
+Modem9 ="Microcom MicroPorte 4232bis"
+Modem8 ="Microcom DeskPorte"
+Modem7 ="Microcom TravelPorte"
+Modem6PNP ="Microcom DeskPorte FAST EP 28.8 Plug & Play"
+Modem6P ="Microcom DeskPorte FAST EP 28.8 Parallel"
+Modem6 ="Microcom DeskPorte FAST EP 28.8"
+
+Modem5Fast ="Microcom DeskPorte V.34 FAST"
+Modem5FastP ="Microcom DeskPorte V.34 FAST+"
+Modem5PNP ="Microcom DeskPorte V.34 FAST or FAST+ Plug & Play" ; fast+ has caller ID, fast does not
+Modem5P ="Microcom DeskPorte V.34 FAST or FAST+ Parallel"
+Modem5 ="Microcom DeskPorte V.34 FAST or FAST+"
+
+Modem4PNP ="Microcom DeskPorte ES 14.4 Plug & Play"
+Modem4 ="Microcom DeskPorte ES 14.4"
+Modem3P ="Microcom TravelPorte FAST Parallel"
+Modem3 ="Microcom TravelPorte FAST"
+Modem2P ="Microcom TravelCard FAST"
+Modem2 ="Microcom TravelCard FAST Serial"
+Modem1PNP ="Microcom DeskPorte FAST ES 28.8 Plug & Play"
+Modem1 ="Microcom DeskPorte FAST ES 28.8"
+
+TDK = "TDK"
+TDK1P = "TDK DF2814 V.FC"
+TDK1 = "TDK DF2814 V.FC Serial"
+TDK2P = "TDK DF2814 V.34"
+TDK2 = "TDK DF2814 V.34 Serial"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[Microcom]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 %%U2 V0 S0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, ErrorControl_Cellular,, "\N2)M1:E0@M18*H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6)M1:E0@M18*H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "20<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "21<cr>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "25<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "30<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "31<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "34<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "41<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "60<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "61<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "62<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "65<cr>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "68<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+[ES_2] ; new Rockwell verbose style section - modem runs better
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 &D2 &C1 W1 S95=47 S0=0<cr>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N5)M1-K1-Q1:E0@M18*H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2)M1-K1-Q1:E0@M18*H1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+[ES]
+HKR, Init, 2,, "AT&F<cr>"
+HKR, Init, 3,, "AT&C1&D2E0V0W1S95=47<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N5)M1:E0@M18*H1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "62<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmetri.inx b/private/unimodem/inf/mdmmetri.inx
new file mode 100644
index 000000000..49c4256a1
--- /dev/null
+++ b/private/unimodem/inf/mdmmetri.inx
@@ -0,0 +1,99 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Metricom, Inc.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem1% = Modem1, UNIMODEMC7F84985
+%Modem1% = Modem1, UNIMODEM49109F51
+%Modem1% = Modem1, UNIMODEM94B23896
+%Modem1% = Modem1, UNIMODEM20DC635C
+%Modem1% = Modem1, UNIMODEMFD7EC49B
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 01
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 05,00,00,00, 10,02,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00 ; default to 38400
+
+[Strings]
+Mfg = "Metricom, Inc."
+Modem1="Ricochet Wireless Modem"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00,00,00,00,00,00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 Q0 &C1 &D2 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "DT"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K1"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,96,00,00, 00,96,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,e1,00,00, 00,e1,00,00
+HKR, Responses, "21<cr>", 1, 02, 00, 80,70,00,00, 80,70,00,00
+HKR, Responses, "22<cr>", 1, 02, 00, 00,c2,01,00, 00,c2,01,00
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 80,70,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,c2,01,00, 00,c2,01,00
diff --git a/private/unimodem/inf/mdmmhrtz.inx b/private/unimodem/inf/mdmmhrtz.inx
new file mode 100644
index 000000000..bac719207
--- /dev/null
+++ b/private/unimodem/inf/mdmmhrtz.inx
@@ -0,0 +1,747 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Megahertz Corp.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=PCMCIA\MEGAHERTZ-XJ1144-6752
+ExcludeFromSelect=PCMCIA\MEGAHERTZ-XJ1144-5C3E
+ExcludeFromSelect=PCMCIA\MEGAHERTZ-CC3144-4ADE
+ExcludeFromSelect=UNIMODEMD3A140D7
+ExcludeFromSelect=UNIMODEM01C9B825
+
+[Manufacturer]
+%Mfg% = Models
+%Noteworthy% = Noteworthy
+
+[Noteworthy]
+%Modem14% = Modem3, PCMCIA\NOTEWORTHY-NW144XJ-F6A8
+%Modem14% = Modem3, MEGAHERTZ_Modem14, UNIMODEMD3A140D7
+
+[Models]
+%Modem15% = Modem15, PCMCIA\Megahertz-XJ-CC4288-885B
+%Modem15% = Modem15, UNIMODEM1D62B063
+%Modem13% = Modem2, PCMCIA\MEGAHERTZ-XJ1144-5C3E
+%Modem12% = Modem7, UNIMODEM01C9B825
+%Modem11% = Modem7, PCMCIA\MEGAHERTZ-CC3288-9E81
+%Modem11% = Modem7, PCMCIA\MEGAHERTZ-CC3288-2463
+%Modem11% = Modem7, MEGAHERTZ_Modem11, UNIMODEM01C9B825
+%Modem10% = Modem2, UNIMODEMD3A140D7
+%Modem9% = Modem3a, PCMCIA\MEGAHERTZ-CC3144-4ADE
+%Modem8% = Modem5, PCMCIA\MEGAHERTZ-XJ1144-6752
+%Modem7% = Modem7, PCMCIA\MEGAHERTZ-XJ2288-9E81
+%Modem7% = Modem7, UNIMODEMD26704AF
+%Modem7% = Modem7, MEGAHERTZ_Modem7, UNIMODEM01C9B825
+%Modem7% = Modem7, PCMCIA\MEGAHERTZ-XJ2288-B6F8
+%Modem6% = Modem6, MEGAHERTZ_Modem6 ; disabled PCMCIA\MEGAHERTZ-EM1144-T-D79E
+%Modem6% = Modem6, UNIMODEMFFD109DC
+%XJ1144% = Modem2, MEGAHERTZ_XJ1144, UNIMODEMD3A140D7
+%CC396FM% = Modem5, MEGAHERTZ_CC396FM
+%P2144% = Modem4, MEGAHERTZ_P2144
+%XJ1144% = Modem2, MEGAHERTZ_XJ1144, PCMCIA\MEGAHERTZ-XJ1144-6752
+%XJ1144% = Modem2, MEGAHERTZ_XJ1144, PCMCIA\MEGAHERTZ-XJ1144-5C3E
+%XJ196FM% = Modem5, MEGAHERTZ_XJ196FM, PCMCIA\MEGAHERTZ-XJ1144-6752
+%CC3144% = Modem3a, PCMCIA\MEGAHERTZ-CC3144-1B0D
+%CC3144% = Modem3a, UNIMODEMA3114EB1
+%CC3144% = Modem3a, MEGAHERTZ_CC3144, UNIMODEMD3A140D7
+%CC3144% = Modem3a, MEGAHERTZ_CC3144, PCMCIA\MEGAHERTZ-CC3144-4ADE
+%XJ2144% = Modem3, PCMCIA\MEGAHERTZ-XJ2144-5307
+%XJ2144% = Modem3, MEGAHERTZ_XJ2144, PCMCIA\MEGAHERTZ-XJ1144-6752
+%XJ2144% = Modem3, MEGAHERTZ_XJ2144, PCMCIA\MEGAHERTZ-XJ1144-5C3E
+%CC4144% = Modem3, MEGAHERTZ_CC4144, PCMCIA\MEGAHERTZ-CC3144-4ADE
+%CC4144% = Modem3, PCMCIA\MEGAHERTZ-CC4144-8B8D
+%CC4144% = Modem3, UNIMODEMBAA74E47
+%CC2144% = Modem2, MEGAHERTZ_CC2144
+%XJ124FM% = Modem1, PCMCIA\MEGAHERTZ-XJ124FM-F777
+%XJ124FM% = Modem1, PCMCIA\MEGAHERTZ-XJ124FM-8DC9
+%CC324FM% = Modem1, MEGAHERTZ_CC324FM, PCMCIA\MEGAHERTZ-CC324FM-D0CC
+%CC324FM% = Modem1, MEGAHERTZ_CC324FM, UNIMODEM2CC25305
+
+; Installation sections
+
+[Modem15]
+AddReg=All, Megahertz, Rokcar.Responses, Modem15.AddReg, PCMCIA
+
+[Modem7]
+AddReg=All, Megahertz, Modem7.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, Megahertz, Modem6.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, Megahertz, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, Megahertz, Modem4.AddReg, EXTERNAL
+
+[Modem3a]
+AddReg=All, Megahertz, Modem3a.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, Megahertz, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, Megahertz, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, Megahertz, Modem1.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,C2,01,00, 15,20,00,00, 00,00,0A,00, 0A,00,08,00, 00,11,13,00, 00,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -SEC=1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -SEC=1"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 3,, "AT E0 V1 W2 B1<cr>"
+HKR, Init, 4,, "AT &C1 &D2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, DialSuffix,, ""
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F0 L2<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 *H2 -K2 -Q1 @M18 :E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 *H2 -K2 -Q1 @M18 :E0"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3a.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 *H2 -K2 -Q1 @M18 :E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 *H2 -K2 -Q1 @M18 :E0"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+; Strings
+
+[Strings]
+Mfg = "Megahertz Corp."
+
+; Model strings
+
+Modem15="Megahertz XJ-CC4288 Modem"
+Modem13="Megahertz XJ1144 or XJ2144 PCMCIA Modem"
+Modem12="Megahertz CC3288 or XJ2288 PCMCIA Modem"
+Modem11="Megahertz CC3288 PCMCIA Modem"
+Modem10="14400 bps PCMCIA Modem"
+Modem9 ="Megahertz CC3144 or CC4144 PCMCIA"
+Modem8 ="Megahertz PCMCIA Modem"
+Modem7 ="Megahertz XJ2288 PCMCIA Modem"
+Modem6 ="Megahertz EM1144-T PCMCIA Modem+Net Card"
+XJ196FM="Megahertz XJ196FM PCMCIA Modem"
+CC396FM="Megahertz CC396FM PCMCIA Modem"
+P2144 ="Megahertz P2144 V.32bis Pocket Modem"
+XJ2144 ="Megahertz XJ2144 V.32bis PCMCIA Modem"
+CC3144 ="Megahertz CC3144 V.32bis PCMCIA Modem"
+CC4144 ="Megahertz CC4144 V.32bis PCMCIA Modem"
+XJ1144 ="Megahertz XJ1144 V.32bis PCMCIA Modem"
+CC2144 ="Megahertz CC2144 V.32bis PCMCIA Modem"
+XJ124FM="Megahertz XJ124FM V.22bis PCMCIA Modem"
+CC324FM="Megahertz CC324FM V.22bis PCMCIA Modem"
+
+Noteworthy = "Noteworthy"
+Modem14 = "Noteworthy NW144XJ PCMCIA Modem"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[Megahertz]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 W1 B1<cr>"
+HKR, Init, 4,, "AT &C1 &D2 S95=47<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/NONE", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/NONE", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/NONE", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/NONE", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/NONE", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/NONE", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/NONE",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/NONE", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/NONE",1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/NONE", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/NONE", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/NONE", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/NONE", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/NONE", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/NONE", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/NONE", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/NONE", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/NONE", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/NONE", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/NONE", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/NONE", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/NONE", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/NONE", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/NONE", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/NONE", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/NONE", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 16800 V.34",1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200 V.34",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600 V.34",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000 V.34",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400 V.34",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800 V.34",1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION:CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION:MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION:V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION:NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL:NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:MNP 2, 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:MNP 3, 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP 2, 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP 3, 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP 2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP 3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+[Rokcar.Responses]
+HKR, Responses, "PROTOCOL: ALT-EC", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-ETC", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M-EC", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M-ETC", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400 V.34", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800 V.34", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200 V.34", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600 V.34", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000 V.34", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400 V.34", 1, 01, 00, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC",1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC",1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC",1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC",1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC",1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC",1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 31200/VFC",1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 33600/VFC",1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER Transmit: 300 Receive: 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 1200", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 2400", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 4800", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 7200", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 9600", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 12000", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 14400", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 16800", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 19200", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 21600", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 24000", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 26400", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 300 Receive: 28800", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 300", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 2400", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 4800", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 7200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 9600", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 12000", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 14400", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 16800", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 19200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 21600", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 24000", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 26400", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 1200 Receive: 28800", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 300", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 1200", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 4800", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 7200", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 9600", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 12000", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 14400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 16800", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 19200", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 21600", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 24000", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 26400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 2400 Receive: 28800", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 300", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 1200", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 2400", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 7200", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 9600", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 12000", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 14400", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 16800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 19200", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 21600", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 24000", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 26400", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 4800 Receive: 28800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 300", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 1200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 2400", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 4800", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 9600", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 12000", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 14400", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 16800", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 19200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 21600", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 24000", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 26400", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 7200 Receive: 28800", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 300", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 1200", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 2400", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 4800", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 7200", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 12000", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 14400", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 16800", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 19200", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 21600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 24000", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 26400", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 9600 Receive: 28800", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 300", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 1200", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 2400", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 4800", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 7200", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 9600", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 14400r><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 16800", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 19200", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 21600", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 24000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 26400", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 12000 Receive: 28800", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 300", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 1200", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 2400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 4800", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 7200", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 9600", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 12000", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 16800", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 19200", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 21600", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 24000", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 26400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 14400 Receive: 28800", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 300", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 1200", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 2400", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 4800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 7200", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 9600", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 12000", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 14400", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 19200", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 21600", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 24000", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 26400", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 16800 Receive: 28800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 300", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 1200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 2400", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 4800", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 7200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 9600", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 12000", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 14400", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 16800", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 21600", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 24000", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 26400", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 19200 Receive: 28800", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 300", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 1200", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 2400", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 4800", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 7200", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 9600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 12000", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 14400", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 16800", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 19200", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 24000", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 26400", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 21600 Receive: 28800", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 300", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 1200", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 2400", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 4800", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 7200", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 9600", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 12000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 14400", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 16800", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 19200", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 21600", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 26400", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 24000 Receive: 28800", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 300", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 1200", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 2400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 4800", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 7200", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 9600", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 12000", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 14400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 16800", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 19200", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 21600", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 24000", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 26400 Receive: 28800", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 300", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 1200", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 2400", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 4800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 7200", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 9600", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 12000", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 14400", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 16800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 19200", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 21600", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 24000", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 26400", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER Transmit: 28800 Receive: 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmix.inx b/private/unimodem/inf/mdmmix.inx
new file mode 100644
index 000000000..34a0512e2
--- /dev/null
+++ b/private/unimodem/inf/mdmmix.inx
@@ -0,0 +1,482 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: CPV, AXOS, CTK, ESCOM, TKR, VOBIS
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem15% = Modem15, UNIMODEM9ED90380 ; HIGHSCREEN, SAT1, 14400 extern (BOCA)
+%Modem15% = Modem15, UNIMODEM5DFCE1D3 ; HIGHSCREEN, SAT1, 14400 intern (BOCA)
+%Modem14% = Modem14, UNIMODEMEEB1858C ; HIGHSCREEN, SAT1, 14400 intern, extern (ACEEX)
+%Modem13% = Modem13, UNIMODEM3F3754A3 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 PC-CARD
+%Modem12% = Modem12, UNIMODEM56E1413F ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 PC-CARD
+%Modem9% = Modem1, Mix_Modem9, UNIMODEM35128D02 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS V.34
+%Modem6% = Modem6, UNIMODEM037F8A52 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 2.400 extern
+%Modem6% = Modem6, Mix_Modem6, UNIMODEME121B63B ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 2.400 extern
+%Modem6% = Modem6, UNIMODEM94C60CBF ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 2.400 extern
+%Modem2% = Modem2, UNIMODEMAA652351 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 extern
+%Modem2% = Modem2, UNIMODEM0003EB23 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS externes 14.4 Modem
+%Modem2% = Modem2, Mix_Modem2, UNIMODEMA74E9121 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 extern
+%Modem2% = Modem2, UNIMODEM9E71D935 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 extern
+%Modem1% = Modem1, UNIMODEM25E1881B ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 extern
+%Modem1% = Modem1, UNIMODEM1B8A5013 ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 extern
+%Modem1% = Modem1, UNIMODEM9240CB7B ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 extern
+
+
+; Installation sections
+
+[Modem15] ;HIGHSCREEN, SAT1, 14400 intern (BOCA)
+AddReg=All, MfgAddReg, Modem15.AddReg, Internal
+
+[Modem14] ; HIGHSCREEN, SAT1, 14400 intern, extern (ACEEX)
+AddReg=All, MfgAddReg, Modem14.AddReg, External
+
+[Modem13] ;CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 PC-CARD
+AddReg=All, MfgAddReg, Modem13.AddReg, Internal
+
+[Modem12] ;CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 PC-CARD
+AddReg=All, MfgAddReg, Modem12.AddReg, Internal
+
+[Modem6] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 2.400 extern
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem2] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem15.AddReg] ; HIGHSCREEN, SAT1, 14400 intern (BOCA)
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT E1 &D2 &C1 W0 S0=0 S95=249<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+
+[Modem14.AddReg] ;HIGHSCREEN, SAT1, 14400 intern, extern (ACEEX)
+HKR,, Properties, 1, 40,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 33,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0d,00,00,00
+HKR, Init, 3,, "AT E1 Q0 V1 W1 \V1 \J1 S95=249 S10=5 &D2 &C1<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Off,, "&Q0\N0"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Compression_Off,, "S46=136"
+
+[Modem13.AddReg] ;CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4 PC-CARD
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[Modem12.AddReg] ;CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8 PC-CARD
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 0f,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Init, 3,, "AT S6=3 <cr>"
+
+[Modem6.AddReg] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 2.400 extern
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F W0 <cr>"
+HKR,, FClass, 1, 0f,00,00,00
+HKR,, InactivityScale, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem2.AddReg] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 14.4
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 3,, "AT S95=250 <cr>"
+
+[Modem1.AddReg] ; CPV, AXOS, CTK, ESCOM, TKR, VOBIS 28.8
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0b,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "CPV, AXOS, CTK, ESCOM, TKR, VOBIS (Ger)"
+
+; Model strings
+
+Modem15="HIGHSCREEN, SAT1, 14400 intern, extern (BOCA)"
+Modem14="HIGHSCREEN, SAT1, 14400 intern, extern (ACEEX)"
+Modem13="14.4 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN"
+Modem12="28.8 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN "
+Modem9="V.34 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN "
+Modem6="2.4 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN "
+Modem2="14.4 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN "
+Modem1=" 28.8 Modem CPV, AXOS, CTK, ESCOM, TKR, HIGHSCREEN"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Wait 5 seconds,then dial<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Don't use this command at this situation <cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr> <cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03,00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 240/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: ADC<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmoto.inx b/private/unimodem/inf/mdmmoto.inx
new file mode 100644
index 000000000..310e8cb50
--- /dev/null
+++ b/private/unimodem/inf/mdmmoto.inx
@@ -0,0 +1,950 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Motorola
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEME6D36D73 ; Moto 3260, V.34R, 3260 Fast
+ExcludeFromSelect=UNIMODEM3634778C ; Moto 3260, V.34R, 3260 Fast
+ExcludeFromSelect=UNIMODEMEB014F96 ; Moto 3220, 3220 Plus
+ExcludeFromSelect=UNIMODEM08EE69F7 ; Moto 3225, 3229
+ExcludeFromSelect=SERENUM\MOT1501 ; Modem1
+ExcludeFromSelect=SERENUM\MOT1502 ; Modem20
+ExcludeFromSelect=SERENUM\MOT1505 ; Modem19
+ExcludeFromSelect=SERENUM\MOT1111 ; Modem17
+ExcludeFromSelect=SERENUM\MOT1105 ; Modem27
+ExcludeFromSelect=SERENUM\MOT1115 ; Modem27
+ExcludeFromSelect=SERENUM\MOT1114 ; Modem13
+ExcludeFromSelect=ISAPNP\MOT1190 ; Modem28
+ExcludeFromSelect=*MOT1509
+ExcludeFromSelect=*MOT1560
+ExcludeFromSelect=SERENUM\MOT150A
+ExcludeFromSelect=ISAPNP\MOT1580
+ExcludeFromSelect=ISAPNP\MOT15B0
+ExcludeFromSelect=ISAPNP\MOT15A0
+ExcludeFromSelect=UNIMODEM3B65849A ; combo, VoiceSURFR and OnlineSURFR
+
+[Modem1.NoResDup]
+UNIMODEM5982EBD2,UNIMODEMF00E811C
+
+[Modem13.NoResDup]
+MDMGEN
+
+[Modem17.NoResDup]
+MDMGEN
+
+[Modem19.NoResDup]
+UNIMODEMDC74D163,UNIMODEM38F16DBB
+
+[Modem27.NoResDup]
+UNIMODEMED7E70D4,UNIMODEM39277F3D
+
+[Modem28.PosDup]
+*PNP0500
+
+[Modem29.NoResDup]
+UNIMODEME2E38517
+
+[Modem30.PosDup]
+*PNP0500
+
+[Modem31.NoResDup]
+UNIMODEMFC1BFB5B
+
+[Modem32.PosDup]
+*PNP0500
+
+[Modem33.PosDup]
+*PNP0500
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+
+%Modem35% = Modem33, UNIMODEM3B65849A ;combo, voicesurfr or onlinesurfr
+%Modem34% = Modem33, ISAPNP\MOT15A0_DEV0000 ;MOTOROLA VOICESURFR 288 INT
+%Modem34% = Modem33, Moto_Modem34, UNIMODEM3B65849A ;MOTOROLA VOICESURFR 288 INT
+%Modem33% = Modem33, ISAPNP\MOT15B0 ;MOTOROLA OnlineSURFR 28.8 Internal
+%Modem33% = Modem33, Moto_Modem33, UNIMODEM3B65849A ;MOTOROLA OnlineSURFR 28.8 Internal
+
+%Modem32% = Modem32, ISAPNP\MOT1580 ; MOTOROLA Premier 33.6 Internal
+%Modem32% = Modem32, UNIMODEM0C9696A4 ; MOTOROLA Premier 33.6 Internal
+%Modem31PNP% = Modem31, SERENUM\MOT150A ; MOTOROLA Premier 33.6 Desktop
+%Modem31% = Modem31, UNIMODEMFC1BFB5B ; MOTOROLA Premier 33.6 Desktop
+%Modem30% = Modem30, *MOT1560 ; Motorola ModemSURFR Internal 28.8
+%Modem30% = Modem30, UNIMODEMEFAA5854 ; Motorola ModemSURFR Internal 28.8
+%Modem29PNP% = Modem29, *MOT1509 ; Motorola ModemSURFR External 28.8
+%Modem29% = Modem29, UNIMODEME2E38517 ; Motorola ModemSURFR External 28.8
+%Modem29% = Modem29, UNIMODEMC32CFDA3 ; Motorola ModemSURFR External 28.8
+%Modem28% = Modem28, ISAPNP\MOT1190 ; Motorola Lifestyle 28.8 Internal
+%Modem28% = Modem28, UNIMODEM1DC890FB ; Motorola Lifestyle 28.8 Internal
+%Modem27PNP% = Modem27, SERENUM\MOT1115 ; Motorola BitSURFR EXTERNAL
+%Modem27% = Modem27, UNIMODEMED7E70D4 ; Motorola BitSURFR EXTERNAL
+%Modem27PNP% = Modem27, SERENUM\MOT1105 ; Motorola BitSURFR EXTERNAL
+%Modem27% = Modem27, UNIMODEM39277F3D ; Motorola BitSURFR EXTERNAL
+%Modem26% = Modem26, UNIMODEM08EE69F7 ; V3229, V3225
+%Modem25% = Modem23, UNIMODEMEB014F96 ; 3220, 3220 Plus
+%Modem24% = Modem24, MOTO_Modem24, UNIMODEMEB014F96 ; 3220 Plus
+%Modem23% = Modem23, MOTO_Modem23, UNIMODEMEB014F96 ; 3220
+%Modem22% = Modem21, UNIMODEME6D36D73 ; Moto 3260, V.34R, 3260 Fast
+%Modem22% = Modem21, UNIMODEM3634778C ; Moto 3260, V.34R, 3260 Fast
+%Modem21% = Modem21, MOTO_Modem21, UNIMODEME6D36D73 ; 3260
+%Modem21% = Modem21, MOTO_Modem21, UNIMODEM3634778C ; 3260
+%Modem21% = Modem21, UNIMODEM467ABBD7 ; 3260
+%Modem20PNP% = Modem19, SERENUM\MOT1502 ; Lifestyle 288
+%Modem20% = Modem19, UNIMODEMDC74D163 ; Lifestyle 288
+%Modem19PNP% = Modem19, SERENUM\MOT1505 ; Power 288
+%Modem19% = Modem19, UNIMODEM38F16DBB ; Power 288
+%Modem18% = Modem18, MOTO_Modem18, UNIMODEME6D36D73 ; V.34R primary detection
+%Modem18% = Modem18, MOTO_Modem18, UNIMODEM3634778C ; V.34R ID also possible
+%Modem18% = Modem18, UNIMODEMDA89ED8F ; V.34R ID also possible
+%Modem17PNP% = Modem17, SERENUM\MOT1111
+%Modem17% = Modem17, MOTO_Modem17
+%Modem16% = Modem16,"PCMCIA\MOTOROLA-POWER_14.4-77ED"
+%Modem16% = Modem16, UNIMODEME5725C85
+%Modem15% = Modem15,"PCMCIA\MOTOROLA-LIFESTYLE_14.4-AF38" ; Lifestyle PCMCIA
+%Modem15% = Modem15, UNIMODEMD3CBADF6 ; Lifestyle PCMCIA
+%Modem14% = Modem14, MOTO_Modem14, UNIMODEME6D36D73 ; 3260 fast
+%Modem14% = Modem14, UNIMODEMC8C66C8E ; 3260 fast
+%Modem13PNP% = Modem13, SERENUM\MOT1114
+%Modem13% = Modem13, MOTO_Modem13
+%Modem12% = Modem12, UNIMODEM582F321E ; FasTalk 32x
+%Modem11% = Modem11, UNIMODEM8E254ADA
+%Modem11% = Modem11, UNIMODEMC4836E7D
+%Modem10% = Modem10, UNIMODEM2A89953C ; V3229
+%Modem10% = Modem10, MOTO_Modem10, UNIMODEM08EE69F7 ; V3229
+%Modem9% = Modem9, MOTO_Modem9
+%Modem8% = Modem8, MOTO_Modem8, UNIMODEM08EE69F7 ; V3225
+%Modem7% = Modem7, UNIMODEM44D69E90 ; ta110-120
+%Modem6% = Modem6, MOTO_Modem6
+%Modem5% = Modem5, UNIMODEM77DDB4AA ;Cellect 14.4 pocket
+%Modem4% = Modem4, "PCMCIA\MOTOROLA/UDS-CELLECT-8C20" ;Cellect PCMCIA
+%Modem4% = Modem4, UNIMODEM2513B65A ;Cellect PCMCIA
+%Modem3% = Modem3, UNIMODEM8CEBD2B4 ; FasTalk Fax32bx
+%Modem2% = Modem2, UNIMODEM0E313D0B ; Fastalk II
+%Modem1PNP% = Modem1, SERENUM\MOT1501 ; V.3400
+%Modem1% = Modem1, UNIMODEM5982EBD2 ; V.3400
+%Modem1% = Modem1, UNIMODEMF00E811C ; V.3400
+
+
+[Modem33]
+AddReg=All, MfgAddReg, Modem33.AddReg, INTERNAL
+
+[Modem32]
+AddReg=All, MfgAddReg, Modem31.AddReg, INTERNAL
+
+[Modem31]
+AddReg=All, MfgAddReg, Modem31.AddReg, EXTERNAL
+
+[Modem30]
+AddReg=All, MfgAddReg, Modem29.AddReg, INTERNAL
+
+[Modem29]
+AddReg=All, MfgAddReg, Modem29.AddReg, EXTERNAL
+
+[Modem28] ; Motorola Lifestyle, Power 28.8 Internal
+AddReg=All, MfgAddReg, Modem28.AddReg, INTERNAL
+
+[Modem27] ; Motorola BitSURFR
+AddReg=All, MfgAddReg, Modem27.AddReg, EXTERNAL
+
+[Modem26]
+AddReg=All, MfgAddReg, Modem26.AddReg, EXTERNAL
+
+[Modem24]
+AddReg=All, MfgAddReg, Modem24.AddReg, EXTERNAL
+
+[Modem23]
+AddReg=All, MfgAddReg, Modem23.AddReg, EXTERNAL
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, EXTERNAL
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, EXTERNAL
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, EXTERNAL
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, EXTERNAL
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, PCMCIA
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, PCMCIA
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, EXTERNAL
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, EXTERNAL
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, EXTERNAL
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, EXTERNAL
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, EXTERNAL
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, EXTERNAL
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, INTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem33.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F &D2 S0=0 E0 &C1 V1 \V0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem31.AddReg] ; disable ATM2, bell/ccitt, cell: by design
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0B,00,00,00, B7,07,00,00, 00,C2,01,00, 40,83,00,00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 \V3 *MM<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, SpeedNegotiation_Off,, "%%R"
+HKR, Settings, SpeedNegotiation_On,, "%%R2"
+HKR, Settings, CallSetupFailTimer,, "S10=<#>"
+HKR, Settings, InactivityTimeout,, "S58=<#>"
+
+[Modem29.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 \V1 V0 W2 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Modulation_CCITT,, "B"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "%G"
+HKR, Settings, SpeedNegotiation_On,, "%G1"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2c,01,00,00, 2c,01,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 40,38,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, a0,41,00,00, a0,41,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,e1,00,00, 00,e1,00,00
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1c,00,00, 20,1c,00,00
+HKR, Responses, "25<cr>", 1, 02, 00, e0,2e,00,00, e0,2e,00,00
+HKR, Responses, "26<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "27<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,96,00,00
+HKR, Responses, "29<cr>", 1, 02, 00, 60,54,00,00, 60,54,00,00
+HKR, Responses, "30<cr>", 1, 02, 00, c0,5d,00,00, c0,5d,00,00
+HKR, Responses, "31<cr>", 1, 02, 00, 20,67,00,00, 20,67,00,00
+HKR, Responses, "32<cr>", 1, 02, 00, 80,70,00,00, 80,70,00,00
+HKR, Responses, "33<cr>", 1, 01, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "42<cr>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "43<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 01, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 01, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 01, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 01, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 01, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 01, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "82<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "83<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "84<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+[Modem28.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0b,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 \V3 S90=249<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, DialSuffix,, ""
+
+[Modem27.AddReg] ; Motorola BitSURFR
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 30,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 2,, "AT&C1&D2 W0 S0=0 %A2=95 %A4=0 %A96=1<cr>"
+;used to be:HKR, Init, 2,, "AT &F &C1 &D2 E0 V1<cr>"
+
+[Modem26.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 31,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem24.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&F&D2&C1S0=0E0V1*XC1<cr>"
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM0"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem23.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&F&D2&C1S0=0E0V1*XC1<cr>"
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM0"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&F&D2&C1S0=0E0V1*XC1*MM0*CM1<cr>"
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM0"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, Blind_Off,, "*BD2S6=0"
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0b,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT&F&D2&C1E0V1\V3S95=47S90=249<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,f4,01,00, c0,5d,00,00
+HKR, Init, 2,, "AT&F&D2&C1S0=0E0V1*XC1*MM10<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM1"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, Blind_Off,, "*BD2S6=0"
+HKR, Settings, InactivityTimeout,, "*SI5S30=<#>"
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 30,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 2,, "AT&C1&D2 W0 S0=0 %A2=95 %A4=0 %A96=1<cr>"
+; used to be: HKR, Init, 2,, "AT &F &C1 &D2 E0 V1<cr>"
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 3b,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "&F1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&F1\N2"
+HKR, Settings, DialSuffix,, ""
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, DialSuffix,, ""
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,f4,01,00, c0,5d,00,00
+HKR, Init, 2,, "AT&F&D2&C1S0=0E0V1*XC1*MM10<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "*FL0"
+HKR, Settings, FlowControl_Hard,, "*FL3"
+HKR, Settings, FlowControl_Soft,, "*FL1"
+HKR, Settings, ErrorControl_Forced,, "*SM2"
+HKR, Settings, ErrorControl_On,, "*SM3"
+HKR, Settings, ErrorControl_Off,, "*SM0"
+HKR, Settings, Compression_On,, "*DC1"
+HKR, Settings, Compression_Off,, "*DC0"
+HKR, Settings, Blind_Off,, "*BD2S6=0"
+HKR, Settings, InactivityTimeout,, "*SI5S30=<#>"
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00,00,00,00,00, 00,00,00,00, 37,00,00,00, 00,c2,01,00, 00,fa,00,00
+HKR, Init, 2,, "AT&F&C1&D2E0V1S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 33,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, DialSuffix,, ""
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 30,03,00,00, 00,96,00,00, 00,96,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 32,03,00,00, 00,96,00,00, 00,96,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7&J2S7=90S10=60"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6&J2S7=90S10=60"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7&J2S7=90S10=60"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6&J2S7=90S10=60"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, DialSuffix,, ""
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_Forced,, "\N5"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Init, 2,, "AT&F&D2&C1\V1S0=0E0V1W2S90=249<cr>"
+
+[Strings]
+Mfg = "Motorola"
+
+Modem35 = "Motorola 28.8 Internal Data Fax Modem" ; combo, VoiceSURFR and OnlineSURFR
+Modem34 = "Motorola VoiceSURFR 28.8 Internal Plug & Play"
+Modem33 = "Motorola OnlineSURFR 28.8 Internal Plug & Play"
+
+Modem32 = "Motorola Premier 33.6 Internal Plug & Play"
+Modem31PNP = "Motorola Premier 33.6 Desktop Plug & Play"
+Modem31 = "Motorola Premier 33.6 Desktop"
+Modem30="Motorola ModemSURFR Internal 28.8 Plug & Play"
+Modem29PNP="Motorola ModemSURFR External 28.8 Plug & Play"
+Modem29="Motorola ModemSURFR External 28.8"
+Modem28="Motorola Lifestyle 28.8 Internal"
+Modem27PNP="Motorola BitSURFR Plug & Play"
+Modem27="Motorola BitSURFR"
+Modem26="Motorola V.3225 or V.3229"
+Modem25="Motorola 3220 or 3220 Plus"
+Modem24="Motorola 3220 Plus"
+Modem23="Motorola 3220"
+Modem22="Motorola Modem"
+Modem21="Motorola 3260"
+Modem20PNP="Motorola Lifestyle 28.8 V.34 Plug & Play"
+Modem20="Motorola Lifestyle 28.8 External"
+Modem19PNP="Motorola Power 28.8 V.34 Plug & Play"
+Modem19="Motorola Power 28.8 External"
+Modem18="Motorola V.34R"
+Modem17PNP="Motorola TA210 Plug & Play"
+Modem17="Motorola TA210"
+Modem16="Motorola Power 14.4 PCMCIA"
+Modem15="Motorola Lifestyle 14.4 PCMCIA"
+Modem14="Motorola 3260 FAST"
+Modem13PNP="Motorola HMTA 200 (ISDN) Plug & Play"
+Modem13="Motorola HMTA 200 (ISDN)"
+Modem12="Motorola FasTalk 32x"
+Modem11="Motorola V.3257"
+Modem10="Motorola V.3229"
+Modem9 ="Motorola V.3227"
+Modem8 ="Motorola V.3225"
+Modem7 ="Motorola TA110 - TA120"
+Modem6 ="Motorola PCTA120"
+Modem5 ="Motorola CELLect 14.4"
+Modem4 ="Motorola CELLect 14.4 PCMCIA"
+Modem3 ="Motorola FasTalk FAX32bx"
+Modem2 ="Motorola FasTalk II"
+Modem1PNP="Motorola V.3400 Plug & Play"
+Modem1 ="Motorola V.3400"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&F&D2&C1\V1S0=0E0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAPM", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAPM", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAPM", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAPM", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAPM", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAPM", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAPM", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAPM", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAPM", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAPM", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 31200", 1, 02, 00, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 32000", 1, 02, 00, 00,7d,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 31200/MNP", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 32000/MNP", 1, 02, 02, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/MNP", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300/MNP5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP5", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP5", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP5", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP5", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP5", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP5", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP5", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP5", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP5", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 31200/MNP5", 1, 02, 03, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 32000/MNP5", 1, 02, 03, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/MNP5", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP5", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 31200/V42", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 32000/V42", 1, 02, 02, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/V42", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 31200/V42BIS", 1, 02, 03, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 32000/V42BIS", 1, 02, 03, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/V42BIS", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 31200", 1, 01, 00, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 32000", 1, 01, 00, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 33600", 1, 01, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 230400", 1, 01, 00, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL MNP LEVEL 1", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL MNP LEVEL 2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL MNP LEVEL 3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL MNP LEVEL 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL MNP LEVEL 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL PROTOCOL V.42", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL PROTOCOL V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115200/LAPM", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CARRIER 31200/LAPM", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 32000/LAPM", 1, 02, 02, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/LAPM", 1, 02, 02, 40,83,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CARRIER 31200/REL", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 32000/REL", 1, 02, 02, 00,7D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/REL", 1, 02, 02, 40,83,00,00, 00,00,00,00
+
+HKR, Responses, "UN-OBTAINABLE NUMBER", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:V.42", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL:ALTERNATE,", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 2+ CLASS 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 3+ CLASS 4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 2+ CLASS 4+ CLASS 5",1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL:ALTERNATE, <cr><lf>CLASS 3+ CLASS 4+ CLASS 5",1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCON", 1, 03, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmoton.inx b/private/unimodem/inf/mdmmoton.inx
new file mode 100644
index 000000000..23e8fd3f9
--- /dev/null
+++ b/private/unimodem/inf/mdmmoton.inx
@@ -0,0 +1,422 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Motorola UDS
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM6F8F3C1D
+
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, VerbResp, Modem1.AddReg
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Motorola - International"
+
+; Model strings
+
+Modem1="Motorola V.32b42i"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+
+[MfgAddReg]
+HKR,, InactivityScale, 1,3C,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "ATY0L3&C1&D2&S1&R\Q3\V1S39=32S95=47V1E0 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3\Q6"
+HKR, Settings, FlowControl_Soft,, "\Q1\Q5"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[VerbResp]
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps (found by experimentation)
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps (found by experimentation)
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps (found by experimentation)
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - DATA connection
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps (found by experimentation)
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC - Hayes Adaptive Data Compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB - LAPB error-control negotiated
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX - LAPB half-duplex error-control negotiated
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT - LAPB Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB - X.25 error-control negotiated
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX - X.25 half-duplex error-control negotiated
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT - X.25 Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX - V.42 LAPM half-duplex error-control negotiated
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT - V.42 LAPM Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmotou.inx b/private/unimodem/inf/mdmmotou.inx
new file mode 100644
index 000000000..fb3911638
--- /dev/null
+++ b/private/unimodem/inf/mdmmotou.inx
@@ -0,0 +1,391 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Motorola
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+[Models]
+%Modem1% = Modem1, PCMCIA\MOTOROLA-CELLect_3-14EB
+%Modem1% = Modem1, UNIMODEM5DA45FD5
+%Modem2% = Modem2, PCMCIA\MOTOROLA-CELLect_2-54E4
+%Modem2% = Modem2, PCMCIA\MOTOROLA-CELLECT_2_GSM+-0679
+%Modem2% = Modem2, Motorola_Modem2, UNIMODEM64CD4B0B
+%Modem3% = Modem3, PCMCIA\MOTOROLA-CELLect_1+_PCS-6CDB
+%Modem3% = Modem3, UNIMODEM521D9DDC
+%Modem4% = Modem4, PCMCIA\MOTOROLA-CELLect_1+-CA0E
+%Modem4% = Modem4, UNIMODEM4AFA3858
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Motorola"
+
+; Model strings
+
+Modem1="Motorola CELLect 3"
+Modem2="Motorola CELLect 2"
+Modem3="Motorola CELLect 1+ PCS"
+Modem4="Motorola CELLect 1+"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F0 &D2 &C1 E0 -K0 %E2<cr>"
+HKR, Init, 3,, "AT V1 W1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M *H2 :E0 S10=50"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: RLP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmtd.inx b/private/unimodem/inf/mdmmtd.inx
new file mode 100644
index 000000000..1f3072e7b
--- /dev/null
+++ b/private/unimodem/inf/mdmmtd.inx
@@ -0,0 +1,403 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: MTD Systems
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, Mtd_Modem1
+%Modem2% = Modem2, Mtd_Modem2
+%Modem3% = Modem3, Mtd_Modem3
+%Modem4% = Modem4, Mtd_Modem4
+%Modem5% = Modem5, Mtd_Modem5
+%Modem6% = Modem6, Mtd_Modem6
+%Modem7% = Modem7, Mtd_Modem7
+%Modem8% = Modem8, Mtd_Modem8
+%Modem9% = Modem9, Mtd_Modem9
+%Modem10% = Modem10, Mtd_Modem10
+%Modem11% = Modem11, Mtd_Modem11
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, Common, Modem2.AddReg, Internal
+
+[Modem3]
+AddReg=All, Common, ExtAddReg, Extra, Modem3.AddReg, Internal
+
+[Modem4]
+AddReg=All, Common, ExtAddReg, Extra, Modem4.AddReg, External
+
+[Modem5]
+AddReg=All, Common, ExtAddReg, Extra, Modem5.AddReg, Internal
+
+[Modem6]
+AddReg=All, Common, ExtAddReg, Extra, Modem6.AddReg, External
+
+[Modem7]
+AddReg=All, Common, Extra, Modem7.AddReg, External
+
+[Modem8]
+AddReg=All, Common, Modem8.AddReg, External
+
+[Modem9]
+AddReg=All, Common, Modem9.AddReg, External
+
+[Modem10]
+AddReg=All, Common, Modem10.AddReg, External
+
+[Modem11]
+AddReg=All, Extra, Common, Modem11.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F B0 &C1 &D2 <cr>"
+HKR,, Reset,, "AT&F B0 &C1 &D2<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+F4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 50,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 B0 &C1 &D2 <cr>"
+HKR,, Reset,, "AT&F B0 &C0 &D2 <cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+F4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F X1<cr>"
+HKR,, Reset,, "AT&FX1<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q2"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, """H3"
+HKR, Settings, Compression_Off,, """H0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "-R1"
+HKR, Settings, SpeedNegotiation_On,, "-R0"
+HKR, Settings, InactivityTimeout,, "\T=<#>"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 50,01,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT Z <cr>"
+HKR, Init, 3,, "AT X1 <cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, SpeakerVolume_Med,, "L1"
+HKR, Settings, SpeakerVolume_High,, "L2"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 01,00,00,00, 0d,00,00,00, 50,01,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT Z <cr>"
+HKR, Init, 3,, "AT X1 <cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L1"
+HKR, Settings, SpeakerVolume_High,, "L1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 50,01,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT Z <cr>"
+HKR, Init, 3,, "AT X1 <cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, SpeakerVolume_Med,, "L1"
+HKR, Settings, SpeakerVolume_High,, "L2"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 00,01,00,00, 78,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F X1<cr>"
+HKR,, Reset,, "AT&FX1<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q2"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, ""
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "-R1"
+HKR, Settings, SpeedNegotiation_On,, "-R0"
+HKR, Settings, InactivityTimeout,, "\T=<#>"
+
+; CopyFiles sections
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "MTD Systems"
+
+; Model strings
+
+Modem1="MTD 9624 D & MTD 9624 P"
+Modem2="MTD 9624 PC"
+Modem3="MTD Dolphin 14400 PC"
+Modem4="MTD Dolphin 14400 Desktop"
+Modem5="MTD Dolphin 19200 PC"
+Modem6="MTD Dolphin 19200 Desktop"
+Modem7="MTD Lightspeed 14.400"
+Modem8="MTD MT2400 D"
+Modem9="MTD MT2400 Pocket"
+Modem10="MTD MT2400 PC"
+Modem11="MTD MT3242"
+
+; Plug and Play device names
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+
+[ExtAddReg]
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q2"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, """H3"
+HKR, Settings, Compression_Off,, """H0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "&A1"
+HKR, Settings, SpeedNegotiation_On,, "&A0"
+HKR, Settings, Blind_Off,, "X1"
+
+[Extra]
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "20<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "21<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "25<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "26<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "27<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "28<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "29<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "41<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "42<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "43<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "65<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "68<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "71<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "72<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "73<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "74<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "82<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "83<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "84<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "85<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "86<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "87<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "88<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "89<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps (found by experimentation)
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps (found by experimentation)
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps (found by experimentation)
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - DATA connection
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps (found by experimentation)
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC - Hayes Adaptive Data Compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB - LAPB error-control negotiated
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX - LAPB half-duplex error-control negotiated
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT - LAPB Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB - X.25 error-control negotiated
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX - X.25 half-duplex error-control negotiated
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT - X.25 Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX - V.42 LAPM half-duplex error-control negotiated
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT - V.42 LAPM Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+
+
diff --git a/private/unimodem/inf/mdmmts.inx b/private/unimodem/inf/mdmmts.inx
new file mode 100644
index 000000000..f8288360f
--- /dev/null
+++ b/private/unimodem/inf/mdmmts.inx
@@ -0,0 +1,504 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: MultiTech Systems
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Mfg
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMF305F971
+ExcludeFromSelect=UNIMODEMEA9AFAE7
+ExcludeFromSelect=UNIMODEMAC7AC877
+ExcludeFromSelect=UNIMODEM0026139B
+ExcludeFromSelect=SERENUM\MTS0324
+ExcludeFromSelect=SERENUM\MTS0274
+ExcludeFromSelect=SERENUM\MTS0357
+ExcludeFromSelect=SERENUM\MTS0325
+ExcludeFromSelect=SERENUM\MTS0293
+ExcludeFromSelect=SERENUM\MTS0277
+ExcludeFromSelect=SERENUM\MTS0340
+ExcludeFromSelect=SERENUM\MTS0356
+ExcludeFromSelect=SERENUM\MTS0355
+ExcludeFromSelect=SERENUM\MTS0275
+ExcludeFromSelect=UNIMODEM39081E41
+
+
+[Modem14.NoResDup]
+UNIMODEMEEC98681
+
+[Modem11.NoResDup]
+UNIMODEMEA9AFAE7,UNIMODEMAC7AC877,UNIMODEM66F08A72,UNIMODEM20E9E30A
+
+[Modem10.NoResDup]
+UNIMODEMF305F971
+
+[Modem9.NoResDup]
+MDMGEN
+
+[Modem8.NoResDup]
+UNIMODEM0026139B
+
+[Modem7.NoResDup]
+UNIMODEMEA9AFAE7
+
+[Modem6.NoResDup]
+UNIMODEMEDB44228
+
+[Modem5.NoResDup]
+UNIMODEMF305F971
+
+[Modem4.NoResDup]
+UNIMODEMF305F971
+
+[Modem2.NoResDup]
+UNIMODEM47133814,UNIMODEM326F85A4
+
+[Modem1.NoResDup]
+UNIMODEMEA9AFAE7,UNIMODEM39081E41,UNIMODEM8A164F24,UNIMODEMAC7AC877,UNIMODEM7130E8D2
+
+[Mfg]
+%Modem27% = Modem27, UNIMODEM6B49539E ; MT2834ZPX w/I9
+%Modem26% = Modem1, UNIMODEM0D3564B8 ; 1432BAI
+%Modem25% = Modem16, UNIMODEM0026139B ; 1932BL, 2834BL
+%Modem24% = Modem21, UNIMODEM7130E8D2 ; 1432BG German international modem
+%Modem23% = Modem11, UNIMODEMAC7AC877
+%Modem22% = Modem11, UNIMODEMEA9AFAE7
+%Modem21% = Modem4, UNIMODEMF305F971
+%Modem20% = Modem20, UNIMODEM2ADC06CF ; MT2834LT V.34 PCMCIA
+%Modem20% = Modem20, PCMCIA\MULTI-TECH-MT2834LT-E66A ; MT2834LT V.34 PCMCIA
+%Modem19% = Modem11, MTS_Modem19, UNIMODEMAC7AC877 ; 932EAB
+%Modem18% = Modem11, UNIMODEM66F08A72 ; 932EA
+%Modem18% = Modem11, UNIMODEM20E9E30A ; 932EA
+%Modem17% = Modem17, MTS_Modem17, UNIMODEMEA9AFAE7 ; 1432BC
+%Modem16% = Modem16, MTS_Modem16, UNIMODEM0026139B ; 1932BL
+%Modem15% = Modem15, MTS_Modem15 ; 1932BL
+%Modem14PNP% = Modem14, SERENUM\MTS0324 ; 1932PCS
+%Modem14% = Modem14, UNIMODEMEEC98681 ; 1932PCS
+%Modem13% = Modem13, MTS_Modem13 ; 224BA
+%Modem12% = Modem12, UNIMODEM4713F2EA ; 224BAF
+%Modem11PNP% = Modem11, SERENUM\MTS0274 ; 932BA
+%Modem11% = Modem11, MTS_Modem11, UNIMODEMEA9AFAE7 ; 932BA
+
+%Modem11GEN% = Modem11, UNIMODEM39081E41 ; 932BA
+
+%Modem10PNP% = Modem10, SERENUM\MTS0357 ; 2834ZDX
+%Modem10% = Modem10, MTS_Modem10, UNIMODEMF305F971 ; 2834ZDX
+%Modem9PNP% = Modem9, SERENUM\MTS0325 ; 2834PCS
+%Modem9% = Modem9, MTS_Modem9 ; 2834PCS
+%Modem8PNP% = Modem8, SERENUM\MTS0293 ; 2834BL
+%Modem8% = Modem8, MTS_Modem8, UNIMODEM0026139B ; 2834BL
+%Modem7PNP% = Modem7, SERENUM\MTS0277 ; 2834BA
+%Modem7% = Modem7, MTS_Modem7, UNIMODEMEA9AFAE7 ; 2834BA
+%Modem6PNP% = Modem6, SERENUM\MTS0340 ; 1932ZPX
+%Modem6% = Modem6, UNIMODEMEDB44228 ; 1932ZPX
+%Modem5PNP% = Modem5, SERENUM\MTS0356 ; 1932ZDX
+%Modem5% = Modem5, MTS_Modem5, UNIMODEMF305F971 ; 1932ZDX
+%Modem4PNP% = Modem4, SERENUM\MTS0355 ; 1432ZDX
+%Modem4% = Modem4, MTS_Modem4, UNIMODEMF305F971 ; 1432ZDX
+%Modem3% = Modem3, PCMCIA\MULTI-TECH-MT1432LT-4B4C ; 1432LT
+%Modem3% = Modem3, PCMCIA\MULTI-TECH-MT1432LT-CF0D ; 1432LT
+%Modem3% = Modem3, UNIMODEM9C1C22DC ; 1432LT
+%Modem2PNP% = Modem2, SERENUM\MTS0355 ; 1432MU
+%Modem2% = Modem2, UNIMODEM47133814 ; 1432MU
+%Modem2% = Modem2, UNIMODEM326F85A4 ; 1432M
+%Modem1PNP% = Modem1, SERENUM\MTS0275 ; 1432BA
+%Modem1% = Modem1, MTS_Modem1, UNIMODEMEA9AFAE7 ; 1432BA
+%Modem1% = Modem1, MTS_Modem1, UNIMODEM39081E41 ; 1432BA
+
+%Modem1% = Modem1, UNIMODEM8A164F24 ; 1432BA swedish international modem
+%Modem1% = Modem1, MTS_Modem1, UNIMODEMAC7AC877 ; 1432BA swedish international modem
+
+[Modem27]
+AddReg=All, MfgAddReg, Modem27.AddReg, INTERNAL
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, EXTERNAL
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, PCMCIA
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, EXTERNAL
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, EXTERNAL
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, EXTERNAL
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, EXTERNAL
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, EXTERNAL
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, EXTERNAL
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, EXTERNAL
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, EXTERNAL
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, EXTERNAL
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, INTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, EXTERNAL
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem27.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F V1 &D2 &C1 E0 Q0 S0=0 S25=20 $BA0<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem20.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F V1 &D2 &C1 E0 Q0 S0=0 S25=20<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 S25=20<cr>"
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 $BA0 S25=20<cr>"
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 $BA0 S25=20<cr>"
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Strings]
+Mfg = "MultiTech Systems"
+
+Modem27 ="MultiTech MT2834ZPX"
+Modem26 ="MultiModem MT1432BAI"
+Modem25 ="Multitech MultiModem"
+Modem24 ="MultiModem MT1432BG"
+Modem23 ="Multitech MultiModem"
+Modem22 ="Multitech MultiModem"
+Modem21 ="Multitech MultiModem"
+Modem20 ="MultiModem MT2834LT PCMCIA V.34"
+Modem19 ="MultiModem MT932EAB"
+Modem18 ="MultiModem MT932EA"
+Modem17 ="MultiModem MT1432BC"
+Modem16 ="MultiModem MT1932BL"
+Modem15 ="MultiModem MT1932BA"
+Modem14PNP="MultiModem MT1932PCS Plug & Play"
+Modem14 ="MultiModem MT1932PCS"
+Modem13 ="MultiModem MT224BA"
+Modem12 ="MultiModem MT224BAF"
+Modem11PNP="MultiModem MT932BA Plug & Play"
+Modem11 ="MultiModem MT932BA"
+
+Modem11GEN ="MultiModem MT932BA or MT1432BA"
+
+Modem10PNP="MultiModem MT2834ZDX Plug & Play"
+Modem10 ="MultiModem MT2834ZDX"
+Modem9PNP="MultiModem MT2834PCS Plug & Play"
+Modem9 ="MultiModem MT2834PCS"
+Modem8PNP="MultiModem MT2834BL Plug & Play"
+Modem8 ="MultiModem MT2834BL"
+Modem7PNP="MultiModem MT2834BA Plug & Play"
+Modem7 ="MultiModem MT2834BA"
+Modem6PNP="MultiModem MT1932ZPX Plug & Play"
+Modem6 ="MultiModem MT1932ZPX"
+Modem5PNP="MultiModem MT1932ZDX Plug & Play"
+Modem5 ="MultiModem MT1932ZDX"
+Modem4PNP="MultiModem MT1432ZDX Plug & Play"
+Modem4 ="MultiModem MT1432ZDX"
+Modem3 ="MultiModem MT1432LT"
+Modem2PNP="MultiModem MT1432MU Plug & Play"
+Modem2 ="MultiModem MT1432MU"
+Modem1PNP="MultiModem MT1432BA Plug & Play"
+Modem1 ="MultiModem MT1432BA"
+
+; Plug and Play device names
+
+SERENUM\MTS0274.DeviceDesc="MultiModem MT932BA"
+SERENUM\MTS0357.DeviceDesc="MultiModem MT2834ZDX"
+SERENUM\MTS0325.DeviceDesc="MultiModem MT2834PCS"
+SERENUM\MTS0293.DeviceDesc="MultiModem MT2834BL"
+SERENUM\MTS0277.DeviceDesc="MultiModem MT2834BA"
+SERENUM\MTS0340.DeviceDesc="MultiModem MT1932ZPX"
+SERENUM\MTS0356.DeviceDesc="MultiModem MT1932ZDX"
+SERENUM\MTS0324.DeviceDesc="MultiModem MT1932PCS"
+SERENUM\MTS0355.DeviceDesc="MultiModem MT1432ZDX"
+PCMCIA\MULTI-TECH-MT1432LT-4B4C.DeviceDesc="MultiModem MT1432LT"
+;SERENUM\MTS0355.DeviceDesc="MultiModem MT1432MU"
+SERENUM\MTS0275.DeviceDesc="MultiModem MT1432BA"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 S25=20<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&E3"
+HKR, Settings, FlowControl_Hard,, "&E4"
+HKR, Settings, FlowControl_Soft,, "&E5"
+HKR, Settings, ErrorControl_On,, "&E1"
+HKR, Settings, ErrorControl_Off,, "&E0"
+HKR, Settings, ErrorControl_Forced,, "&E2"
+HKR, Settings, Compression_On,, "&E15"
+HKR, Settings, Compression_Off,, "&E14"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "9<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "10<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "19<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "21<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "24<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "26<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "28<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "1R<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5R<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "9R<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "10R<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11R<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12R<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13R<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "19R<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "21R<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "24R<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "26R<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "28R<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "1RC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5RC<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "9RC<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "11RC<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "10RC<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "12RC<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13RC<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "19RC<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "21RC<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "24RC<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "26RC<cR><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "28RC<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "1L<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5L<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "9L<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "10L<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11L<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12L<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13L<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "19L<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "21L<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "24L<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "26L<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "28L<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "1LC<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5LC<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "9LC<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "11LC<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "10LC<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "12LC<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13LC<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "19LC<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "21LC<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "24LC<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "26LC<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "28LC<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 RELIABLE<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 RELIABLE<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 RELIABLE<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 RELIABLE<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 RELIABLE<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 RELIABLE<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 RELIABLE<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 RELIABLE COMPRESSED<cR><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 RELIABLE COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 LAPM COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 LAPM COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 LAPM COMPRESSED<cR><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmmulog.inx b/private/unimodem/inf/mdmmulog.inx
new file mode 100644
index 000000000..e1414195b
--- /dev/null
+++ b/private/unimodem/inf/mdmmulog.inx
@@ -0,0 +1,393 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Mulogic
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM87688465 ; MDA-144.Fax
+
+
+; Installation sections
+
+[Modem1] ; MDA-144.Fax
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; MDA-144.Fax
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Mulogic"
+
+; Model strings
+
+Modem1="Mulogic MDA144FAX"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT &C1 &D2 S0=0 E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=60"
+HKR, Settings, InactivityTimeout,, "S30=60"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 00,00,00,00, 58,02,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "59<cr>", 1, 02, 00, 00,00,00,00, a0,41,00,00
+HKR, Responses, "61<cr>", 1, 02, 00, 00,00,00,00, 60,54,00,00
+HKR, Responses, "62<cr>", 1, 02, 00, 00,00,00,00, c0,5d,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 00,00,00,00, 20,67,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 00,00,00,00, 80,70,00,00
+HKR, Responses, "77<cr>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 02, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 02, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmneuhs.inx b/private/unimodem/inf/mdmneuhs.inx
new file mode 100644
index 000000000..351d6f3fa
--- /dev/null
+++ b/private/unimodem/inf/mdmneuhs.inx
@@ -0,0 +1,231 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Dr. Neuhaus Telekommunikation GmbH
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Neuhaus%
+
+[Manufacturer]
+%Neuhaus% = Neuhaus
+
+; Modem models
+
+[Neuhaus]
+%Modem1% = Modem1,UNIMODEM6242CBF5 ; rank1: SMARTY 19.2 TI
+%Modem2% = Modem2,UNIMODEMDA6F71DD ; SMARTY 14.4 TI
+%Modem3% = Modem3,UNIMODEMCC42604C ; SMARTY 24 TI, 24 PC
+%Modem4% = Modem4,UNIMODEM2F413E8A ; FURY 19.2 TI
+%Modem5% = Modem5, PCMCIA\Dr._Neuhaus-FURY_CARD_14K4-6FCD ; FURY CARD 14.4 PCMCIA
+%Modem5% = Modem5,UNIMODEMB9E02C81 ; FURY CARD 14.4 PCMCIA
+%Modem6% = Modem6, PCMCIA\Dr._Neuhaus-FURY_CARD_19K2-6927 ; FURY CARD 19.2 PCMCIA
+%Modem6% = Modem6,UNIMODEM19DA8A8E ; FURY CARD 19.2 PCMCIA
+%Modem7% = Modem7, PCMCIA\Dr._Neuhaus-GIPSY_CARD-A52A ; GIPSY CARD 9.6 PCMCIA
+%Modem8% = Modem8,UNIMODEMAAA1725E ; SMARTY 28.8 TI V.34
+
+; Installation sections
+
+[Modem1] ; SMARTY 19.2 TI, 19.2 TI
+AddReg=All, MfgNeuhaus, External, VerboseResultCodes, Modem1.AddReg
+
+[Modem2] ; SMARTY 14.4 TI
+AddReg=All, MfgNeuhaus, External, VerboseResultCodes, Modem2.AddReg
+
+[Modem3] ; SMARTY 24 TI, 24 PC
+AddReg=All, MfgNeuhaus, External, VerboseResultCodes, Modem3.AddReg
+
+[Modem4] ; FURY 19.2 TI
+AddReg=All, MfgNeuhaus, External, VerboseResultCodes, Modem4.AddReg
+
+[Modem5] ; FURY CARD 14.4 PCMCIA
+AddReg=All, MfgNeuhaus, PCMCIA, VerboseResultCodes, Modem5.AddReg
+
+[Modem6] ; FURY CARD 19.2 PCMCIA
+AddReg=All, MfgNeuhaus, PCMCIA, VerboseResultCodes, Modem6.AddReg
+
+[Modem7] ; GIPSY CARD 9.6 PCMCIA
+AddReg=All, MfgNeuhaus, PCMCIA, VerboseResultCodes, Modem7.AddReg
+
+[Modem8] ; SMARTY 28.8 TI V.34
+AddReg=All, MfgNeuhaus, External, VerboseResultCodes, Modem8.AddReg
+
+; AddReg sections
+
+[Modem1.AddReg] ; SMARTY 19.2 TI V.32ter DATA+FAX
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, 5a,00,00,00, 00,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem2.AddReg] ; SMARTY 14.4 TI V.32bis DATA+FAX
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem3.AddReg] ; SMARTY 24 TI, 24 PC
+HKR,, Properties, 1, 00,01,00,00, 64,00,00,00, 5a,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, INIT,3,,"AT&F W1<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem4.AddReg] ; FURY 19.2 TI V.32ter DATA+FAX
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, 5a,00,00,00, 00,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem5.AddReg] ; FURY CARD 14.4 PCMCIA v.32bis DATA+FAX
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, 5a,00,00,00, 00,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem6.AddReg] ; FURY CARD 19.2 PCMCIA V.32ter DATA+FAX
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, 5a,00,00,00, 00,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem7.AddReg] ; GIPSY CARD 9.6 PCMCIA V.32bis FAX+DATA only GSM
+HKR,, Properties, 1, 00,00,00,00, 5a,00,00,00, 5a,00,00,00, 00,00,00,00, 00,00,00,00, 37,02,00,00, 00,c2,01,00, 80,25,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Init, 2,, "AT&FE0V1&D2&C1Q0S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem8.AddReg] ; SMARTY 28.8 TI V.34 FAX(1,2)+DATA
+HKR,, Properties, 1, 00,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,07,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0B,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+
+; Neuhaus strings
+Neuhaus = "Dr. Neuhaus"
+
+Modem1= "Dr. Neuhaus SMARTY 19.2 TI V.32ter"
+Modem2= "Dr. Neuhaus SMARTY 14.4 TI V.32bis"
+Modem3= "Dr. Neuhaus SMARTY 24 TI, 24 PC V.22bis"
+Modem4= "Dr. Neuhaus FURY 19.2 TI V.32ter"
+Modem5= "Dr. Neuhaus FURY CARD 14.4 PCMCIA V.32bis"
+Modem6= "Dr. Neuhaus FURY CARD 19.2 PCMCIA V.32ter"
+Modem7= "Dr. Neuhaus GIPSY CARD PCMCIA V.32 GSM"
+Modem8= "Dr. Neuhaus SMARTY 28.8 TI V.34"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[Null]
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, SpeakerVolume_Low,,
+HKR, Settings, SpeakerVolume_Med,,
+HKR, Settings, SpeakerVolume_High,,
+
+[MfgNeuhaus]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FE0V1&D2&C1W2Q0S0=0<cr>"
+HKR, Init, 3,, "AT+FCLASS=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B99" ;Multistandard
+HKR, Settings, Modulation_Bell,, "B90" ;BELL 212
+HKR, Settings, Modulation_CCITT_V23,, "B18" ;V.23
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, FixModemClass,, "2"
+
+[VerboseResultCodes]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200<cr><lf>", 1, 02, 00, E0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600<cr><lf>", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT V.21/REL<cr><lf>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/REL<cr><lf>", 1, 02, 03, E0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/REL<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 03, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 03, 00,c2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 2400/RLP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RLP<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RLP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmniss.inx b/private/unimodem/inf/mdmniss.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmniss.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmnokia.inx b/private/unimodem/inf/mdmnokia.inx
new file mode 100644
index 000000000..178508f15
--- /dev/null
+++ b/private/unimodem/inf/mdmnokia.inx
@@ -0,0 +1,83 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Nokia Mobile Phones
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem1% = Modem1, PCMCIA\Nokia_Mobile_Phones-DTP-2-D431 ; Nokia Cellular Data Card
+%Modem1% = Modem1, UNIMODEMF040944A ; Nokia Cellular Data Card
+
+[Modem1] ; Nokia Cellular Data Card
+AddReg=All, MfgAddReg, Modem1.AddReg
+
+[Modem1.AddReg] ; Nokia Cellular Data Card
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,, PortDriver,, serial.vxd
+HKR,, Contention,, *vcd
+HKR,, Properties, 1, 00,00,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 07,00,00,00, 70,01,00,00, 00,e1,00,00, 80,25,00,00
+HKR, Fax, SetupCommand,, "ATS7=255&D3S34=1"
+
+[Strings]
+Mfg = "Nokia Mobile Phones"
+Modem1="Nokia Cellular Data Card"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR, Init, 2,, "AT&FV0E0&D2&S0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, FlowControl_Off,, "S34=0"
+HKR, Settings, FlowControl_Hard,, "S34=2"
+HKR, Settings, FlowControl_Soft,, "S34=1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, "S35=7"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmnokno.inx b/private/unimodem/inf/mdmnokno.inx
new file mode 100644
index 000000000..511ce944e
--- /dev/null
+++ b/private/unimodem/inf/mdmnokno.inx
@@ -0,0 +1,204 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: NOKIA TELECOMMUNICATIONS
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem2% = Modem2, UNIMODEMC4D75AD4
+%Modem1% = Modem1, NOKIA_Modem1
+
+
+; Installation sections
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, fd,00,00,00, ff,00,00,00,07,00,00,00, 0d,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Settings, SpeedNegotiation_Off,, "!N0"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, fd,00,00,00, ff,00,00,00,07,00,00,00, 0d,00,00,00, ff,03,00,00, 00,84,03,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "NOKIA TELECOMM."
+
+; Model strings
+
+Modem2="NOKIA ECM SW 19200"
+Modem1="NOKIA ECM SW 28800"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&F2&M0\N3E1\V4&C1&D2V1X4E0 S0=0 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F2<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q2"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "!N0"
+HKR, Settings, SpeedNegotiation_On,, "!N2"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "S10=254\N5F3*V53=0&C3*V73=40"
+HKR, Settings, Cellular_Off,, "S10=28\N3F0*V53=3&C1*V73=13"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DISCONNECT<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 2c,01,00,00, 2c,01,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, c0,5d,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,96,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/RELIABLE/MNP<cr><lf>", 1, 02, 02, b0,04,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/RELIABLE/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RELIABLE/MNP<cr><lf>", 1, 02, 02, c0,12,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/RELIABLE/MNP<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RELIABLE/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELIABLE/MNP<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/RELIABLE/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/RELIABLE/MNP<cr><lf>", 1, 02, 02, a0,41,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/RELIABLE/MNP<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/RELIABLE/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/RELIABLE/MNP<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/RELIABLE/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/RELIABLE/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/RELIABLE/LAPM<cr><lf>", 1, 02, 02, b0,04,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RELIABLE/LAPM<cr><lf>", 1, 02, 02, c0,12,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELIABLE/LAPM<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/RELIABLE/LAPM<cr><lf>", 1, 02, 02, a0,41,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/RELIABLE/LAPM<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/RELIABLE/LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,96,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, a0,41,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 20,67,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/RELIABLE/MNP/COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, b0,04,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, c0,12,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, a0,41,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 20,67,00,00, 00,e1,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/RELIABLE/LAPM/COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,e1,00,00
+
diff --git a/private/unimodem/inf/mdmnova.inx b/private/unimodem/inf/mdmnova.inx
new file mode 100644
index 000000000..f5a8de440
--- /dev/null
+++ b/private/unimodem/inf/mdmnova.inx
@@ -0,0 +1,220 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: NovaLink Technologies, Inc
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem1% = Modem1, PCMCIA\NOVALINK_TECH.-NOVAPAK_144/32-3031
+%Modem1% = Modem1, UNIMODEMCCC2418C
+%Modem2% = Modem2, PCMCIA\NovaLink_Technologies-NovaModem_288-00FD
+%Modem2% = Modem2, UNIMODEMBE395E34
+%Modem3% = Modem3, PCMCIA\NovaLink_Technologies-NovaModem_144-2AD7
+%Modem3% = Modem3, UNIMODEM3C4B9920
+%Modem4% = Modem2, PCMCIA\NovaLink_TECH.-NOVAPAK_288/32-2F49
+%Modem4% = Modem2, UNIMODEM4EB68040
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Strings]
+Mfg = "NovaLink Technologies"
+Modem1 = "NovaLink Novapak 14.4-32 Data-Fax-Voice-Pager" ; NMX-14401-01 or NPX-14401-01 (both models)
+Modem2 = "NovaLink Novamodem 28.8 Data-Fax-Voice" ; NMX-28801-01
+Modem3 = "NovaLink Novamodem 14.4 Data-Fax-Voice" ; NMX-14401-01
+Modem4 = "NovaLink Novapak 28.8 Data-Fax-Voice-Pager" ; NPX-28801-01
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F &D2 &C1 E0 V1 W1 S0=0 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0 S48=128 S36=3"
+HKR, Settings, ErrorControl_On,, "\N3 S48=7 S36=7"
+HKR, Settings, ErrorControl_Forced,, "\N2 S48=7 S36=4"
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 :E0 @M18 *H1 S48=7 S36=7"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 :E0 @M18 *H1 S48=7 S36=0"
+HKR, Settings, Compression_On,, "%%C3 S46=138"
+HKR, Settings, Compression_Off,, "%%C0 S46=136"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FC-FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ/VFC", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/VFC", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmnovfx.inx b/private/unimodem/inf/mdmnovfx.inx
new file mode 100644
index 000000000..8ab09042c
--- /dev/null
+++ b/private/unimodem/inf/mdmnovfx.inx
@@ -0,0 +1,405 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: NOVAFAX International
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem21% = Modem21
+%Modem18% = Modem18
+%Modem16% = Modem16
+%Modem15% = Modem15
+%Modem14% = Modem14
+%Modem13% = Modem13
+
+; Installation sections
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, PCMCIA
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, PCMCIA
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, INTERNAL
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, PCMCIA
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, EXTERNAL
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, INTERNAL
+
+
+; AddReg sections
+
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "NOVAFAX International"
+
+; Model strings
+Modem21="NOVAFAX 2400 PCMCIA"
+Modem18="NOVAFAX 144 PCMCIA"
+Modem16="NOVAFAX 144 Carte"
+Modem15="NOVAFAX 288 PCMCIA"
+Modem14="NOVAFAX 288 Box Pocket"
+Modem13="NOVAFAX 288 Carte"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT Z<cr>"
+HKR, Init, 3,, "AT S0=0T S95=45 \N3 %%C3 V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT &F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, ")M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0F0"
+HKR, Settings, Modulation_Bell,, "B1F0"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmolic.inx b/private/unimodem/inf/mdmolic.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmolic.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmolive.inx b/private/unimodem/inf/mdmolive.inx
new file mode 100644
index 000000000..7a1d129b1
--- /dev/null
+++ b/private/unimodem/inf/mdmolive.inx
@@ -0,0 +1,385 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Olivetti AB
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem4% = Modem4, Olive_Modem4
+%Modem3% = Modem3, Olive_Modem3
+%Modem2% = Modem2, Olive_Modem2
+%Modem1% = Modem1, Olive_Modem1
+
+
+; Installation sections
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 80,70,00,00, 00,96,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Olivetti PCMCIA"
+
+; Model strings
+
+Modem4="Olivetti 9672CC"
+Modem3="Olivetti 144CC"
+Modem2="Olivetti 288CC V.FC"
+Modem1="Olivetti 288CC"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &FE0Q0V1W1&C1&S0S0=0S70=64S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmopt1.inx b/private/unimodem/inf/mdmopt1.inx
new file mode 100644
index 000000000..8cfba7215
--- /dev/null
+++ b/private/unimodem/inf/mdmopt1.inx
@@ -0,0 +1,386 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: OPTION INTERNATIONAL
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem3% = Modem3, UNIMODEMA68300DE
+%Modem3% = Modem3, PCMCIA\OPTION-FAX_14400-81D9
+%Modem3% = Modem3, PCMCIA\OPTION_INTERNATIONAL-GSM/PSTN_DATA/FAX_MODEM_V32BIS-2E12
+%Modem3% = Modem3, UNIMODEMA4FF0A70
+%Modem6% = Modem6, PCMCIA\OPTION-FAX_28800-E12A
+%Modem6% = Modem6, PCMCIA\OPTION-FAX_28800-7F07
+%Modem6% = Modem6, PCMCIA\OPTION-FAX_28800-905F
+%Modem6% = Modem6, PCMCIA\OPTION_INTERNATIONAL-GSM/PSTN_DATA/FAX_MODEM_V34-FC53
+%Modem6% = Modem6, UNIMODEMB9E9E3A2
+%Modem7% = Modem7, UNIMODEMA532CB65
+%Modem7% = Modem7, UNIMODEM5D6B4A00
+%Modem7% = Modem7, UNIMODEM2C8C6944
+
+; Installation sections
+
+[Modem3]
+AddReg=All, Common, Modem3.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, Common, Modem6.AddReg, PCMCIA
+
+[Modem7]
+AddReg=All, Common, Modem6.AddReg, INTERNAL
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&FE0V1S0=0S95=47<cr>"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT&FE0V1S0=0S95=47<cr>"
+HKR, Init, 3,, "AT&C1&D2&S0<cr>"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "OPTION International"
+
+; Model strings
+
+Modem3="OPTION GSM Ready PC Card V.32bis"
+Modem6="OPTION GSM Ready PC Card V.34"
+Modem7="OPTION Rosita V.34"
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[Common]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Cellular_On,, ")M1"
+HKR, Settings, Cellular_Off,, ")M0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmoptn.inx b/private/unimodem/inf/mdmoptn.inx
new file mode 100644
index 000000000..a1c5fea69
--- /dev/null
+++ b/private/unimodem/inf/mdmoptn.inx
@@ -0,0 +1,473 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: OPTION INTERNATIONAL
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM2C93D970
+%Modem2% = Modem2, UNIMODEMB2C6B69A
+%Modem3% = Modem3, OPTION_Modem3, UNIMODEMA68300DE
+%Modem3% = Modem3, OPTION_Modem3, PCMCIA\OPTION-FAX_14400-81D9
+%Modem4% = Modem4, PCMCIA\OPTION-FAX_9600-460F
+%Modem5% = Modem5, OPTION_Modem5
+%Modem7% = Modem7, UNIMODEM46F1397A
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg, Internal
+
+[Modem2]
+AddReg=All, Common, Modem2.AddReg, Internal
+
+[Modem3]
+AddReg=All, Common, Modem3.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, Common, Modem4.AddReg, PCMCIA
+
+[Modem5]
+AddReg=All, Common, Modem5.AddReg, External
+
+
+[Modem7]
+AddReg=All, Common, Modem7.AddReg, Internal
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Settings, Cellular_On,, ")M1"
+HKR, Settings, Cellular_Off,, ")M0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &FE0&D2&C1<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Settings, Cellular_On,, ")M1"
+HKR, Settings, Cellular_Off,, ")M0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT E0 &F&D2&C1<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Settings, Cellular_On,, ")M1"
+HKR, Settings, Cellular_Off,, ")M0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 0a,00,00,00
+HKR, Init, 2,, "AT &FE0&D2&C1<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N1"
+HKR, Settings, SpeedNegotiation_On,, "N0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "OPTION International"
+
+; Model strings
+
+Modem1="OPTION Internal V.32bis"
+Modem2="OPTION 2496 Fax Data modem"
+Modem3="OPTION PCMCIA V.32bis"
+Modem4="OPTION PCMCIA V.22bis"
+Modem5="OPTION UNIQUE V.32bis"
+Modem7="OPTION Rosita II Fax Data modem"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmosi.inx b/private/unimodem/inf/mdmosi.inx
new file mode 100644
index 000000000..e496213c5
--- /dev/null
+++ b/private/unimodem/inf/mdmosi.inx
@@ -0,0 +1,190 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Ositech Communications, Inc.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Ositech1% = Ositech1, MF\OSITECHJOD_DEV0 ; 14.4
+
+%Ositech1% = Ositech1, UNIMODEMAE43F073 ; 14.4
+
+%Ositech2% = Ositech2, MF\OSITECHJOD_DEV2 ; 28.8
+
+[Ositech1] ; 14.4
+AddReg=All, MfgAddReg, JOD1.AddReg, PCMCIA
+
+[Ositech2] ; 28.8
+AddReg=All, MfgAddReg, JOD2.AddReg, PCMCIA
+
+[JOD1.AddReg] ; 14.4
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[JOD2.AddReg] ; 28.8
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+Mfg = "Ositech"
+Ositech1 = "Ositech Trumpcard 14.4 Data+Fax+Cellular Modem"
+Ositech2 = "Ositech Trumpcard 28.8 Data+Fax+Cellular Modem"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 Q0 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_Off,, "%C0"
+HKR, Settings, Compression_On,, "%C3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "\N3&Q5)M1-K1*H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2&Q5)M1-K1*H1"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT 300
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "+F4<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; +FCERROR
+
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT - CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpace.inx b/private/unimodem/inf/mdmpace.inx
new file mode 100644
index 000000000..b7e6707ca
--- /dev/null
+++ b/private/unimodem/inf/mdmpace.inx
@@ -0,0 +1,489 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Pace Micro Communications Ltd
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem11%= Modem11,PCMCIA\PACE_MICRO_COMMUNICATIONS-MICROLIN_FX_NB_34-3393
+%Modem11%= Modem11,UNIMODEM2857402B
+%Modem10%= Modem10,UNIMODEMDA37905B
+%Modem9% = Modem9, Pace_Modem9
+%Modem8% = Modem8, UNIMODEM2D1D2549
+%Modem7% = Modem7, PCMCIA\PACE_MICRO_COMMUNICATIONS-MICROLIN_FX_NB_32_PLUS-5F0F
+%Modem6% = Modem6, Pace_Modem6
+%Modem5% = Modem5, UNIMODEM9E9CA04C
+%Modem5% = Modem5, UNIMODEM35283002
+%Modem4% = Modem4, UNIMODEM211BD2EC
+%Modem3% = Modem3, UNIMODEM7D5F439E
+%Modem3% = Modem3, UNIMODEMB683D3D0
+%Modem2% = Modem2, UNIMODEM7BB48C4B
+%Modem1% = Modem1, Pace_Modem1
+
+
+[Modem11]
+Addreg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, MfgAddRegExtra, Modem8.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 01,00,00,00, 0d,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F V1 E0 S95=46<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F V1 E0 S95=46<cr>"
+
+[Strings]
+Mfg = "Pace Micro Communications Ltd"
+
+Modem11="Pace Microlin NB 34 PCMCIA Modem"
+Modem10="Pace MobiFax 144"
+Modem9 ="Pace Linnet Message Desk"
+Modem8 ="Pace Ultralink 32 Plus"
+Modem7 ="Pace Microlin fx NB 32 Plus PCMCIA Modem"
+Modem6 ="Pace Linnet 34fx & Microlin fx 34 Internal Modem"
+Modem5 ="Pace Microlin fx 32 Plus Pocket Modem"
+Modem4 ="Pace Microlin fx 32 Plus Internal Modem"
+Modem3 ="Pace Linnet 34fx Ext & Microlin fx 34 Pocket Modem"
+Modem2 ="Pace Linnet 32 Plus fx"
+Modem1 ="Pace Linnet VFC"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddRegExtra]
+HKR, Settings, FlowControl_Hard,, "&K1"
+HKR, Settings, FlowControl_Soft,, "&K2"
+HKR, Settings, ErrorControl_On,, "\N0"
+HKR, Settings, ErrorControl_Off,, "\P0"
+HKR, Settings, ErrorControl_Forced,, "\N1"
+HKR, Settings, Compression_On,, "\P2"
+HKR, Settings, Compression_Off,, "\P0"
+HKR, Settings, SpeedNegotiation_Off,, "&A0"
+HKR, Settings, SpeedNegotiation_On,, "&A1"
+
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F V1 E0 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3)M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4)M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAPM", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42bis", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42Bis", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42bis ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42Bis ", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42bis", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42Bis", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42bis ", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42Bis ", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42bis", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42Bis", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42bis ", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42Bis ", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42bis", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42Bis", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42bis ", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42Bis ", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42bis",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42bis ",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42bis",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42bis ",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/VFC", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAPM", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/VFC", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAPM", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/VFC", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAPM", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/VFC", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAPM", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/VFC", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAPM", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/VFC", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAPM", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/VFC", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAPM", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAPM", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAPM", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42Bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42Bis ", 1, 02, 03, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42Bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42Bis ", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42bis ", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpbit.inx b/private/unimodem/inf/mdmpbit.inx
new file mode 100644
index 000000000..a18010401
--- /dev/null
+++ b/private/unimodem/inf/mdmpbit.inx
@@ -0,0 +1,419 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: PowerBit
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem7% = Modem7, UNIMODEM49D2192C
+%Modem6% = Modem6, UNIMODEM6B126CF6
+%Modem5% = Modem5, UNIMODEM68697185
+%Modem4% = Modem4, UNIMODEM0ABBBB30
+%Modem4% = Modem4, PCMCIA\AU-SYSTEM-POWERBIT_V.34_PCMCIA-CCC4
+%Modem3% = Modem3, UNIMODEME58719B2
+%Modem2% = Modem2, UNIMODEMD2931DAF
+%Modem2% = Modem2, PCMCIA\AU-SYSTEM-POWERBIT_V.32BIS_PCMCIA-BA29
+%Modem1% = Modem1, UNIMODEM8593F694
+
+
+; Installation sections
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, PCMCIA
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, Internal
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "PowerBit"
+
+; Model strings
+
+Modem7="PowerBit 28.8-EDV"
+Modem6="PowerBit eb"
+Modem5="PowerBit EV"
+Modem4="PowerBit PCMCIA 28.8"
+Modem3="PowerBit internt 14.4"
+Modem2="PowerBit PCMCIA"
+Modem1="PowerBit 28.8-ED"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0)M0"
+
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpcsi.inx b/private/unimodem/inf/mdmpcsi.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmpcsi.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmpctel.inx b/private/unimodem/inf/mdmpctel.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmpctel.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmpenr.inx b/private/unimodem/inf/mdmpenr.inx
new file mode 100644
index 000000000..47ece945e
--- /dev/null
+++ b/private/unimodem/inf/mdmpenr.inx
@@ -0,0 +1,203 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Penril Datability Networks
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Penril%
+
+[Manufacturer]
+%Penril% = Penril
+
+[Penril]
+; rank 0 disallowed due to autodetection lockup as Penrils switch to V.25bis on AT%V
+%P2632% = P2632, PENRIL_P2632, UNIMODEM6537D3A5 ; ALX P2632 v2.__.__ No autodetect
+%P2633% = P2633, PENRIL_P2633, UNIMODEM6537D3A5 ; ALX P2633 v2.__.__ No autodetect
+%P2144% = P2144, PENRIL_P2144, UNIMODEM6537D3A5 ; ALX P2144 v2.__.__ No autodetect
+%P3192% = P3192, PENRIL_P3192, UNIMODEM6537D3A5 ; ALX P3192 v2.__.__ No autodetect
+%P2192% = P2192, PENRIL_P2192, UNIMODEM6537D3A5 ; ALX P2192 v2.__.__ No autodetect
+%P3428% = P3428, PENRIL_P3428, UNIMODEM9AC8EEEC. ; ALX 3428M v3.02.02 No autodetect
+
+[P2632]
+AddReg=All, MfgAddReg, P2632.AddReg, EXTERNAL
+
+[P2633] ;[P2144]
+AddReg=All, MfgAddReg, P2633.AddReg, EXTERNAL
+
+[P2144]
+AddReg=All, MfgAddReg, P2633.AddReg, EXTERNAL
+
+[P3192] ;[P2192]
+AddReg=All, MfgAddReg, P3192.AddReg, EXTERNAL
+
+[P2192]
+AddReg=All, MfgAddReg, P3192.AddReg, EXTERNAL
+
+[P3428]
+AddReg=All, MfgAddReg, P3428.AddReg, EXTERNAL
+
+[P2632.AddReg] ; 9600 dce
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, 77,03,00,00, 00,C2,01,00, 80,25,00,00
+
+[P2633.AddReg] ;[P2144.AddReg] ; 14.4 dce
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, 77,03,00,00, 00,C2,01,00, 40,38,00,00
+
+[P3192.AddReg] ;[P2192.AddReg] ; 19.2 dce
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[P3428.AddReg] ; 33.6 dce
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, 77,03,00,00, 00,84,03,00, 40,83,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,c2,01,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[Strings]
+Penril = "Penril Datability Networks" ; American continent
+
+P2632 = "Penril Alliance V.32-FAX (9600 bps)"
+P2633 = "Penril Alliance V.32bis-FAX (14400 bps)"
+P2144 = "Penril DX V.32bis-FAX (14400 bps)"
+P3192 = "Penril Alliance V.32terbo-FAX (19200 bps)"
+P2192 = "Penril DX V.32terbo-FAX (19200 bps)"
+P3428 = "Penril Alliance V.34-FAX (33600 bps)"
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V0 &D2 &C1 V0 \V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, "" ; by design, dial suffix disabled
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q1"
+HKR, Settings, FlowControl_Soft,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\E1\P2\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\E1\P2\N2"
+HKR, Settings, Compression_On,, "\M0"
+HKR, Settings, Compression_Off,, "\M1\C4"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+
+HKR, Responses, "11<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "13<cr>", 1, 02, 00, E0,2e,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+
+HKR, Responses, "15<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; connect 4800
+HKR, Responses, "18<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600
+
+HKR, Responses, "21<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+
+HKR, Responses, "22<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "72<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; dialing
+;[P3428]
+
+HKR, Responses, "73<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 19200 bps
+HKR, Responses, "74<cr>", 1, 02, 00, C0,5d,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 19200 bps
+HKR, Responses, "75<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 19200 bps
+HKR, Responses, "76<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 19200 bps
+HKR, Responses, "90<cr>", 1, 02, 00, e0,79,00,00, 00,00,00,00 ; CONNECT 31200 - Connection at 19200 bps
+HKR, Responses, "91<cr>", 1, 02, 00, 40,83,00,00, 00,00,00,00 ; CONNECT 33600 - Connection at 19200 bps
+
+; buffered mode and DTE/carrier responses
+HKR, Responses, "28<cr>", 1, 01, 00, 00,4b,00,00, 00,00,00,00 ; 19.2
+HKR, Responses, "29<cr>", 1, 01, 00, 00,25,00,00, 00,00,00,00 ; 9600
+HKR, Responses, "30<cr>", 1, 01, 00, 00,12,00,00, 00,00,00,00 ; 4800
+HKR, Responses, "31<cr>", 1, 01, 00, 00,09,00,00, 00,00,00,00 ; 2400
+HKR, Responses, "32<cr>", 1, 01, 00, 00,04,00,00, 00,00,00,00 ; 1200
+HKR, Responses, "33<cr>", 1, 01, 00, 00,02,00,00, 00,00,00,00 ; 600
+HKR, Responses, "34<cr>", 1, 01, 00, 00,01,00,00, 00,00,00,00 ; 300
+HKR, Responses, "53<cr>", 1, 01, 00, 00,96,00,00, 00,00,00,00 ; 38.4
+HKR, Responses, "64<cr>", 1, 01, 00, 00,E1,00,00, 00,00,00,00 ; 57.6
+HKR, Responses, "77<cr>", 1, 01, 00, 00,C2,01,00, 00,00,00,00 ; 115.2
+;[P3428]
+HKR, Responses, "82<cr>", 1, 01, 00, 00,84,03,00, 00,00,00,00 ; 230.4
+
+; MNP mode and DTE/carrier response
+HKR, Responses, "36<cr>", 1, 01, 02, 00,4b,00,00, 00,00,00,00 ; 19.2
+HKR, Responses, "37<cr>", 1, 01, 02, 00,25,00,00, 00,00,00,00 ; 9600
+HKR, Responses, "38<cr>", 1, 01, 02, 00,12,00,00, 00,00,00,00 ; 4800
+HKR, Responses, "39<cr>", 1, 01, 02, 00,09,00,00, 00,00,00,00 ; 2400
+HKR, Responses, "40<cr>", 1, 01, 02, 00,04,00,00, 00,00,00,00 ; 1200
+HKR, Responses, "41<cr>", 1, 01, 02, 00,02,00,00, 00,00,00,00 ; 600
+HKR, Responses, "42<cr>", 1, 01, 02, 00,01,00,00, 00,00,00,00 ; 300
+HKR, Responses, "54<cr>", 1, 01, 02, 00,96,00,00, 00,00,00,00 ; 38.4
+HKR, Responses, "65<cr>", 1, 01, 02, 00,E1,00,00, 00,00,00,00 ; 57.6
+HKR, Responses, "78<cr>", 1, 01, 02, 00,C2,01,00, 00,00,00,00 ; 115.2
+;[P3428]
+HKR, Responses, "83<cr>", 1, 01, 02, 00,84,03,00, 00,00,00,00 ; 230.4
+
+; V42 mode and DTE/carrier response
+HKR, Responses, "44<cr>", 1, 01, 02, 00,4b,00,00, 00,00,00,00 ; 19.2
+HKR, Responses, "45<cr>", 1, 01, 02, 00,25,00,00, 00,00,00,00 ; 9600
+HKR, Responses, "46<cr>", 1, 01, 02, 00,12,00,00, 00,00,00,00 ; 4800
+HKR, Responses, "47<cr>", 1, 01, 02, 00,09,00,00, 00,00,00,00 ; 2400
+HKR, Responses, "48<cr>", 1, 01, 02, 00,04,00,00, 00,00,00,00 ; 1200
+HKR, Responses, "49<cr>", 1, 01, 02, 00,02,00,00, 00,00,00,00 ; 600
+HKR, Responses, "50<cr>", 1, 01, 02, 00,01,00,00, 00,00,00,00 ; 300
+HKR, Responses, "52<cr>", 1, 01, 02, 00,96,00,00, 00,00,00,00 ; 38.4
+HKR, Responses, "66<cr>", 1, 01, 02, 00,E1,00,00, 00,00,00,00 ; 57.6
+HKR, Responses, "79<cr>", 1, 01, 02, 00,C2,01,00, 00,00,00,00 ; 115.2
+;[P3428]
+HKR, Responses, "84<cr>", 1, 01, 02, 00,84,03,00, 00,00,00,00 ; 230.4
+
+; V42bis mode and DTE/carrier response
+HKR, Responses, "55<cr>", 1, 01, 03, 00,96,00,00, 00,00,00,00 ; 38.4
+HKR, Responses, "56<cr>", 1, 01, 03, 00,4b,00,00, 00,00,00,00 ; 19.2
+HKR, Responses, "57<cr>", 1, 01, 03, 00,25,00,00, 00,00,00,00 ; 9600
+HKR, Responses, "58<cr>", 1, 01, 03, 00,12,00,00, 00,00,00,00 ; 4800
+HKR, Responses, "59<cr>", 1, 01, 03, 00,09,00,00, 00,00,00,00 ; 2400
+HKR, Responses, "60<cr>", 1, 01, 03, 00,04,00,00, 00,00,00,00 ; 1200
+HKR, Responses, "61<cr>", 1, 01, 03, 00,02,00,00, 00,00,00,00 ; 600
+HKR, Responses, "62<cr>", 1, 01, 03, 00,01,00,00, 00,00,00,00 ; 300
+HKR, Responses, "67<cr>", 1, 01, 03, 00,E1,00,00, 00,00,00,00 ; 57.6
+HKR, Responses, "80<cr>", 1, 01, 03, 00,C2,01,00, 00,00,00,00 ; 115.2
+;[P3428]
+HKR, Responses, "85<cr>", 1, 01, 03, 00,84,03,00, 00,00,00,00 ; 230.4
diff --git a/private/unimodem/inf/mdmphils.inx b/private/unimodem/inf/mdmphils.inx
new file mode 100644
index 000000000..0d72948fc
--- /dev/null
+++ b/private/unimodem/inf/mdmphils.inx
@@ -0,0 +1,442 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Philips Modem AB
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM20F78E77
+
+[Models]
+%Modem4% = Modem2, UNIMODEM20F78E77
+%Modem3% = Modem3, UNIMODEM5DCA2219
+%Modem2% = Modem2, Philips_Modem2, UNIMODEM20F78E77
+%Modem1% = Modem1, Philips_Modem1, UNIMODEM20F78E77
+%Modem1% = Modem1, UNIMODEM0F11BF3D
+
+
+; Installation sections
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, PCMCIA
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Philips Modem AB"
+
+; Model strings
+
+Modem4="Philips KeyPak 100 & Keypak 200"
+Modem3="Philips KeyPak 300"
+Modem2="Philips KeyPak 200"
+Modem1="Philips KeyPak 100"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3C,00,00,00
+HKR, Init, 2,, "AT &F E0 Q0 V1 &C1 &D2 &S0 S0=0 \Q10<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q10"
+HKR, Settings, FlowControl_Soft,, "\Q5"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "31<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "34<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "73<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "74<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "75<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "76<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "78<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "79<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "91<cr>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "93<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "94<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "95<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "96<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "97<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "98<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "99<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "113<cr>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "114<cr>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "115<cr>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "116<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "117<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "118<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "119<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpn1.inx b/private/unimodem/inf/mdmpn1.inx
new file mode 100644
index 000000000..82845e85a
--- /dev/null
+++ b/private/unimodem/inf/mdmpn1.inx
@@ -0,0 +1,437 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: P.N.B/Compaq/Magic RAM/Newlink/Alltron
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%PNBMR%
+
+[Manufacturer]
+%PNBMR% = PNB
+%CompaqMR% = Compaq
+%MagicRAMMR% = MagicRAM
+%NewlinkMR% = Newlink
+%AlltronMR% = Alltron
+
+
+[PNB]
+%PNB4% = Modem4, UNIMODEMD7C42C70
+%PNB4% = Modem4, UNIMODEMC5C327FD
+%PNB3% = Modem3, UNIMODEM93B2D4ED
+%PNB3% = Modem3, UNIMODEM1F504B7E
+%PNB3% = Modem3, UNIMODEM5D66B168
+%PNB2% = Modem2, "PCMCIA\P.N.B-288_DATA_FAX_MODEM-88E9" ; PCMCIA Rio V.34
+%PNB1% = Modem1, "PCMCIA\P.N.B-144_DATA_FAX_MODEM-163B" ; PCMCIA Rio V.32bis
+
+
+[Compaq]
+%Compaq2% = Modem2, "PCMCIA\COMPAQ_COMPUTER-COMPAQ_288_DATA_FAX_MODEM__SERIES_571-C6AC"
+%Compaq1% = Modem1, "PCMCIA\COMPAQ_COMPUTER-COMPAQ_144_DATA_FAX_MODEM__SERIES_570-EAAF"
+
+
+[MagicRAM]
+%MagicRAM2% = Modem2, "PCMCIA\MAGIC_RAM-288_DATA_FAX_MODEM-E4D1"
+%MagicRAM1% = Modem1, "PCMCIA\MAGIC_RAM-144_DATA_FAX_MODEM-E493"
+
+
+[Newlink]
+%Newlink2% = Modem2, "PCMCIA\NEWLINK-288_DATA_FAX_MODEM-E494"
+%Newlink1% = Modem1, "PCMCIA\NEWLINK-144_DATA_FAX_MODEM-0DB0"
+
+
+[Alltron]
+%Alltron2% = Modem2, "PCMCIA\ALLTRON-288_DATA_FAX_MODEM-37A4"
+%Alltron1% = Modem1, "PCMCIA\ALLTRON-144_DATA_FAX_MODEM-51BC"
+
+
+[Modem4] ; Rio Pocket Voice V.34
+AddReg=All, MfgAddReg, Responses, Modem4.AddReg, EXTERNAL
+
+[Modem3] ; Rio Pocket Voice V.32bis
+AddReg=All, MfgAddReg, Responses, Modem3.AddReg, EXTERNAL
+
+[Modem2] ; PCMCIA V34
+AddReg=All, MfgAddReg, Responses, Modem2.AddReg, PCMCIA
+
+[Modem1] ; PCMCIA V32bis
+AddReg=All, MfgAddReg, Responses, Modem1.AddReg, PCMCIA
+
+;************ AddReg sections ************
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,E1,00,00, 40,38,00,00
+
+[Modem2.AddReg] ; PCMCIA V.34
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg] ; PCMCIA V.32bis
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Strings]
+ClassName = "Modem"
+PNBMR = "P.N.B"
+PNB4 = "P.N.B Rio Pocket Voice V.34"
+PNB3 = "P.N.B Rio Pocket Voice V.32bis"
+PNB2 = "P.N.B PCMCIA Rio V.34"
+PNB1 = "P.N.B PCMCIA Rio V.32bis"
+
+CompaqMR = "Compaq"
+Compaq2 = "Compaq 288 Data+Fax Modem Series 571"
+Compaq1 = "Compaq 144 Data+Fax Modem Series 570"
+
+MagicRAMMR = "Magic RAM"
+MagicRAM2 = "Magic RAM 288 International Data Fax Modem"
+MagicRAM1 = "Magic RAM 144 International Data Fax Modem"
+
+NewlinkMR = "Newlink"
+Newlink2 = "Newlink TOP 34"
+Newlink1 = "Newlink TOP 32"
+
+AlltronMR = "Alltron"
+Alltron2 = "Alltron AL-SW28800 Modem"
+Alltron1 = "Alltron AL-SW14400 Modem"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q6"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K1)M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Responses]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpnb.inx b/private/unimodem/inf/mdmpnb.inx
new file mode 100644
index 000000000..27fc6514a
--- /dev/null
+++ b/private/unimodem/inf/mdmpnb.inx
@@ -0,0 +1,582 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: P.N.B
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM54D240E6, UNIMODEMF910BD97
+
+[Models]
+%Modem14% = Modem1, UNIMODEMF910BD97 ; Generic PNB/USR
+%Modem13% = Modem6, UNIMODEM54D240E6
+%Modem12% = Modem12, PNB_Modem12 ; RIO 2 PC
+%Modem11% = Modem11, UNIMODEMA81878D6
+%Modem11% = Modem11, "PCMCIA\P.N.B-14.4_Data/Fax/Voice_Modem" ; PCMCIA RIO Voice
+%Modem10% = Modem10, "PCMCIA\P.N.B-14.4/14.4_Data/Fax_Modem" ; PCMCIA RIO
+%Modem9% = Modem9, UNIMODEM3E821AA8 ; RIO Voice Pocket
+%Modem8% = Modem8, UNIMODEM78697A9E ; PNB Niagra
+%Modem8% = Modem8, UNIMODEMC6B8744F ; PNB Niagra
+%Modem7% = Modem7, UNIMODEMF4C117AB
+%Modem6% = Modem6, PNB_Modem6, UNIMODEM54D240E6
+%Modem5% = Modem5, UNIMODEM41F3E959
+%Modem5% = Modem5, "PCMCIA\P.N.B-2400/9600_DATA/FAX_MODEM-C151" ;P.N.B Samantha PCMCIA
+%Modem4% = Modem4, UNIMODEM4F9E7812 ;P.N.B Rio Grande PCMCIA
+%Modem4% = Modem4, "PCMCIA\P.N.B-14.4/14.4_DATA/FAX_MODEM-A32A"
+%Modem4% = Modem4, "PCMCIA\P.N.B-14.4_DATA/FAX/VOICE_MODEM-9C39"
+%Modem3% = Modem3, UNIMODEMBFCDD371
+%Modem2% = Modem2, PNB_Modem2, UNIMODEM54D240E6
+%Modem1% = Modem1, PNB_Modem1, UNIMODEMF910BD97
+
+
+[Modem12] ; RIO 2 PC
+AddReg=All, RIO2, VerbResp, Modem12.AddReg, Internal
+
+[Modem11] ; PCMCIA RIO Voice
+AddReg=All, MfgAddReg, VerbResp, Modem11.AddReg, PCMCIA
+
+[Modem10] ; PCMCIA RIO
+AddReg=All, MfgAddReg, VerbResp, Modem10.AddReg, PCMCIA
+
+[Modem9] ; RIO Voice Pocket
+AddReg=All, MfgAddReg, VerbResp, Modem9.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, VerbResp, Modem8.AddReg, Internal
+
+[Modem7]
+AddReg=All, MfgAddReg, VerbResp, Modem7.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, VerbResp, Modem6.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, VerbResp, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, VerbResp, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, VerbResp, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, VerbResp, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, VerbResp, Modem1.AddReg, External
+
+
+[Modem12.AddReg] ; RIO 2 PC
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem11.AddReg] ; PCMCIA RIO Voice
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem10.AddReg] ; PCMCIA RIO
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem9.AddReg] ; RIO Voice Pocket
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00,07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 0f,00,00,00, c7,07,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, SpeakerVolume_Low,, ""
+HKR, Settings, SpeakerVolume_Med,, ""
+HKR, Settings, SpeakerVolume_High,, ""
+HKR, Settings, ErrorControl_On,, "L4"
+HKR, Settings, ErrorControl_Off,, "L0"
+HKR, Settings, ErrorControl_Forced,, "L4"
+HKR, Settings, Compression_On,, "L5"
+HKR, Settings, Compression_Off,, "L0"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 01,00,00,00, 0f,00,00,00, 40,07,00,00, 60,09,00,00, 60,09,00,00
+HKR, Settings, SpeakerVolume_Low,, ""
+HKR, Settings, SpeakerVolume_Med,, ""
+HKR, Settings, SpeakerVolume_High,, ""
+
+[Modem5.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+[Strings]
+Mfg = "P.N.B"
+
+Modem14="14400 Modem"
+Modem13="P.N.B Modem"
+Modem12="P.N.B RIO 2 PC"
+Modem11="P.N.B RIO Voice PCMCIA"
+Modem10="P.N.B RIO PCMCIA"
+Modem9="P.N.B RIO Voice Pocket"
+Modem8="P.N.B Niagara 2400 MNP5"
+Modem7="P.N.B Compouce TT2324"
+Modem6="P.N.B Amazone Pocket"
+Modem5="P.N.B Samantha PCMCIA"
+Modem4="P.N.B Rio Grande PCMCIA"
+Modem3="P.N.B RIO PC V32bis"
+Modem2="P.N.B Baby Samantha"
+Modem1="P.N.B Baby RIO"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V0 <cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "S48=7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, "S48=7-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4-K1)M1"
+HKR, Settings, Compression_On,, "%%C1S46=138"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Modulation_CCITT_V23,, "L2"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+
+[RIO2]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FE0V0&A3&B1&D2&S0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Modulation_CCITT,, "B0 S27=1"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3S6=0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "20<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "21<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "25<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "26<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "41<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "42<cr>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+
+[VerbResp]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmpp.inx b/private/unimodem/inf/mdmpp.inx
new file mode 100644
index 000000000..c6773c6f5
--- /dev/null
+++ b/private/unimodem/inf/mdmpp.inx
@@ -0,0 +1,619 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Practical Peripherals
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\PPI1907 ; PC288LCD V.34 PNP
+ExcludeFromSelect=SERENUM\PPI1207 ; PC288HC V.34 int
+ExcludeFromSelect=SERENUM\PPI1104 ; PC144MT"
+ExcludeFromSelect=SERENUM\PPI1107 ; PC288MT V.34
+ExcludeFromSelect=UNIMODEM3FBE96D7 ; PC288MT V.34
+ExcludeFromSelect=UNIMODEM47E9CD1F ; PM288MT II V.34 ext
+ExcludeFromSelect=UNIMODEM8AB00D69 ; PM288MT II V.34 ext
+ExcludeFromSelect=UNIMODEM2E90D49C ; PM288MT II V.34 ext
+ExcludeFromSelect=UNIMODEMCA63F985 ; Hayes and Practical
+
+
+[Modem24.NoResDup]
+UNIMODEMC5D7521C ; PC288LCD V.34 PNP
+
+[Modem22.NoResDup]
+UNIMODEMAB14ACEF ; PC288HC V.34 int
+
+[Modem25.NoResDup]
+UNIMODEMFB068A5E ; PC144MT
+
+[Modem31.NoResDup]
+UNIMODEM3FBE96D7,UNIMODEM47E9CD1F,UNIMODEM8AB00D69 ; PC288MT V.34
+
+[Manufacturer]
+%Mfg% = Models
+%Hayes%= Hayes
+
+[Hayes]
+%Modem48% = Modem47, PRACTICAL_Modem48, UNIMODEMCA63F985 ; Hayes Accura V.34
+%Modem48GEN% = Modem47, UNIMODEMCA63F985 ; UNIMODEMCA63F985
+
+[Models]
+
+%Modem47% = Modem47, PRACTICAL_Modem47, UNIMODEMCA63F985 ; PM288MT II V.34 ext
+
+%Modem46% = Modem46, UNIMODEM7F981688
+%Modem45% = Modem36, PCMCIA\PRACTICAL_PERIPHERALS_INC-PPI_PC288T_PCMCIA-7A87
+%Modem45% = Modem36, UNIMODEM74F69B90
+%Modem44% = Modem31, UNIMODEM3FBE96D7 ; PC288MT V.34
+%Modem43PNP% = Modem31, SERENUM\PPI1107 ; PC288MT V.34
+%Modem43% = Modem31, PRACTICAL_Modem43, UNIMODEM3FBE96D7 ; PC288MT V.34
+%Modem42% = Modem35, PCMCIA\PRACTICAL_PERIPHERALS__INC.-PROCLASS_144_DATA/FAX_MODEM-BAFB
+%Modem41PNP% = Modem24, SERENUM\PPI1907 ; PC288LCD V.34
+%Modem41% = Modem24, UNIMODEMC5D7521C ; PC288LCD V.34
+%Modem40% = Modem22, UNIMODEMCE127B87 ; PM288HC V.34 internal
+%Modem40% = Modem22, UNIMODEMD3A735C3 ; PM288HC V.34 internal
+%Modem40% = Modem22, UNIMODEME56B35D2 ; PM288HC V.34 internal
+%Modem39% = Modem28, UNIMODEM43E86932 ; Practical PM9600 V/32/V.42bis internal
+%Modem38% = Modem38, UNIMODEM5C67288B ; Practical PM2400FX96SA
+%Modem37% = Modem37, PRACTICAL_Modem37, UNIMODEMF17C76B0 ; Practical 2400
+%Modem36% = Modem36, PCMCIA\PRACTICAL_PERIPHERALS_INC-PPI_PC288T2EZ_PCMCIA-F382 ;PC288T2-EZ PCMCIA
+%Modem36% = Modem36, UNIMODEM9E1CE03E ;PC288T2-EZ PCMCIA
+%Modem35% = Modem35, PCMCIA\PRACTICAL_PERIPHERALS_INC-PPI_PC144T2EZ_PCMCIA-878D ;PC144T2-EZ PCMCIA
+%Modem35% = Modem35, UNIMODEM00A88199 ;PC144T2-EZ PCMCIA
+
+%Modem35% = Modem35, UNIMODEMB52C8318
+
+
+%Modem34PNP% = Modem22, SERENUM\PPI1207 ; PC288HC V.34 int
+%Modem34% = Modem22, UNIMODEMAB14ACEF ; PC288HC V.34 int
+%Modem33% = Modem33, UNIMODEM16BC79FF ; PM9600MT II, ext
+%Modem32% = Modem31, PRACTICAL_Modem32, UNIMODEM3FBE96D7 ; PC288MT II V.34 ext
+%Modem31% = Modem31, UNIMODEMEE44FF53 ; PM288MT II V.34 ext
+%Modem31% = Modem31, UNIMODEM47E9CD1F ; PM288MT II V.34 ext
+%Modem31% = Modem31, UNIMODEM8AB00D69 ; PM288MT II V.34 ext
+%Modem31% = Modem31, UNIMODEM2E90D49C ; PM288MT II V.34 ext
+%Modem30% = Modem30, UNIMODEMAD88E5F1
+%Modem30% = Modem30, UNIMODEM71093552
+%Modem29% = Modem29, UNIMODEM80D34DDD
+%Modem28% = Modem28, UNIMODEM6C5350B3
+%Modem27% = Modem27, UNIMODEM4DB9C41A
+%Modem26% = Modem26, UNIMODEMC3265E5C
+%Modem26% = Modem26, UNIMODEM375A53BB
+%Modem25PNP% = Modem25, SERENUM\PPI1104 ; PC144MT
+%Modem25% = Modem25, UNIMODEMFB068A5E ; PC144MT
+%Modem24% = Modem24, UNIMODEM62D47773
+%Modem23% = Modem23, UNIMODEMDF33E255
+%Modem22% = Modem22, UNIMODEM040B1418
+%Modem21% = Modem21, UNIMODEMBEA1E523 ; PM144MT II
+%Modem21% = Modem21, UNIMODEME4413B20 ; PM144MT II
+%Modem21% = Modem21, UNIMODEM4ADDE8C4 ; PM144MT II
+%Modem20% = Modem20, UNIMODEM07532FF6
+%Modem19% = Modem19, UNIMODEMD5359C7A
+%Modem19% = Modem19, UNIMODEM4727CE54
+%Modem19% = Modem19, UNIMODEMF1C27AA9
+%Modem19% = Modem19, UNIMODEMFCE36771
+%Modem19% = Modem19, UNIMODEM87C44D7B
+%Modem18% = Modem18, UNIMODEMAD764EBE
+%Modem17% = Modem17, UNIMODEM12759384
+%Modem16% = Modem16, UNIMODEM736F2417
+%Modem15% = Modem15, UNIMODEM846F55B0
+%Modem14% = Modem14, UNIMODEM9F47CF67
+%Modem13% = Modem13, PRACTICAL_Modem13
+%Modem12% = Modem12, PRACTICAL_Modem12
+%Modem11% = Modem11, PRACTICAL_Modem11
+%Modem10% = Modem10, UNIMODEME7A90C66
+%Modem9% = Modem9, UNIMODEMA9455F98 ; PM2400FX
+%Modem8% = Modem8, UNIMODEM3B0F2779 ; PM14400FX PKT
+%Modem7% = Modem7, PRACTICAL_Modem7
+%Modem6% = Modem6, UNIMODEM306EED8E
+%Modem5% = Modem5, PCMCIA\PRACTICAL_PERIPHERALS__INC.-PRACTICARD_144-6957
+%Modem4% = Modem4, UNIMODEM60A7A0BA
+%Modem3% = Modem3, UNIMODEMBB2D2D41
+%Modem2% = Modem2, PRACTICAL_Modem2
+%Modem1% = Modem1, UNIMODEM81751F20
+
+[Modem47]
+AddReg=All, MfgAddReg, Modem47.AddReg, EXTERNAL
+
+[Modem46]
+AddReg=All, MfgAddReg, Modem38.AddReg, INTERNAL
+
+[Modem38]
+AddReg=All, MfgAddReg, Modem38.AddReg, EXTERNAL
+
+[Modem37]
+AddReg=All, MfgAddReg, Modem37.AddReg, EXTERNAL
+
+[Modem36]
+AddReg=All, MfgAddReg, Modem36.AddReg, PCMCIA
+
+[Modem35]
+AddReg=All, MfgAddReg, Modem35.AddReg, PCMCIA
+
+[Modem33]
+AddReg=All, MfgAddReg, Modem14.AddReg, EXTERNAL
+
+[Modem31]
+AddReg=All, MfgAddReg, Modem31.AddReg, EXTERNAL
+
+[Modem30]
+AddReg=All, MfgAddReg, Modem30.AddReg, INTERNAL
+
+[Modem29]
+AddReg=All, MfgAddReg, Modem29.AddReg, EXTERNAL
+
+[Modem28]
+AddReg=All, MfgAddReg, Modem28.AddReg, INTERNAL
+
+[Modem27]
+AddReg=All, MfgAddReg, Modem27.AddReg, EXTERNAL
+
+[Modem26]
+AddReg=All, MfgAddReg, Modem26.AddReg, INTERNAL
+
+[Modem25]
+AddReg=All, MfgAddReg, Modem25.AddReg, EXTERNAL
+
+[Modem24]
+AddReg=All, MfgAddReg, Modem24.AddReg, EXTERNAL
+
+[Modem23]
+AddReg=All, MfgAddReg, Modem23.AddReg, EXTERNAL
+
+[Modem22]
+AddReg=All, MfgAddReg, Modem22.AddReg, INTERNAL
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, EXTERNAL
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, EXTERNAL
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, EXTERNAL
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, EXTERNAL
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, INTERNAL
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, INTERNAL
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, INTERNAL
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, INTERNAL
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, INTERNAL
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, EXTERNAL
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, INTERNAL
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, EXTERNAL
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, INTERNAL
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, EXTERNAL
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, EXTERNAL
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+
+; AddReg sections
+
+[Modem47.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem38.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0&D2&C1S0=0<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem37.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0&D2&C1<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem36.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem35.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, SpeakerVolume_Low,, "L0"
+
+[Modem31.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem30.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem29.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem28.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem27.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem26.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem25.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem24.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem23.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem22.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem19.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem18.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem17.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem15.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Responses, "11<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "22<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "23<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "25<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "26<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<CR>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Responses, "11<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "22<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "23<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "25<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "26<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<CR>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0&C1&D2<cr>"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "11<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "22<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "23<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "25<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "26<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 00,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, SpeakerVolume_Low,, "L0"
+; COM1(3F8) IRQ(4)
+HKR,Override,0000,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,03, FF,03, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 10,00, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 20, 03, \
+00,00,00,00
+; COM2(2F8) IRQ(3)
+HKR,Override,0001,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,02, FF,02, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 08,00, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 21, 03, \
+00,00,00,00
+; COM3(3E8) IRQ(4)
+HKR,Override,0002,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,03, EF,03, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 10,00, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 22, 03, \
+00,00,00,00
+; COM4(2E8) IRQ(3)
+HKR,Override,0003,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,02, EF,02, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, 08,00, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 23, 03, \
+00,00,00,00
+; COM1(3F8) IRQ(Any)
+HKR,Override,0004,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,03, FF,03, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 20, 03, \
+00,00,00,00
+; COM2(2F8) IRQ(Any)
+HKR,Override,0005,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, F8,02, FF,02, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 21, 03, \
+00,00,00,00
+; COM3(3E8) IRQ(Any)
+HKR,Override,0006,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,03, EF,03, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 22, 03, \
+00,00,00,00
+; COM4(2E8) IRQ(Any)
+HKR,Override,0007,1, 00,04,00,00, 00,00,00,00, \
+24,00,00,00, 02,00,00,00, 01,00, 0C,00, 00,00, 00,00, 00,00, 00, 00, F8,FF, 08,00, E8,02, EF,02, 00,00, 00, 00, 00,00,00,00, \
+14,00,00,00, 04,00,00,00, 00,00, 00,00, FF,FF, 00,00, 20,00,00,00, \
+19,00,00,00, 7C,89,00,00, 00,00, 02,00, 32, 32, 32, 02, E0,07,00,00, 08, 00, 00, 23, 03, \
+00,00,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Responses, "11<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "12<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "13<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "15<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "22<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "23<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "24<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "25<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "26<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "28<CR>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<CR>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+[Strings]
+
+Hayes = "Hayes"
+Modem48 = "Hayes Accura 288 V.34 + FAX"
+Modem48GEN = "28.8 Data Fax Modem" ; combo Hayes and Practical
+
+Mfg = "Practical Peripherals"
+Modem47="Practical Peripherals PM288MT II V.34"
+Modem46="Practical Peripherals PM2400FX96"
+Modem45="Practical Peripherals PC288T PCMCIA"
+Modem44="Practical Peripherals 28.8, V.34 Data Fax"
+Modem43PNP="Practical Peripherals PC288MT V.34 Plug & Play"
+Modem43="Practical Peripherals PC288MT V.34"
+Modem42="Practical Peripherals ProClass 144"
+Modem41PNP="Practical Peripherals PC288LCD V.34 Plug & Play"
+Modem41="Practical Peripherals PC288LCD V.34"
+Modem40="Practical Peripherals PM288HC II V.34"
+Modem39="Practical Peripherals PM9600 V.32-V.42bis"
+Modem38="Practical Peripherals PM2400FX96SA"
+Modem37="Practical Peripherals 2400"
+Modem36="Practical Peripherals PC288T2-EZ PCMCIA"
+Modem35="Practical Peripherals PC144T2-EZ PCMCIA"
+Modem34PNP="Practical Peripherals PC288HC V.34 Plug & Play"
+Modem34="Practical Peripherals PC288HC V.34"
+Modem33="Practical Peripherals PM9600MT II"
+Modem32="Practical Peripherals PC288MT II V.34"
+Modem31="Practical Peripherals PM288MT II V.34"
+Modem30="Practical Peripherals PM14400FX"
+Modem29="Practical Peripherals PM9600SA"
+Modem28="Practical Peripherals PM9600"
+Modem27="Practical Peripherals PM14400FX MT"
+Modem26="Practical Peripherals PM144HC II"
+Modem25PNP="Practical Peripherals PC144MT Plug & Play"
+Modem25="Practical Peripherals PC144MT"
+Modem24="Practical Peripherals PC288LCD VFC"
+Modem23="Practical Peripherals PM288PKT VFC"
+Modem22="Practical Peripherals PC288HC VFC"
+Modem21="Practical Peripherals PM144MT II"
+Modem20="Practical Peripherals PC288SA VFC"
+Modem19="Practical Peripherals PM14400FXSA"
+Modem18="Practical Peripherals PC288MT VFC"
+Modem17="Practical Peripherals PC144HC"
+Modem16="Practical Peripherals PM288HCII VFC"
+Modem15="Practical Peripherals PM9600FX"
+Modem14="Practical Peripherals PM9600HC II"
+Modem13="Practical Peripherals PM2400EFX"
+Modem12="Practical Peripherals PM2400FXMT"
+Modem11="Practical Peripherals PM2400"
+Modem10="Practical Peripherals PM2400SA"
+Modem9="Practical Peripherals PM2400FX"
+Modem8="Practical Peripherals PM14400FX PKT"
+Modem7="Practical Peripherals PM14400FX PS-2"
+Modem6="Practical Peripherals PC144LCD"
+Modem5="Practical Peripherals PractiCARD 144"
+Modem4="Practical Peripherals PM9600FX MT"
+Modem3="Practical Peripherals PM2400EFX SA"
+Modem2="Practical Peripherals PM2400 PS-2"
+Modem1="Practical Peripherals PM288MTII VFC"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,,DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&FE0V0W1&C1&D2S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q5 S36=7 S48=7"
+HKR, Settings, ErrorControl_Off,, "&Q6 S36=3 S48=128"
+HKR, Settings, ErrorControl_Forced,, "&Q5 S36=4 S48=7"
+HKR, Settings, Compression_On,, "S46=2"
+HKR, Settings, Compression_Off,, "S46=0"
+HKR, Settings, Modulation_CCITT,, "B0 B15"
+HKR, Settings, Modulation_Bell,, "B1 B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "0<CR>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<CR>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "2<CR>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<CR>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<CR>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<CR>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<CR>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<CR>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<CR>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<CR>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "10<CR>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<CR>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<CR>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<CR>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "14<CR>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "15<CR>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "16<CR>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "18<CR>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "22<CR>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "23<CR>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "24<CR>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "25<CR>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "26<CR>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "28<CR>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "29<CR>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "31<CR>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "34<CR>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "36<CR>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "37<CR>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "38<CR>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "40<CR>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "44<CR>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "45<CR>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "46<CR>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<CR>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<CR>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<CR>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<CR>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<CR>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<CR>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "53<CR>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "54<CR>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "55<CR>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "60<CR>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "66<CR>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<CR>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<CR>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<CR>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<CR>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<CR>", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmprodm.inx b/private/unimodem/inf/mdmprodm.inx
new file mode 100644
index 000000000..a0b2d08b9
--- /dev/null
+++ b/private/unimodem/inf/mdmprodm.inx
@@ -0,0 +1,575 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Prodem Technology Inc.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM84D4DBA5, UNIMODEM5701CA7F, UNIMODEMF87216FA, UNIMODEM4736E3A8
+
+; Modem models
+
+[Models]
+%Modem24% = Modem12, UNIMODEM5701CA7F
+%Modem23% = Modem16, UNIMODEM84D4DBA5
+%Modem22% = Modem8, UNIMODEM4736E3A8
+%Modem21% = Modem11, UNIMODEMF87216FA
+%Modem20% = Modem20, Prodem_Modem20, UNIMODEMF87216FA
+%Modem19% = Modem19, Prodem_Modem19, UNIMODEM4736E3A8
+%Modem18% = Modem18, Prodem_Modem18, UNIMODEMD209269F
+%Modem17% = Modem17, Prodem_Modem17, UNIMODEM84D4DBA5
+%Modem16% = Modem16, Prodem_Modem16, UNIMODEM84D4DBA5
+%Modem15% = Modem15, UNIMODEMAE782C74
+%Modem14% = Modem14, Prodem_Modem14
+%Modem13% = Modem13, Prodem_Modem13, UNIMODEM5701CA7F
+%Modem12% = Modem12, Prodem_Modem12, UNIMODEM5701CA7F
+%Modem11% = Modem11, Prodem_Modem11, UNIMODEMF87216FA
+%Modem10% = Modem10, UNIMODEM6F7D0338
+%Modem9% = Modem9, UNIMODEMC43F7105
+%Modem8% = Modem8, Prodem_Modem8, UNIMODEM4736E3A8
+%Modem7% = Modem7, UNIMODEM5F7A9B8B
+%Modem6% = Modem6, UNIMODEM866B3772
+%Modem5% = Modem5, UNIMODEM9D74F603
+%Modem4% = Modem4, UNIMODEM212F15AA
+%Modem3% = Modem3, UNIMODEMB7DBC930
+%Modem2% = Modem2, UNIMODEM5229E530
+%Modem1% = Modem1, UNIMODEMD8C8B4C3
+
+
+; Installation sections
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, External
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, External
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, External
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, Internal
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, External
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, External
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, Internal
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, Internal
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, External
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, External
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, Internal
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, Internal
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 3,, "AT <cr>"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, c0,12,00,00, 60,09,00,00
+HKR, Init, 3,, "AT\N3\Q3\V1\J0%%C1<cr>"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 40,03,00,00, b0,04,00,00, b0,04,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 40,03,00,00, b0,04,00,00, b0,04,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT S0=2<cr>"
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0d,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT <cr>"
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 3,, "AT S0=2 V1<cr>"
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 3,, "AT <cr>"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 3,, "AT <cr>"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 3,, "AT <cr>"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Hard,, "\Q3"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Hidem Technology"
+
+; Model strings
+
+Modem24="Hidem 2400P & 2400H"
+Modem23="Hidem 1200 & 1200BS"
+Modem22="2442FAX modem"
+Modem21="2400DLX & 2400SNI Modem"
+Modem20="Vida 2400SNI"
+Modem19="Vida 2442FAX"
+Modem18="Hidem 2400M"
+Modem17="Hidem 1200BS"
+Modem16="Hidem 1200"
+Modem15="Hidem 2400"
+Modem14="Hidem 2400CD"
+Modem13="Hidem 2400H"
+Modem12="Hidem 2400P"
+Modem11="Hidem 2400DLX"
+Modem10="Hidem 2442P FAX"
+Modem9 ="Hidem 2442I FAX"
+Modem8 ="Hidem 2442FAX"
+Modem7 ="Hidem 9600I DLX"
+Modem6 ="Hidem 9600DLX"
+Modem5 ="Hidem 14400I DLX"
+Modem4 ="Hidem 14400DLX"
+Modem3 ="Hidem 14400P FAX"
+Modem2 ="Hidem 14400I FAX"
+Modem1 ="Hidem 14400FAX"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 S0=0<cr>"
+HKR, Init, 3,, "ATW2 <cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q0"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "B2"
+HKR, Settings, SpeedNegotiation_On,, "B0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmquant.inx b/private/unimodem/inf/mdmquant.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmquant.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmracal.inx b/private/unimodem/inf/mdmracal.inx
new file mode 100644
index 000000000..f81bd75b9
--- /dev/null
+++ b/private/unimodem/inf/mdmracal.inx
@@ -0,0 +1,382 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Racal
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Racal%
+
+[Manufacturer]
+%Racal% = Racal
+
+[Racal]
+%Modem1% = Modem1, Racal_Modem1 ; ALM 3223
+%Modem2% = Modem2, Racal_Modem2 ; ALM 3239
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, 77,01,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, 77,01,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+
+Racal = "Racal"
+Modem1 = "Racal ALM 3223 14.4 Bps Modem"
+Modem2 = "Racal ALM 3239 28.8 Bps Modem"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0 \V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q1"
+HKR, Settings, FlowControl_Soft,, "\Q3"
+HKR, Settings, ErrorControl_On,, "\N3\P2"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N1\P2"
+HKR, Settings, Compression_On,, "\M0"
+HKR, Settings, Compression_Off,, "\M1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmrfi.inx b/private/unimodem/inf/mdmrfi.inx
new file mode 100644
index 000000000..20e2523c4
--- /dev/null
+++ b/private/unimodem/inf/mdmrfi.inx
@@ -0,0 +1,306 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: RFI Elektronik
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, RFI_Modem1, PCMCIA\HOTLINE-HANDY-27CD ; HOTLINE 960CC
+
+
+; Installation sections
+
+[Modem1] ; HOTLINE 960CC
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; HOTLINE 960CC
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, FClass, 1, 0b,00,00,00
+HKR, Init, 3,, "AT &D2 S95=249<cr>"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "RFI Elektronik"
+
+; Model strings
+
+Modem1="RFI HOTLINE 960CC"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmrock.inx b/private/unimodem/inf/mdmrock.inx
new file mode 100644
index 000000000..d7bbb8ca1
--- /dev/null
+++ b/private/unimodem/inf/mdmrock.inx
@@ -0,0 +1,1091 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Rockwell
+; Supports Rockwell & some Cirrus chipset modems, encompassing many mfgs & models
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Rockwell%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM733C4E29 ; Zoom, Best Data, 28.8 internal combo
+ExcludeFromSelect=UNIMODEMA3EEEF33 ; Zoom, Best Data, 28.8 external combo
+ExcludeFromSelect=UNIMODEM24FFB24B ; CPI, Best Data 9648Fx External
+ExcludeFromSelect=UNIMODEM1058B7F8 ; V.34 Apex, Toshiba
+ExcludeFromSelect=UNIMODEMCFA485CD,UNIMODEM2C9A8C70 ; 14000 bps Data-Fax internal
+ExcludeFromSelect=UNIMODEMC9720A17 ; Logicode, Microcom
+ExcludeFromSelect=UNIMODEMAF48CC9F ; Premax, Smart Modular
+ExcludeFromSelect=UNIMODEM526F22F6 ; Piiceon PCMCIA 14.4 and 14.4 for Contura+LTE (ISA)
+ExcludeFromSelect=UNIMODEMCC96FDC7 ; Cardinal v.34 and CPI (Viva)
+ExcludeFromSelect=UNIMODEM1C445CDD ; Cardinal v.34 and CPI (Viva)
+ExcludeFromSelect=UNIMODEMAAC52F50 ; Cardinal MVP144IF, MVP144E, and Logicode
+ExcludeFromSelect=PCMCIA\PIICEON-DISPATCHER-80D0 ; Piiceon Dispatcher V.34, 14.4
+ExcludeFromSelect=UNIMODEME466C599 ; Reveal, Packard Bell
+ExcludeFromSelect=SERENUM\CRD1000 ; cardinal 28.8 ext
+ExcludeFromSelect=SERENUM\ZTI4120 ; zoom 28.8 ext
+
+[Rockwell19.NoResDup]
+UNIMODEM01C369CD,UNIMODEMA6B66087
+
+[Manufacturer]
+%Rockwell% = Rockwell
+%Cardinal% = Cardinal
+%Digitan% = Digitan
+%BestData% = BestData
+%SMART% = SMART
+%Apex% = Apex
+%ComOne% = ComOne
+%Logicode% = Logicode
+%Premax% = Premax
+%Macronix% = Macronix
+%Piiceon% = Piiceon
+%Mitsubishi% = Mitsubishi
+%Winbook% = Winbook
+%Reveal% = Reveal
+%Zoom% = Zoom
+%Supra% = Supra
+
+
+[Reveal]
+%Reveal1% = Rockwell20, UNIMODEM8CF33BE4 ; Reveal V.34, 28.8, internal
+%Reveal2% = Rockwell10, ROCK_Reveal2, UNIMODEM535147EF ; Reveal 14.4, Data FAX, internal
+%Reveal4% = Rockwell44, ROCK_Reveal4, UNIMODEME466C599 ; Reveal 14.4 Modem Soundcard
+%Reveal5% = Rockwell44, UNIMODEME466C599 ; Reveal, Packard Bell
+
+[Winbook]
+%Winbook1% = Rockwell31, ROCK_Winbook1, UNIMODEM0BCCA4A7 ; WinbookXP 14.4 internal modem
+%Winbook2% = Rockwell43, ROCK_Winbook2, UNIMODEM858E1599 ; WinbookXP cirrus chipset
+
+[Mitsubishi]
+%Mitsubishi1% = Rockwell14, PCMCIA\MITSUBISHI_ELECTRIC_CORPORATION-MF0B-004____________-2B0E ; Mitsubishi 14.4 PCMCIA
+%Mitsubishi1% = Rockwell14, UNIMODEM0715F8AD ; Mitsubishi 14.4 PCMCIA
+
+[Piiceon]
+%Piiceon2% = Rockwell29, PCMCIA\PIICEON-DISPATCHER-3CDB ; Piiceon Dispatcher 14.4 PCMCIA
+%Piiceon2% = Rockwell29, PCMCIA\PIICEON-DISPATCHER-3A96 ; Piiceon Dispatcher 14.4 PCMCIA
+%Piiceon2% = Rockwell29, ROCK_Piiceon2, UNIMODEM526F22F6 ; Piiceon Dispatcher 14.4 PCMCIA
+%Piiceon2% = Rockwell29, ROCK_Piiceon2, PCMCIA\PIICEON-DISPATCHER-80D0 ; Piiceon Dispatcher 14.4 PCMCIA
+%Piiceon3% = Rockwell30, UNIMODEMA4A014C2 ; Piiceon Dispatcher V.34
+%Piiceon4% = Rockwell33, ROCK_Piiceon4, UNIMODEM526F22F6 ; Piiceon Dispatcher 14.4 for LTE and Contura
+%Piiceon5% = Rockwell33, UNIMODEM526F22F6 ; combo, Piiceon PCMCIA 14.4 and 14.4 for Contura+LTE (ISA)
+%Piiceon6% = Rockwell34, UNIMODEME8277FDB ; Piiceon Dispatcher 14.4 for Toshiba
+%Piiceon7% = Rockwell40, ROCK_Piiceon7, PCMCIA\PIICEON-DISPATCHER-80D0 ; Piiceon Dispatcher V.34 PCMCIA
+%Piiceon7% = Rockwell40, ROCK_Piiceon7, UNIMODEMAF48CC9F ; Piiceon Dispatcher V.34 PCMCIA
+%Piiceon8% = Rockwell29, PCMCIA\PIICEON-DISPATCHER-80D0 ; Piiceon Dispatcher V.34, 14.4 PCMCIA
+
+[Macronix]
+%Macronix1% = Rockwell14, PCMCIA\MACRONIX-FAX/MODEM-B6E7 ; Macronix 14.4 PCMCIA
+%Macronix1% = Rockwell14, UNIMODEM8EA167E0 ; Macronix 14.4 PCMCIA
+%Macronix2% = Rockwell28, UNIMODEM22C3B64D ; Macronix 1200 ISA
+
+[Premax]
+%Premax1% = Rockwell13, PCMCIA\PREMAX-FM288_-92E2 ; Premax 28.8, V.34 PCMCIA
+%Premax1% = Rockwell13, ROCK_Premax1, UNIMODEMAF48CC9F ; Premax 28.8, V.34 PCMCIA
+%Premax2% = Rockwell13, PCMCIA\PREMAX-FM288I-DC97 ; Premax 28.8, VFC PCMCIA
+%Premax2% = Rockwell13, UNIMODEM90FBBB54 ; Premax 28.8, VFC PCMCIA
+%Premax3% = Rockwell41, UNIMODEMAF48CC9F ; combo, premax, Smart Modular, Piiceon
+
+[Logicode]
+%Logicode1% = Rockwell19, UNIMODEM5F5D689E ; Logicode 28.8 V.34 External with cell
+%Logicode2% = Rockwell20, ROCK_Logicode2, UNIMODEM1C445CDD ; Logicode 28.8 V.34 Internal with cell
+%Logicode3% = Rockwell21, ROCK_Logicode3, UNIMODEMCFA485CD ; Logicode 14.4 Internal data-fax-voice with cell
+%Logicode4% = Rockwell22, ROCK_Logicode4, UNIMODEMC9720A17 ; Logicode 14.4 External data-fax-voice with cell
+%Logicode5% = Rockwell23, UNIMODEMC9720A17 ; Logicode and Microcom combo
+%Logicode6% = Rockwell22, UNIMODEMF48FCB61 ; Logicode 14.4 External data-fax
+%Logicode7% = Rockwell24, ROCK_Logicode7, UNIMODEM16E3BF9F ; Logicode 14.4 Internal data-fax
+
+%Logicode7% = Rockwell24, ROCK_Logicode7, UNIMODEMAAC52F50 ; Logicode 14.4 Internal data-fax
+
+%Logicode8% = Rockwell25, UNIMODEM9A52F7F4 ; Logicode 9624 Internal data-fax
+%Logicode9% = Rockwell26, UNIMODEM6C57C7DE ; Logicode 9624 External data-fax
+%Logicode13% = Rockwell10, ROCK_Logicode13, UNIMODEM535147EF ; Logicode 14.4 RPI style
+
+[Rockwell]
+%Rockwell1% = Rockwell1, UNIMODEM959C40CA ; 14000 bps Data-Fax internal
+%Rockwell2% = Rockwell2, UNIMODEMCFA485CD ; 14000 bps Data-Fax internal
+%Rockwell3% = Rockwell18,UNIMODEM2C9A8C70 ; 14000 bps Data-Fax internal
+
+[Zoom]
+%Zoom1% = Rockwell19, UNIMODEMA6B66087 ; Zoom v34 model 470 external
+%Zoom1PNP% = Rockwell19, SERENUM\ZTI4120 ; Zoom v34 model 470 external
+
+[Cardinal]
+%Cardinal1% = Rockwell1, ROCK_Cardinal1, UNIMODEM959C40CA ; Shipped by Zeos
+%Cardinal2PNP% = Rockwell19, SERENUM\CRD1000 ; Cardinal 28.8, V.34 external
+%Cardinal2% = Rockwell19, ROCK_Cardinal2, UNIMODEM01C369CD ; Cardinal 28.8, V.34 external
+%Cardinal2% = Rockwell19, ROCK_Cardinal2, UNIMODEMCC96FDC7 ; Cardinal 28.8, V.34 external
+%Cardinal3% = Rockwell35, UNIMODEMCC96FDC7 ; Cardinal 28.8, V.34 external, CPI (Viva)
+%Cardinal4% = Rockwell36, UNIMODEMCE29838A ; Cardinal 14.4 mvp144xf
+%Cardinal5% = Rockwell37, ROCK_Cardinal5, UNIMODEMAAC52F50 ; Cardinal 14.4 mvp144e
+%Cardinal6% = Rockwell12, ROCK_Cardinal6, UNIMODEM24FFB24B ; Cardinal 14.4 mvp24xf
+%Cardinal7% = Rockwell14, PCMCIA\CARDINAL-MVP144PCMCIA-5538 ; Cardinal 14.4 PCMCIA, MVP144PCMCIA
+%Cardinal7% = Rockwell14, ROCK_Cardinal7, UNIMODEMD3A140D7 ; Cardinal 14.4 PCMCIA, MVP144PCMCIA
+%Cardinal8% = Rockwell20, ROCK_Cardinal8, UNIMODEM1C445CDD ; Cardinal 28.8, V.34, internal MVP288I
+%Cardinal9% = Rockwell38, UNIMODEM1C445CDD ; Cardinal 28.8, V.34, internal MVP288I
+%Cardinal10% = Rockwell39, ROCK_Cardinal10, UNIMODEMAAC52F50 ; Cardinal 14.4 Data FAX MVP144IF
+%Cardinal11% = Rockwell37, UNIMODEMAAC52F50 ; Cardinal 14.4 Data FAX MVP144IF
+%Cardinal12% = Rockwell10, ROCK_Cardinal12, UNIMODEM16A162D5 ; Cardinal 14.4 Data FAX MVP144I
+%Cardinal13% = Rockwell11, ROCK_Cardinal13, UNIMODEM9F2BBC58 ; Cardinal 2400 Data FAX MB2650SR
+%Cardinal14% = Rockwell42, UNIMODEMFFB2F7FF ; Cardinal 19.2 data fax MVP192I
+
+[Digitan]
+%Digitan2% = Rockwell2, ROCK_Digitan2, UNIMODEMCFA485CD ; Shipped by Dell
+%Digitan3% = Rockwell20, ROCK_Digitan3, UNIMODEMEAF8FBCB ; Digitan V.34 with voice
+%Digitan4% = Rockwell20, ROCK_Digitan4, UNIMODEM733C4E29 ; Digitan V.34
+
+[BestData]
+%BestData1% = Rockwell3, UNIMODEM4643BBB7 ; Best Data 1442FX External
+%BestData2% = Rockwell4, UNIMODEM96F16EB5 ; Best Data 1442F Internal
+%BestData3% = Rockwell5, ROCK_BestData3, UNIMODEM733C4E29 ; Best Data 2834F Internal
+%BestData4% = Rockwell6, UNIMODEM733C4E29 ; Best Data 2834F Internal and Zoom V.34 internal combo
+%BestData5% = Rockwell7, ROCK_BestData5, UNIMODEMA3EEEF33 ; Best Data 2834FX External
+%BestData6% = Rockwell8, UNIMODEMA3EEEF33 ; Best Data 2834FX External and Zoom V.34 internal combo
+%BestData7% = Rockwell9, ROCK_BestData7, UNIMODEM798B889B ; Best Data 1442FX External (FTX, RPI model)
+%BestData8% = Rockwell10, ROCK_BestData8, UNIMODEM535147EF ; Best Data 1442FX Internal (FT, RPI model)
+%BestData8% = Rockwell10, UNIMODEM145054C5 ; Best Data 1442FX Internal (FT, RPI model)
+%BestData9% = Rockwell11, ROCK_BestData9, UNIMODEM9F2BBC58 ; Best Data 9624FQ Internal
+%BestData10% = Rockwell11, UNIMODEM65278A40 ; Best Data 2400B Internal
+%BestData11% = Rockwell12, UNIMODEMDC7EB890 ; Best Data 9648FX External
+%BestData11% = Rockwell12, ROCK_BestData11, UNIMODEM24FFB24B ; Best Data 9648FX External
+%BestData12% = Rockwell12, UNIMODEM24FFB24B ; Best Data 9648FX External and viva combo
+%BestData13% = Rockwell12, ROCK_BestData13, UNIMODEM24FFB24B ; Best Data 2400X External
+
+[SMART]
+%SmartMod1% = Rockwell14, ROCK_SmartMod1, UNIMODEMDE96F803 ; Smart ST1414 PCMCIA
+%SmartMod1% = Rockwell14, PCMCIA\INTELLIGENT-FAXMODEM-F938 ; Smart ST1414 PCMCIA
+%SmartMod2% = Rockwell13, ROCK_SmartMod2, UNIMODEMAF48CC9F ; Smart V.34 PCMCIA
+%SmartMod2% = Rockwell13, PCMCIA\SMART_MODULAR_ST2814-E3BD ; Smart V.34 PCMCIA
+
+[Apex]
+%Apex2% = Rockwell45, ROCK_Apex2, PCMCIA\RIPICAA-RC144ACL-845A
+%Apex2% = Rockwell45, UNIMODEME633E48E
+
+%Apex3% = Rockwell15, ROCK_Apex3, PCMCIA\RIPICAA-RC144ACL-845A ; Apex V.34
+%Apex3% = Rockwell15, PCMCIA\AD_PC_CARD-RC288ACL-5DA6 ; Apex V.34
+
+%Apex3% = Rockwell15, UNIMODEMD4D8214B ; Apex V.34
+
+%Apex3% = Rockwell15, ROCK_Apex3, UNIMODEM1058B7F8 ; Apex V.34
+%Apex4% = Rockwell15, UNIMODEM1058B7F8 ; Apex V.34 and Toshiba combo
+
+[ComOne]
+%ComOne6% = Rockwell13, PCMCIA\COM1_SA-MC218_CARD-415E ; MC218 28.8 PCMCIA
+%ComOne6% = Rockwell13, UNIMODEM7A03E29F ; MC218 28.8 PCMCIA
+%ComOne4% = Rockwell17, ROCK_ComOne4, PCMCIA\AT&T_PARADYNE-KEEPINTOUCH_CARD-762F ; MC216
+%ComOne2% = Rockwell16, PCMCIA\COM1_SA-MC214_CARD-5738 ; MC214A
+%ComOne2% = Rockwell16, UNIMODEMD3A0F28F ; MC214A
+%ComOne1% = Rockwell14, PCMCIA\COM1_SA-MC217_CARD-15FC ; MC217A 14.4 PCMCIA
+; ComOne tuples from untested/unavailable models
+; %ComOne13% = Rockwell-n, PCMCIA\PHILIPS-S214_CARD_-D9F4
+; %ComOne12% = Rockwell-n, PCMCIA\TOSHIBA-_SLIMFAXII-F6F4
+; %ComOne11% = Rockwell-n, PCMCIA\PHILIPS-S218_CARD_-DBDE
+; %ComOne10% = Rockwell-n, PCMCIA\TOSHIBA-SLIMV34___-B57C
+; %ComOne9% = Rockwell-n, PCMCIA\PHILIPS-S217_CARD_-7791
+; %ComOne8% = Rockwell-n, PCMCIA\CXR_SA_-AJ_1448___-E24C
+; %ComOne7% = Rockwell-n, PCMCIA\TOSHIBA-SLIM144___-7781
+; %ComOne5% = Rockwell20 ;external
+; %ComOne3% = Rockwell18 ;external
+
+[Supra]
+%Supra1% = Rockwell14, PCMCIA\INTELLIGENT-FAXMODEM-D7A3
+%Supra1% = Rockwell14, UNIMODEMBBC2A208
+
+
+; Installation sections
+
+[Rockwell1] ; (internal/external 14400)
+AddReg=All, MfgAddReg, Rockwell1.AddReg, EXTERNAL
+
+[Rockwell2] ; (internal 14400)
+AddReg=All, MfgAddReg, Rockwell2.AddReg, INTERNAL
+
+[Rockwell3] ; (external 14400) - Best Data
+AddReg=All, MfgAddReg, Rockwell3.AddReg, EXTERNAL
+
+[Rockwell4] ; (internal 14400) - Best Data
+AddReg=All, MfgAddReg, Rockwell4.AddReg, INTERNAL
+
+[Rockwell5] ; (internal 28.8) - Best Data
+AddReg=All, MfgAddReg, Rockwell5.AddReg, INTERNAL
+
+[Rockwell6] ; (internal 28.8) - Best Data and Zoom combo
+AddReg=All, MfgAddReg, Rockwell6.AddReg, INTERNAL
+
+[Rockwell7] ; (external 28.8) - Best Data
+AddReg=All, MfgAddReg, Rockwell5.AddReg, EXTERNAL
+
+[Rockwell8] ; (external 28.8) - Best Data and zoom combo
+AddReg=All, MfgAddReg, Rockwell6.AddReg, EXTERNAL
+
+[Rockwell9] ; (external 14400) - Best Data 1442FX (FTX, RPI model)
+AddReg=All, MfgAddReg, Rockwell9.AddReg, EXTERNAL
+
+[Rockwell10] ; (internal 14400) - Best Data 1442FX (FT, RPI model)
+AddReg=All, MfgAddReg, Rockwell10.AddReg, INTERNAL
+
+[Rockwell11] ; (internal 2400) - Best Data 9624FQ
+AddReg=All, MfgAddReg, Rockwell11.AddReg, INTERNAL
+
+[Rockwell12] ; (external 2400) - Best Data 9648Fx, 2400B, 2400X and other modems
+AddReg=All, MfgAddReg, Rockwell12.AddReg, EXTERNAL
+
+[Rockwell13] ; Smart V.34 PCMCIA
+AddReg=All, MfgAddReg, Rockwell13.AddReg, PCMCIA
+
+[Rockwell14] ; SMART ST1414 PCMCIA with cell
+AddReg=All, MfgAddReg, Rockwell14.AddReg, PCMCIA
+
+[Rockwell15] ; Apex V.34 PCMCIA and Tosh combo.
+AddReg=All, MfgAddReg, Rockwell15.AddReg, PCMCIA
+
+[Rockwell16] ; PCMCIA 2400 bps, 19.2 max dte, no cell
+AddReg=All, MfgAddReg, Rockwell16.AddReg, PCMCIA
+
+[Rockwell17] ; Com1 by AT&T-KeepinTouch PCMCIA
+AddReg=All, MfgAddReg, Rockwell17.AddReg, PCMCIA
+
+[Rockwell18] ; (internal 14400) - no speed negotiation, inactivity timer is \Tn with max 90 minutes
+AddReg=All, MfgAddReg, Rockwell18.AddReg, INTERNAL
+
+[Rockwell19] ; V.34 external with cell
+AddReg=All, MfgAddReg, Rockwell13.AddReg, EXTERNAL
+
+[Rockwell20] ; V.34 internal with cell
+AddReg=All, MfgAddReg, Rockwell13.AddReg, INTERNAL
+
+[Rockwell21] ; (internal 14400) - with cell
+AddReg=All, MfgAddReg, Rockwell21.AddReg, INTERNAL
+
+[Rockwell22] ; (external 14400) - Logicode data-fax-voice with cell
+AddReg=All, MfgAddReg, Rockwell22.AddReg, EXTERNAL
+
+[Rockwell23] ; (external 14400) Logicode and Microcom combo
+AddReg=All, MfgAddReg, Rockwell23.AddReg, EXTERNAL
+
+[Rockwell24] ; (internal 14400) - cirrus chipset found in Logicode, no cell
+AddReg=All, MfgAddReg, Rockwell24.AddReg, INTERNAL
+
+[Rockwell25] ; (internal 2400) - Logicode 9426
+AddReg=All, MfgAddReg, Rockwell25.AddReg, INTERNAL
+
+[Rockwell26] ; (external 2400) - Logicode 9426
+AddReg=All, MfgAddReg, Rockwell25.AddReg, EXTERNAL
+
+[Rockwell28] ; (internal 1200) - no compr, ec, speed neg, hard flow, cell
+AddReg=All, MfgAddReg, Rockwell28.AddReg, INTERNAL
+
+[Rockwell29] ; Piiceon Dispatcher 14.4 with cell
+AddReg=All, MfgAddReg, Rockwell29.AddReg, PCMCIA
+
+[Rockwell30] ; Piiceon Dispatcher V.34
+AddReg=All, MfgAddReg, Rockwell30.AddReg, INTERNAL
+
+[Rockwell31] ; Winbook 14.4 Internal
+AddReg=All, MfgAddReg, Rockwell31.AddReg, INTERNAL
+
+[Rockwell33] ; internal 14.4 Dispatcher *OR* combo, Piiceon PCMCIA 14.4 and 14.4 for Contura+LTE (ISA)
+AddReg=All, MfgAddReg, Rockwell29.AddReg, INTERNAL
+
+[Rockwell34] ; Piiceon 14.4 for toshiba
+AddReg=All, MfgAddReg, Rockwell34.AddReg, INTERNAL
+
+[Rockwell35] ; Cardinal+CPI (Viva) V.34
+AddReg=All, MfgAddReg, Rockwell35.AddReg, EXTERNAL
+
+[Rockwell36] ; Cardinal 14.4 mvp144xf
+AddReg=All, MfgAddReg, Rockwell10.AddReg, EXTERNAL
+
+[Rockwell37] ; Cardinal 14.4 data fax mvp144e
+AddReg=All, MfgAddReg, Rockwell37.AddReg, EXTERNAL
+
+[Rockwell38] ; Cardinal 28.8 V.34-VFC internal
+AddReg=All, MfgAddReg, Rockwell35.AddReg, INTERNAL
+
+[Rockwell39] ; Cardinal 14.4 Data FAX MVP144IF
+AddReg=All, MfgAddReg, Rockwell37.AddReg, INTERNAL
+
+[Rockwell40] ; Piiceon V.34 PCMCIA
+AddReg=All, MfgAddReg, Rockwell40.AddReg, PCMCIA
+
+[Rockwell41] ; Piiceon, Smart, other PCMCIA (disable inactivity timer)
+AddReg=All, MfgAddReg, Rockwell41.AddReg, PCMCIA
+
+[Rockwell42] ; Cardinal 19.2 data fax MVP192I
+AddReg=All, MfgAddReg, Rockwell42.AddReg, INTERNAL
+
+[Rockwell43] ; Winbook internal modem
+AddReg=All, MfgAddReg, Rockwell27.AddReg, INTERNAL
+
+[Rockwell44] ; Reveal 14.4 Modem Soundcard
+AddReg=All, MfgAddReg, Rockwell44.AddReg, INTERNAL
+
+[Rockwell45] ; Apex 14.4 data fax cell PCMCIA
+AddReg=All, MfgAddReg, Rockwell45.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Rockwell1.AddReg] ; (internal 14400)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Rockwell2.AddReg] ; (internal 14400)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell3.AddReg] ; (external 14400) - Best Data
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell4.AddReg] ; (internal 14400) - Best Data
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell5.AddReg] ; (internal 28.8) - Best Data
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell6.AddReg] ; (internal 28.8) - Best Data and Zoom combo
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell9.AddReg] ; (external 14400) - Best Data 1442FX (FTX, RPI model)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell10.AddReg] ; (internal 14400) - Best Data 1442FX (FT, RPI model)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Rockwell11.AddReg] ; (internal 2400) - Best Data 9624FQ
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Rockwell12.AddReg] ; (external 2400) - Best Data 9648Fx, 2400B, 2400X and other modems
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Rockwell13.AddReg] ; Smart V.34 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell14.AddReg] ; SMART ST1414 PCMCIA with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell15.AddReg] ; Apex V.34 PCMCIA and Tosh combo.
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Rockwell16.AddReg] ; PCMCIA 2400 bps, 19.2 max dte, no cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT&FE0V1&D2&C1S95=47S0=0&C1&D2<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell17.AddReg] ; Com1 by AT&T (Keep in Touch PCMCIA)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F S0=0 &D2 E0 V1<cr>"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell18.AddReg] ; (internal 14400) - no speed negotiation, inactivity timer is \Tn with max 90 minutes
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell21.AddReg] ; (internal 14400) - with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Rockwell22.AddReg] ; (external 14400) - Logicode data-fax-voice with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Rockwell23.AddReg] ; (external 14400) Logicode and Microcom combo
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, c3,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell24.AddReg] ; (internal 14400) - cirrus chipset found in Logicode, no cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V1 S0=0<cr>"
+
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell25.AddReg] ; (internal 2400) - Logicode 9426
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00 ; 10 sec
+
+[Rockwell27.AddReg] ; (PCMCIA 14400, no cell, cirrus chipset) - Logicode
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+
+[Rockwell28.AddReg] ; (internal 1200) - no compr, ec, speed neg, hard flow, cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, b0,04,00,00, b0,04,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+
+[Rockwell29.AddReg] ; Piiceon Dispatcher 14.4 with cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W1 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell30.AddReg] ; Piiceon Dispatcher V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell31.AddReg] ; Winbook 14.4 Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Rockwell32.AddReg] ; Logicode ISA and Viva 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f3,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell34.AddReg] ; Piiceon Dispatcher 14.4 with cell for Toshiba
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell35.AddReg] ; cardinal, CPI V.34 combo
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell37.AddReg] ; Cardinal 14.4 data fax mvp144e
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1\V1W2S95=47S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Rockwell40.AddReg] ; Piiceon V.34 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell41.AddReg] ; Smart, Piiceon PCMCIA, disable inactivity timer
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell42.AddReg] ; Cardinal 19.2 internal, MVP192I
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Init, 2,, "AT&FE0V1&D2&C1\V1W2S95=47S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Rockwell44.AddReg] ; Reveal 14.4 Modem Soundcard
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell45.AddReg] ; Apex 14.4 data fax cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N7 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+; Strings
+
+[Strings]
+
+Zoom = "Zoom Telephonics, Inc."
+Zoom1 = "Zoom Fax Modem V.34X Model 470"
+Zoom1PNP = "Zoom Fax Modem V.34X Model 470 Plug & Play"
+
+
+Reveal = "Reveal"
+Reveal1 = "Reveal 28.8, V.34, Data Fax PM700"
+Reveal2 = "Reveal 14.4, Data Fax PM500"
+Reveal4 = "Reveal Decathlon XL 14.4 Modem+Sound Card"
+Reveal5 = "14.4 Data Fax Voice Modem+Soundcard"
+
+Winbook = "Winbook"
+Winbook1 = "Winbook (Dynalink) 14.4 Data Fax"
+Winbook2 = "Winbook (Cirrus) 14.4 Data Fax"
+
+Mitsubishi = "Mitsubishi"
+Mitsubishi1 = "Mitsubishi 14.4 PCMCIA"
+
+Piiceon = "Piiceon"
+Piiceon2 = "Piiceon Dispatcher 14.4 PCMCIA"
+Piiceon3 = "Piiceon Dispatcher V.34 for LTE and Contura"
+Piiceon4 = "Piiceon Dispatcher 14.4 for LTE and Contura"
+Piiceon5 = "Piiceon Dispatcher Modem"
+Piiceon6 = "Piiceon Dispatcher 14.4 for Toshiba"
+Piiceon7 = "Piiceon Dispatcher 28.8, V.34 PCMCIA"
+Piiceon8 = "Piiceon Dispatcher PCMCIA"
+
+Macronix = "Macronix"
+Macronix1 = "Macronix 14.4 Data Fax PCMCIA"
+Macronix2 = "Macronix 1200 bps Modem"
+
+Premax = "Premax"
+Premax1 = "Premax 28.8, V.34 PCMCIA"
+Premax2 = "Premax 28.8, VFC PCMCIA"
+Premax3 = "28.8, V.34 PCMCIA Modem" ; combo, premax and Smart Modular
+
+Logicode = "Logicode"
+Logicode1 = "Logicode 28.8, V.34 External" ; Logicode 28.8 V.34 External with cell
+Logicode2 = "Logicode 28.8, V.34 Internal" ; Logicode 28.8 V.34 Internal with cell
+Logicode3 = "Logicode 14.4 Data-Fax-Voice Internal" ; Logicode 14.4 Internal data-fax-voice with cell
+Logicode4 = "Logicode 14.4 Data-Fax-Voice External" ; Logicode 14.4 External data-fax-voice with cell
+Logicode5 = "14.4 Data-Fax Modem" ; Logicode and Microcom combo
+Logicode6 = "Logicode 14.4 Data-Fax External" ; Logicode 14.4 Data-Fax External (No voice!)
+Logicode7 = "Logicode 14.4 Data-Fax Internal 1414HV" ; Logicode 14.4 Data-Fax External (No voice!)
+Logicode8 = "Logicode 9624 Data-Fax Internal" ; Logicode 9624 Data-Fax Internal
+Logicode9 = "Logicode 9624 Data-Fax External" ; Logicode 9624 Data-Fax External
+Logicode13= "Logicode 14.4 Data Fax (RPI)"
+
+Rockwell ="Rockwell"
+Rockwell1 ="14400 bps Data-Fax Modem"
+Rockwell2 ="14400 bps Internal Data-Fax Modem"
+Rockwell3 ="14400 bps Internal Data-Fax Modem"
+
+Cardinal ="Cardinal"
+Cardinal1 ="Cardinal 14.4 Kbps Internal Fax Modem"
+Cardinal2 ="Cardinal MVP288XF 28.8 Kbps V.34 Fax Modem"
+Cardinal2PNP ="Cardinal MVP288XF 28.8 Kbps V.34 Fax Modem PNP"
+Cardinal3 ="28.8, V.34-VFC Data Fax Modem" ; Cardinal, CPI (Viva)
+Cardinal4 ="Cardinal MVP144XF 14.4 Kbps Fax Modem"
+Cardinal5 ="Cardinal MVP144E 14.4 Kbps Fax Modem"
+Cardinal6 ="Cardinal MVP24XF 2400 Fax Modem"
+Cardinal7 ="Cardinal MVP144CC 14.4 Kbps PC Card"
+Cardinal8 ="Cardinal MVP288I 28.8 Kbps V.34 Fax Modem"
+Cardinal9 ="28.8, V.34-VFC Data Fax Modem" ; Cardinal, CPI (Viva)
+Cardinal10 ="Cardinal MVP144IF 14.4 Kbps Fax Modem"
+
+Cardinal11 ="14.4 Data Fax Modem" ; MVP144IF, MVP144E, and Logicode
+
+Cardinal12 ="Cardinal MVP144I 14.4 Kbps Fax Modem"
+Cardinal13 ="Cardinal MB2650SR 2400 bps Fax Modem"
+Cardinal14 ="Cardinal MVP192I 19.2 Fax Modem"
+
+Digitan ="Digitan Systems Inc."
+Digitan2 ="Digitan DS144FVM 14.4 Fax-Data-Voice Modem"
+Digitan3 ="Digitan DS288FVM 28.8 Fax-Data-Voice Modem"
+Digitan4 ="Digitan DS288F 28.8 Fax-Data Modem"
+
+BestData = "Best Data"
+BestData1 = "Best Data Smart One 1442FX Modem" ; 1442FX External
+BestData2 = "Best Data Smart One 1442F Modem" ; 1442F Internal
+BestData3 = "Best Data Smart One 2834F Modem" ; 2834F Internal
+BestData4 = "28.8 Internal modem" ; Zoom and Best data combo, INTERNAL
+BestData5 = "Best Data Smart One 2834FX Modem" ; Best Data 2834FX External
+BestData6 = "28.8 External modem" ; Zoom and Best data combo, EXTERNAL
+BestData7 = "Best Data Smart One 1442FX (FTX, RPI)" ; Best Data 1442FX External (FTX, RPI model)
+BestData8 = "Best Data Smart One 1442F (FT, RPI)" ; Best Data 1442FX Internal (FTX, RPI model)
+BestData9 = "Best Data Smart One 9624FQ Modem" ; Best Data 9624FQ internal
+BestData10 = "Best Data Smart One 2400B Modem" ; Best Data Smart One 2400B internal
+BestData11 = "Best Data Smart One 9648FX Modem" ; Best Data Smart One 9648FX external
+BestData12 = "2400 bps Modem" ; Best Data Smart One 9648FX external and Viva combo
+BestData13 = "Best Data Smart One 2400X Modem" ; Best Data Smart One 2400X
+
+SMART = "Smart Modular Technologies"
+SmartMod1 ="SMART Modular Tech ST 1414 Cell PCMCIA"
+SmartMod2 ="SMART Modular Tech ST 2814 V.34 PCMCIA"
+
+Apex = "Apex Data Inc."
+Apex2 = "Apex Data-Fax PCA-1414 PCMCIA Modem"
+Apex3 = "Apex V.34 Cellular PCMCIA Modem"
+Apex4 = "V.34 Cellular PCMCIA Modem" ; Apex and Toshiba combo
+
+ComOne = "Com 1"
+ComOne6="COM1-SA MC218 V.34 PCMCIA" ; MC218 28.8 data fax voice
+ComOne4="COM1-SA MC216 14.4 PCMCIA" ; MC216
+ComOne2="COM1-SA MC214 2400 PCMCIA" ; MC214A
+ComOne1="COM1-SA MC217 14.4 PCMCIA" ; MC217A 14.4 data fax voice
+; ComOne13="PCMCIA S214 V22bis Fax-Modem"
+; ComOne12="PCMCIA SLIMFAXII Fax-Modem"
+; ComOne11="PCMCIA S218 V34 Fax-Modem"
+; ComOne10="PCMCIA SLIMV34 Fax-Modem"
+; ComOne9="PCMCIA S217 V32bis Fax-Modem"
+; ComOne8="PCMCIA AJ 1448 V32bis Fax-Modem"
+; ComOne7="PCMCIA SLIM144 Fax-Modem"
+; ComOne5="COM1-SA MV216 COM1-SA V32bis Data-Fax PCMCIA"
+; ComOne3="COM1-SA MV129 V22bis Data-Fax PCMCIA"
+
+Supra = "Supra Corporation"
+Supra1="Supra COMcard 144 Data Fax PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT - CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmrock2.inx b/private/unimodem/inf/mdmrock2.inx
new file mode 100644
index 000000000..54063d3e8
--- /dev/null
+++ b/private/unimodem/inf/mdmrock2.inx
@@ -0,0 +1,1060 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; This INF supports Rockwell & some Cirrus chipset modems, encompassing many mfgs & models.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Calcom%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMBEFF8E53 ; Calcom 9624VF, Viva msg center
+ExcludeFromSelect=PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-1C8D ; Data Race 14.4 Data 9600 Fax, Data Race 14.4 Data 14.4 Fax
+ExcludeFromSelect=UNIMODEMEAF8FBCB ; Digtan, Diamond
+ExcludeFromSelect=UNIMODEM2BB278BD ; General DataComm FastPro, V.F 28.8
+
+ExcludeFromSelect=UNIMODEMB58BD3B8 ; Prometheus
+ExcludeFromSelect=UNIMODEM57025E9F ; Prometheus
+ExcludeFromSelect=ISAPNP\SSC0000_DEV0000 ; Prometheus, Sierra
+
+ExcludeFromSelect=PCMCIA\MEGAHERTZ-CC324FM-D0CC ; Megahertz and Epson CC324FM
+ExcludeFromSelect=UNIMODEM2CC25305 ; Megahertz and Epson CC324FM
+
+[Rockwell26.PosDup]
+*PNP0500
+
+[Manufacturer]
+%Calcom% = Calcom
+%Epson% = Epson
+%Acer% = Acer
+%Victory% = Victory
+%SierraWireless% = SierraWireless
+%DataRace% = DataRace
+%Mitsubishi% = Mitsubishi
+%Diamond% = Diamond
+%GDC% = GDC
+%ETECH% = ETECH
+%Cirrus% = Cirrus
+%Prometheus% = Prometheus
+
+[Calcom]
+%Calcom1% = Rockwell1, UNIMODEM585301A8 ; Calcom 1442EX
+%Calcom2% = Rockwell2, UNIMODEMCDFB9F26 ; Calcom 2842EX
+%Calcom3% = Rockwell3, UNIMODEMC38C605D ; Calcom 2842I
+%Calcom4% = Rockwell4, UNIMODEM9EE288FD ; Calcom 1442F
+%Calcom5% = Rockwell5, ROCK2_Calcom5, UNIMODEM858E1599 ; Calcom 1442VF
+%Calcom5% = Rockwell5, ROCK2_Calcom5, UNIMODEM16E3BF9F ; Calcom 1442VF
+%Calcom6% = Rockwell6, ROCK2_Calcom6, UNIMODEM9F2BBC58 ; Calcom 9624i
+%Calcom7% = Rockwell7, ROCK2_Calcom7, UNIMODEMBEFF8E53 ; Calcom 9624VF
+%Calcom8% = Rockwell7, UNIMODEMBEFF8E53 ; Calcom 9624VF, Viva msg center
+
+[Epson]
+%Epson1% = Rockwell8, ROCK2_Epson1, PCMCIA\MEGAHERTZ-CC324FM-D0CC
+%Epson1% = Rockwell8, ROCK2_Epson1, UNIMODEM2CC25305
+
+%Epson2% = Rockwell8, PCMCIA\MEGAHERTZ-CC324FM-D0CC
+%Epson2% = Rockwell8, UNIMODEM2CC25305
+
+[Acer]
+%Acer1% = Rockwell6, ROCK2_Acer1, UNIMODEMF17C76B0
+%Acer2% = Rockwell6, ROCK2_Acer2, UNIMODEMF17C76B0
+%Acer3% = Rockwell6, UNIMODEM0FF842E0
+%Acer4% = Rockwell9, ROCK2_Acer4, UNIMODEMEB2448CD
+%Acer5% = Rockwell10, ROCK2_Acer5, UNIMODEM7EBF3F36
+%Acer6% = Rockwell5, ROCK2_Acer6, UNIMODEM858E1599
+
+[Victory]
+%Victory1% = Rockwell11, UNIMODEM7C16C318
+
+[SierraWireless]
+%SierraWireless1% = Rockwell12, UNIMODEMF6FF7662
+%SierraWireless1% = Rockwell12, UNIMODEM3C66A726
+
+[DataRace]
+%DataRace1% = Rockwell13, PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-0A80
+%DataRace1% = Rockwell13, UNIMODEM4C0DB6BF
+
+%DataRace1% = Rockwell13, PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-56ED ; RediCARD Data 14.4 Fax 9600
+%DataRace1% = Rockwell13, ROCK2_DataRace1, PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-1C8D ; RediCARD Data 14.4 Fax 9600
+%DataRace1% = Rockwell13, UNIMODEM4E03291C ; RediCARD Data 14.4 Fax 9600
+%DataRace1% = Rockwell13, UNIMODEMDFCEA50D ; RediCARD Data 14.4 Fax 9600
+%DataRace2% = Rockwell14, PCMCIA\DATA_RACE-V.22BIS/FAX_145-01-14-05D3 ; RediCARD Data 2400 Fax 9600
+%DataRace2% = Rockwell14, PCMCIA\DATA_RACE-V.22BIS/FAX_145-01-14-FA24 ; RediCARD Data 2400 Fax 9600
+%DataRace2% = Rockwell14, UNIMODEMF3F6EED2 ; RediCARD Data 2400 Fax 9600
+%DataRace2% = Rockwell14, UNIMODEM5606C4CF ; RediCARD Data 2400 Fax 9600
+%DataRace3% = Rockwell13, ROCK2_DataRace3, PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-1C8D ; RediCARD Data 14.4 Fax 14.4
+%DataRace3% = Rockwell13, UNIMODEME02A4FA6 ; RediCARD Data 14.4 Fax 14.4
+%DataRace4% = Rockwell13, PCMCIA\DATA_RACE-V.32BIS/FAX_145-01-24-1C8D ; RediCARD Data 14.4 Fax 14.4, Redicard Data 14.4 Fax 9600
+
+[Mitsubishi]
+%Mitsubishi2% = Rockwell15, PCMCIA\MITSUBISHI_ELECTRIC-MELFAX_CARD_-EC-AD3A ; Mitsubishi Melfax 14.4 PCMCIA
+%Mitsubishi2% = Rockwell15, UNIMODEM9E9600C5 ; Mitsubishi Melfax 14.4 PCMCIA
+
+[Diamond]
+%Diamond1% = Rockwell16, UNIMODEM554FF2DF ; TeleCommander 2500
+%Diamond2% = Rockwell17, ROCK2_Diamond2, UNIMODEMEAF8FBCB ; TeleCommander 3500
+%Diamond3% = Rockwell17, UNIMODEMEAF8FBCB ; TeleCommander 3500, Digitan
+
+[GDC]
+%GDC1% = Rockwell18, ROCK2_GDC1, UNIMODEM2BB278BD ; General DataComm V.F 28.8
+%GDC2% = Rockwell18, ROCK2_GDC2, UNIMODEM2BB278BD ; General DataComm FastPro
+%GDC3% = Rockwell18, UNIMODEM2BB278BD ; General DataComm FastPro, V.F 28.8
+
+[ETECH]
+%Etech1% = Rockwell19, UNIMODEM2BB97F96
+%Etech2% = Rockwell20, UNIMODEM2705201F
+%Etech3% = Rockwell21, UNIMODEM3CB1DADD
+%Etech4% = Rockwell22, ROCK2_Etech4, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874
+%Etech4% = Rockwell22, ROCK2_Etech4, UNIMODEM858E1599
+
+[Cirrus]
+%Cirrus1% = Rockwell24, UNIMODEMCE52F04A ; Cirrus Data Fax Voice MDK1414UN
+
+[Prometheus]
+%Prometheus1% = Rockwell25, ROCK2_Prometheus1, UNIMODEMB58BD3B8
+%Prometheus2% = Rockwell25, ROCK2_Prometheus2, UNIMODEMB58BD3B8
+%Prometheus3% = Rockwell25, UNIMODEMB58BD3B8
+%Prometheus4% = Rockwell25, ROCK2_Prometheus4, UNIMODEMB58BD3B8
+%Prometheus5% = Rockwell26, ROCK2_Prometheus5, UNIMODEM57025E9F
+%Prometheus6% = Rockwell26, ROCK2_Prometheus6, UNIMODEM57025E9F
+%Prometheus7% = Rockwell26, UNIMODEM57025E9F
+%Prometheus8% = Rockwell26, ROCK2_Prometheus8,ISAPNP\SSC0000_DEV0000
+%Prometheus8% = Rockwell26, ROCK2_Prometheus8, UNIMODEM57025E9F
+%Prometheus9% = Rockwell26, ISAPNP\SSC0000_DEV0000
+%Prometheus10% = Rockwell26, ROCK2_Prometheus10,ISAPNP\SSC0000_DEV0000
+%Prometheus10% = Rockwell26, ROCK2_Prometheus10, UNIMODEM57025E9F
+%Prometheus11% = Rockwell26, ROCK2_Prometheus11,ISAPNP\SSC0000_DEV0000
+%Prometheus11% = Rockwell26, ROCK2_Prometheus11, UNIMODEM57025E9F
+
+
+[Rockwell1] ; Calcom 1442EX
+AddReg=All, MfgAddReg, Rockwell1.AddReg, EXTERNAL
+
+[Rockwell2] ; Calcom 2842EX
+AddReg=All, MfgAddReg, Rockwell2.AddReg, EXTERNAL
+
+[Rockwell3] ; Calcom 2842EX
+AddReg=All, MfgAddReg, Rockwell2.AddReg, INTERNAL
+
+[Rockwell4] ; Calcom 1442F
+AddReg=All, MfgAddReg, Rockwell1.AddReg, INTERNAL
+
+[Rockwell5] ; Calcom 1442VF
+AddReg=All, MfgAddReg, Rockwell5.AddReg, INTERNAL
+
+[Rockwell6] ; Calcom 9624i
+AddReg=All, MfgAddReg, Rockwell6.AddReg, INTERNAL
+
+[Rockwell7] ; Calcom 9624VF
+AddReg=All, MfgAddReg, Rockwell7.AddReg, INTERNAL
+
+[Rockwell8] ; 24-96 PCMCIA
+AddReg=All, MfgAddReg, Rockwell8.AddReg, PCMCIA
+
+[Rockwell9] ; 28.8 GVC/Acer
+AddReg=All, MfgAddReg, Rockwell9.AddReg, INTERNAL
+
+[Rockwell10] ; 14.4 GVC/Acer
+AddReg=All, MfgAddReg, Rockwell10.AddReg, INTERNAL
+
+[Rockwell11] ; Victory 14.4
+AddReg=All, MfgAddReg, Rockwell11.AddReg, EXTERNAL
+
+[Rockwell12] ; Sierra Wireless
+AddReg=All, MfgAddReg, Rockwell12.AddReg, EXTERNAL
+
+[Rockwell13] ; Data Race 14.4 Data 9600 FAX
+AddReg=All, MfgAddReg, Rockwell13.AddReg, PCMCIA
+
+[Rockwell14] ; Data Race 2400 Data 9600 FAX
+AddReg=All, MfgAddReg, Rockwell14.AddReg, PCMCIA
+
+[Rockwell15] ; Mitsubishi Melfax 14.4 PCMCIA
+AddReg=All, MfgAddReg, Rockwell15.AddReg, PCMCIA
+
+[Rockwell16] ; TeleCommander 2500
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, Rock_Voice, Rockwell16.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Rockwell17] ; TeleCommander 3500
+AddReg=All, MfgAddReg, Rockwell17.AddReg, INTERNAL
+
+[Rockwell18] ; General DataComm V.F 28.8
+AddReg=All, MfgAddReg, Rockwell18.AddReg, EXTERNAL
+
+[Rockwell19] ; E-Tech Bullet 100E
+AddReg=All, MfgAddReg, Rockwell19.AddReg, EXTERNAL
+
+[Rockwell20] ; E-Tech PC288MX
+AddReg=All, MfgAddReg, Rockwell20.AddReg, INTERNAL
+
+[Rockwell21] ; E-Tech PC1414UX
+AddReg=All, MfgAddReg, Rockwell21.AddReg, INTERNAL
+
+[Rockwell22] ; E-Tech C1414CX
+AddReg=All, MfgAddReg, Rockwell22.AddReg, PCMCIA
+
+[Rockwell24] ; Cirrus Data Fax Voice MDK1414UN
+AddReg=All, MfgAddReg, Rockwell24.AddReg, INTERNAL
+
+[Rockwell25] ; Prometheus (Sierra chipset)
+AddReg=All, MfgAddReg, Rockwell25.AddReg, EXTERNAL
+
+[Rockwell26] ; Prometheus (Sierra chipset)
+AddReg=All, MfgAddReg, Rockwell25.AddReg, INTERNAL
+
+
+[Rockwell1.AddReg] ; Calcom 1442EX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 \V1 W1 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N7S48=7S36=7"
+HKR, Settings, ErrorControl_Forced,, "\N6S48=128S36=4"
+HKR, Settings, ErrorControl_Off,, "\N0S48=128"
+
+[Rockwell2.AddReg] ; Calcom 2842EX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W2 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Rockwell5.AddReg] ; Calcom 1442VF - Cirrus Data Fax Voice
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2-J1"
+
+[Rockwell6.AddReg] ; Calcom 9624i
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, DialSuffix,, ""
+
+[Rockwell7.AddReg] ; Calcom 9624VF
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V1Q0&C1&D2<cr>"
+
+[Rockwell8.AddReg] ; PCMCIA 2400 bps, 19.2 max dte, no cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell9.AddReg] ; 28.8, no cell Acer/GVC
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V1 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell10.AddReg] ; 14.4 Acer/GVC
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell11.AddReg] ; Victory 14.4
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell12.AddReg] ; Sierra Wireless 19.2
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR, Init, 2,, "AT&FE0V1&D2&C1W2 \V1 S95=47 !PSTN<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+
+[Rockwell13.AddReg] ; Data Race 14.4 data, 9600 Fax PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 \V2 &D2 &C1 S95=47<cr>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Rockwell14.AddReg] ; Data Race 2400 data, 9600 Fax PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S95=47<cr>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Rockwell15.AddReg] ; Mitsubishi Melfax 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4 -K1 )M1 -Q1 *H1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Rockwell16.AddReg] ; TeleCommander 2500, 14.4 Kbps
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Rockwell17.AddReg] ; Digitan, Diamond 3500, 28.8 Kbps + cell
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H1"
+
+[Rockwell18.AddReg] ; General DataComm
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Rockwell19.AddReg] ; E-Tech Bullet 100E
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1 $X2<cr>"
+HKR, Settings, FlowControl_Off,, "$F5"
+HKR, Settings, FlowControl_Hard,, "$F4"
+HKR, Settings, FlowControl_Soft,, "$F0"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E0"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, Compression_Off,, "$C0"
+
+[Rockwell20.AddReg] ; E-Tech PC288MX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C3""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0-J0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+
+[Rockwell21.AddReg] ; E-Tech PC1414UX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W1 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,,"\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Rockwell22.AddReg] ; E-Tech PCMCIA 14400, cirrus chipset
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+
+[Rockwell24.AddReg] ; Cirrus Data Fax Voice MDK1414UN
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3-J1"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q2 *H1 ""M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4 -K1 )M1 -Q2 *H1 ""M1"
+
+[Rockwell25.AddReg] ; Prometheus (Sierra chipset)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 \V1<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_On,,"\N6"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Strings]
+
+Calcom = "Calcom"
+Calcom1 = "Calcom 14.4 Data Fax, 1442EX"
+Calcom2 = "Calcom 28.8 Data Fax, 2842EX"
+Calcom3 = "Calcom 28.8 Data Fax, 2842I"
+Calcom4 = "Calcom 14.4 Data Fax, 1442F"
+Calcom5 = "Calcom 14.4 Data Fax Voice, 1442VF"
+Calcom6 = "Calcom 2400-9600 Data Fax, 9624i"
+Calcom7 = "Calcom 2400-9600 Data Fax Voice, 9624VF"
+Calcom8 = "2400-9600 Data Fax Voice Modem"
+
+Epson = "Epson"
+Epson1 = "Epson Data Fax 24-96 PCMCIA"
+Epson2 = "Data Fax 24-96 PCMCIA"
+
+Acer = "Acer"
+Acer1 = "Acer 2400 Bps Data, 96-48 Fax, FM9648HR"
+Acer2 = "Acer 2400 Bps Data, M24H-R1"
+Acer3 = "Acer 2400 Bps Data Fax Voice, VF9924H-C1"
+Acer4 = "Acer 28.8, V.34 Data Fax, F1128HV-R6"
+Acer5 = "Acer 14.4 Data Fax, F1114HV-R2"
+Acer6 = "Acer 14.4 Data Fax Voice, VF1114HV-C1"
+
+Victory = "Victory"
+Victory1 = "Victory 14.4 Data Fax"
+
+SierraWireless = "Sierra Wireless"
+SierraWireless1 = "Sierra Wireless PocketPlus 210 Wireline"
+
+DataRace = "Data Race"
+DataRace1 = "Data Race RediCARD Data 14.4 Fax 9600"
+DataRace2 = "Data Race RediCARD Data 2400 Fax 9600"
+DataRace3 = "Data Race RediCARD Data 14.4 Fax 14.4"
+DataRace4 = "Data Race RediCARD Data 14.4 Fax"
+
+Mitsubishi = "Mitsubishi"
+Mitsubishi2 = "Mitsubishi Melfax 14.4 PCMCIA"
+
+Diamond = "Diamond Multimedia"
+Diamond1 = "TeleCommander 2500 Voice"
+Diamond2 = "TeleCommander 3500"
+Diamond3 = "28.8 Data Fax Modem"
+
+GDC = "General DataComm"
+GDC1 = "General DataComm V.F 28.8"
+GDC2 = "General DataComm FastPro"
+GDC3 = "General DataComm FastPro or V.F 28.8"
+
+ETECH = "E-Tech/Bullet Telecom"
+
+Etech1 = "E-Tech Bullet 100E 28.8 V.34 Data Fax"
+Etech2 = "E-Tech Bullet PC288MX 28.8 V.34 Data Fax"
+Etech3 = "E-Tech Bullet PC1414UX 14.4 Data Fax"
+Etech4 = "E-Tech Bullet C1414CX 14.4 Data Fax PCMCIA"
+
+Cirrus = "Cirrus Logic"
+Cirrus1 = "Cirrus Data Fax Voice MDK1414UN"
+
+Prometheus = "Prometheus"
+Prometheus1 = "Prometheus CyberPhone PC144evsp"
+Prometheus2 = "Prometheus CyberPhone PC144ev"
+Prometheus3 = "Prometheus 14.4 Data Fax Modem"
+Prometheus4 = "Prometheus CyberPort PC144e"
+Prometheus5 = "Prometheus CyberStereo PC144ivspa"
+Prometheus6 = "Prometheus CyberStereo PC144iva"
+Prometheus7 = "Prometheus 14.4 Data Fax Modem"
+Prometheus8 = "Prometheus CyberPhone PC144ivsp"
+Prometheus9 = "14.4 Data Fax Modem, Plug & Play"
+Prometheus10 = "Prometheus CyberPhone PC144iv"
+Prometheus11 = "Prometheus CyberPort PC144i"
+
+; VoiceView
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[Rock_Voice]
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile, 1, 27,03,08,00
+HKR,, VoiceManufacturerID, 1, 01,00
+HKR,, VoiceProductIDWaveIn, 1, 80,00
+HKR,, VoiceProductIDWaveOut,1, 81,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 82,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 83,00
+HKR,, VoiceMixerMid, 1,02,00
+HKR,, VoiceMixerPid, 1,99,01
+HKR,, VoiceMixerLineID, 1,00,00,05,00
+
+HKR,, SpeakerPhoneSpecs, 1, 00,00,00,00, 0f,00,00,00, 03,00,00,00, 00,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 2,, "at#spk=0,15,,<cr>"
+HKR, SpeakerPhoneDisable, 3,, "at#vls=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneMute, 2,, "at#spk=0,,,<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneUnMute, 2,, "at#spk=1,,,<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 2,, "at#spk=,<Vol>,<Gain><cr>"
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/NOR<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NOR<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NOR<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NOR<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NOR<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NOR<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NOR<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NOR<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NOR<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NOR<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NOR<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NOR<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NOR<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NOR<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NOR<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NOR<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-V.42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-V.42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-V.42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-V.42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-V.42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-V.42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-V.42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-V.42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-V.42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-V.42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-V.42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-V.42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-V.42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-V.42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-V.42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-V.42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-V.42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+; VoiceView
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+;setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+;setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "-SSV", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SMD", 1, 0A, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SFA", 1, 0B, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRA", 1, 0C, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRQ", 1, 0D, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRC:", 1, 0E, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-STO", 1, 0F, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SVM", 1, 10, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmrock3.inx b/private/unimodem/inf/mdmrock3.inx
new file mode 100644
index 000000000..2d7c3979b
--- /dev/null
+++ b/private/unimodem/inf/mdmrock3.inx
@@ -0,0 +1,934 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Rockwell
+; Supports Rockwell and cirrus chipsets
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Aztech%
+
+[Manufacturer]
+%Aztech% = Aztech
+%3X% = 3X
+%Logicode% = Logicode
+%Reveal% = Reveal
+%Supra% = Supra
+%Infotel% = Infotel
+%Cirrus% = Cirrus
+
+[ControlFlags]
+ExcludeFromSelect=PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; Logicode, EXP, Digicom
+ExcludeFromSelect=UNIMODEM16E3BF9F ; Logicode and Viva 14.4 PCMCIA
+ExcludeFromSelect=UNIMODEM858E1599 ; Logicode, EXP, Digicom
+ExcludeFromSelect=*SUP1380
+ExcludeFromSelect=UNIMODEM0BCCA4A7
+
+[Rockwell5.PosDup]
+*PNP0500
+
+; Driver section
+
+[Aztech]
+%Aztech1% = Rockwell1, ROCK3_Aztech1, UNIMODEME466C599
+
+[3X]
+%3X1% = Rockwell2, UNIMODEMADDF16B2
+
+[Reveal]
+%Reveal3% = Rockwell3, ROCK3_Reveal3, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; 14.4 Data Fax PCMCIA
+%Reveal3% = Rockwell4, ROCK3_Reveal3, UNIMODEM16E3BF9F ; 14.4 Data Fax PCMCIA
+
+[Logicode]
+%Logicode10% = Rockwell3, ROCK3_Logicode10, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset)
+%Logicode10% = Rockwell3, ROCK3_Logicode10, UNIMODEM858E1599 ; Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset)
+%Logicode11% = Rockwell3, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874 ; Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset)
+%Logicode11% = Rockwell3, UNIMODEM858E1599 ; combo for Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset) and clones in exp and dsi infs
+%Logicode12% = Rockwell4, UNIMODEM16E3BF9F ; Logicode 14.4 Internal data-fax and Viva combo
+
+[Supra]
+%Supra1% = Rockwell5, *SUP1380 ; compat id=*SUP1290, hdwe id=*SUP1380,ISAPNP\SUP1380
+%Supra1% = Rockwell5, UNIMODEM989C68E0
+
+[Infotel]
+%Infotel1% = Rockwell3, ROCK3_Infotel1, PCMCIA\CIRRUS_LOGIC-FAX_MODEM-F874
+%Infotel1% = Rockwell3, ROCK3_Infotel1, UNIMODEM858E1599
+
+[Cirrus]
+%Cirrus2% = Rockwell6, ROCK3_Cirrus2, UNIMODEM0BCCA4A7
+%Cirrus3% = Rockwell7, UNIMODEM0BCCA4A7
+
+; Installation section
+
+[Rockwell1]
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, Rockwell1.AddReg, Verbose_Responses, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Rockwell2]
+AddReg=All, MfgAddReg, ROCK_VOICE_UNIQUE_1, Rockwell2.AddReg, Verbose_Responses, INTERNAL
+
+[Rockwell3]
+AddReg=All, MfgAddReg, CIRRUS_VOICE_ALL, Rockwell3.AddReg, Verbose_Responses, PCMCIA
+
+[Rockwell4]
+AddReg=All, MfgAddReg, CIRRUS_VOICE_ALL, Rockwell4.AddReg, Verbose_Responses, INTERNAL
+
+[Rockwell5]
+AddReg=All, MfgAddReg, ROCK_VOICE_UNIQUE_2, Rockwell5.AddReg, Supra_Numeric_Responses, INTERNAL
+
+[Rockwell6]
+AddReg=All, MfgAddReg, CIRRUS_VOICE_ALL, Rockwell6.AddReg, Verbose_Responses, INTERNAL
+
+[Rockwell7]
+AddReg=All, MfgAddReg, Rockwell6.AddReg, Verbose_Responses, INTERNAL
+
+; Model AddReg section
+
+[Rockwell1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Rockwell2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 S0=255<cr>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 -Q1 *H0 :E1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 -Q1 *H0 :E1"
+
+[Rockwell3.AddReg] ; PCMCIA 14400, no cell, cirrus chipset
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3-J1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4-J1"
+
+[Rockwell4.AddReg] ; Logicode ISA and Viva 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f3,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Rockwell5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+HKR, Init, 2,, "AT &F2 E V Q0 W1 &C1 &D2 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_Off,, "&Q6\N"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Forced,, "&Q5\N4"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Rockwell6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 \V2 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_On,,"\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+; String section
+
+[Strings]
+
+3X = "3X"
+3X1 = "3X 14.4 Data Fax Modem Voice"
+
+Aztech = "Aztech Systems"
+Aztech1 = "Aztech 14.4 Data Fax Voice Soundcard"
+
+Reveal = "Reveal"
+Reveal3 = "Reveal 14.4, Data Fax PC-Card CM144"
+
+Logicode = "Logicode"
+Logicode10= "Logicode 14.4 Data-Fax-Voice PCMCIA" ; Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset)
+Logicode11= "14.4 Data-Fax Modem Voice" ; combo for Logicode 14.4 Data-Fax-Voice PCMCIA (cirrus chipset) and clones in exp and dsi infs
+Logicode12= "14.4 Data Fax Modem Voice" ; combo for Logicode and Viva 14.4 PCMCIA
+
+Supra = "Supra Corporation"
+Supra1="SupraExpress 288i PnP Voice"
+
+Infotel = "Infotel"
+Infotel1="Infotel FM 144C Data Fax Voice"
+
+Cirrus = "Cirrus Logic"
+Cirrus2 = "Cirrus Data Fax Voice MDK1414EC2"
+Cirrus3 = "14.4 Data Fax Modem"
+
+; VoiceView
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[ROCK_VOICE_ALL] ; Rockwell baseline voice settings, includes VoiceView init
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceManufacturerID, 1, 01,00
+HKR,, VoiceProductIDWaveIn, 1, 80,00
+HKR,, VoiceProductIDWaveOut,1, 81,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 82,00
+HKR,, VoiceProductIDHandsetWaveOut,1, 83,00
+HKR,, VoiceMixerMid,1,02,00
+HKR,, VoiceMixerPid,1,99,01
+HKR,, VoiceMixerLineID,1,00,00,05,00
+HKR,, SpeakerPhoneSpecs, 1, 00,00,00,00, 0f,00,00,00, 03,00,00,00, 00,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 2,, "at#spk=0,15,,<cr>"
+HKR, SpeakerPhoneDisable, 3,, "at#vls=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneMute, 2,, "at#spk=0,,,<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneUnMute, 2,, "at#spk=1,,,<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 2,, "at#spk=,<Vol>,<Gain><cr>"
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[ROCK_VOICE_SERWAVE] ; Rockwell serial wave settings
+HKR,, VoiceProfile, 1, 27,03,00,00
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+
+[ROCK_VOICE_UNIQUE_1] ; Rockwell/3X chipset voice settings. No speakerphone, no mic/spkr jacks (handset only), no Voiceview, no distinctive ring, has caller id
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile,1, 23,82,00,00
+HKR,, VoiceMixerMid,1,02,00
+HKR,, VoiceMixerPid,1,99,01
+HKR,, VoiceMixerLineID,1,00,00,05,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[ROCK_VOICE_UNIQUE_2] ; Rockwell/Supra chipset voice settings. No speakerphone, no mic/spkr jacks (handset only), no Voiceview, no caller id, no distinctive ring
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile,1, 21,82,00,00
+HKR,, VoiceMixerMid,1,02,00
+HKR,, VoiceMixerPid,1,99,01
+HKR,, VoiceMixerLineID,1,00,00,05,00
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[CIRRUS_VOICE_ALL] ; Cirrus chipset voice settings
+HKR,,Enumerator,,serwave.vxd
+HKR,, VoiceProfile, 1, 63,00,20,00
+HKR,, VoiceMixerMid,1,02,00
+HKR,, VoiceMixerPid,1,99,01
+HKR,, VoiceMixerLineID,1,00,00,05,00
+HKR,, HandsetCloseDelay, 1, 05,00,00,00
+HKR, StartPlay, 1,, "at#vpy<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrd<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h1A><cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10>Aat<cr>"
+HKR, OpenHandset, 1,, "at#vcl=1<cr>"
+HKR, OpenHandset, 2,, "at#vln=2<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR, LineSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, LineSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetRecordFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetRecordFormat, 2,, "at#vsm=AD4<cr>"
+HKR, HandsetSetPlayFormat, 1,, "at#vsr=9600<cr>"
+HKR, HandsetSetPlayFormat, 2,, "at#vsm=AD4<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#vcl=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#vcl=1<cr>"
+HKR, VoiceAnswer, 2,, "at#vln=1<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#vcl=1<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vln=17<cr>"
+HKR, VoiceDialNumberSetup, 3,, "atdt,;<cr>"
+HKR, GenerateDigit, 1,, "atdt<Digit>;<cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W1 S0=0 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Verbose_Responses]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+[Supra_Numeric_Responses]
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "19<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "56<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "57<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "58<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+HKR, Responses, "95<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "96<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "97<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "98<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "99<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "100<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "101<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+
+; voiceview
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+;setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+;setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "-SSV", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SMD", 1, 0A, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SFA", 1, 0B, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRA", 1, 0C, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRQ", 1, 0D, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRC:", 1, 0E, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-STO", 1, 0F, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SVM", 1, 10, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmrock4.inx b/private/unimodem/inf/mdmrock4.inx
new file mode 100644
index 000000000..2c0ce8137
--- /dev/null
+++ b/private/unimodem/inf/mdmrock4.inx
@@ -0,0 +1,512 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Rockwell
+; Supports Rockwell PCMCIA voice modems
+
+[Version]
+; LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+%Rockwell% = Rockwell
+%Connectware% = Connectware
+
+[Rockwell]
+%Modem17% = Modem17, PCMCIA\RIPICAB-RC144ACL-3BD0
+%Modem18% = Modem18, PCMCIA\RIPICAB-RC288ACL-0755
+%Modem18% = Modem18, UNIMODEMBB081B33
+
+
+[Connectware]
+%Modem19% = Modem18, PCMCIA\CONNECTWARE-PhoneWorks_28.8_To_Go!-339D
+%Modem19% = Modem18, UNIMODEMC82699F0
+
+[Modem17]
+AddReg=All, MfgAddReg, ROCKWELL_VOICE, Modem17.AddReg, PCMCIA
+
+[Modem18]
+AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, ROCKWELL_VOICE, Modem18.AddReg, PCMCIA
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[ROCKWELL_VOICE]
+HKR,, VoiceProfile, 1, 27,02,48,00
+HKR,, VoiceManufacturerID, 1, 01,00
+HKR,, VoiceProductIDWaveIn, 1, 80,00
+HKR,, VoiceProductIDWaveOut,1, 81,00
+
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+HKR,, SpeakerPhoneSpecs, 1, 00,00,00,00, 0f,00,00,00, 03,00,00,00, 00,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#vls=5<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#vls=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at<cr>"
+
+HKR,, HandsetCloseDelay, 1, 05,00,00,00
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=2<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR,, CallerIDPrivate,, P
+HKR,, CallerIDOutSide,, O
+HKR,, VariableTerminator,,<cr><lf>
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[Strings]
+MS = "Microsoft"
+ClassName = "Modem"
+
+Rockwell = "Rockwell"
+Modem17 = "Rockwell 144 PCMCIA Data+Fax+Voice"
+Modem18 = "Rockwell 288 PCMCIA Data+Fax+Voice"
+
+Connectware = "Connectware"
+Modem19 = "PhoneWorks 28.8 To Go!"
+
+; VoiceView
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,Enumerator,,serwave.vxd
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR,,PortSubClass,1,02
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 S95=47<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; connect at 14400
+HKR, Responses, "69<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; Protocol:None
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Protocol:LAPM
+HKR, Responses, "78<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; Connect V42BIS
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Prorocol:ALT
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NOTUSED<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42BIZ<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200TX/75RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75TX/1200RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-+FCERROR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-+FCERROR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>",1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "<cr><lf>CONNECT REL/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL/MNP5<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL/MNP5<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/MNP5<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/MNP5<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/MNP5<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/MNP5<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/MNP5<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/MNP5<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL/MNP5<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL/MNP5<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL/MNP5<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL/MNP5<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+; VoiceView
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+;setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+;setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "<cr><lf>-SSV<cr><lf>", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SMD<cr><lf>", 1, 0a, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SFA<cr><lf>", 1, 0b, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRA<cr><lf>", 1, 0c, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRQ<cr><lf>", 1, 0d, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SRC:<cr><lf>", 1, 0e, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-STO<cr><lf>", 1, 0f, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>-SVM<cr><lf>", 1, 10, 00, 00,00,00,00, 00,00,00,00
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
diff --git a/private/unimodem/inf/mdmrock5.inx b/private/unimodem/inf/mdmrock5.inx
new file mode 100644
index 000000000..719a33ce3
--- /dev/null
+++ b/private/unimodem/inf/mdmrock5.inx
@@ -0,0 +1,455 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Askey
+
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Askey%
+
+[Manufacturer]
+%Askey% = Askey
+
+[Askey]
+%Askey1% = Modem1, UNIMODEM753D4B95
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+Askey = "Askey"
+Askey1 = "Askey 28.8, V.34 Data Fax Modem"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 W2 \V1 S0=0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP 5", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM V.42 BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP 5", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM V.42 BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP 5", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM V.42 BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP 5", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM V.42 BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP 5", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM V.42 BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP 5", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM V.42 BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP 5", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM V.42 BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP 5", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM V.42 BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP 5", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM V.42 BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300/VFC", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200/VFC", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400/VFC", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800/VFC", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200/VFC", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600/VFC", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000/VFC", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/NOR<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/NOR<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NOR<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NOR<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/NOR<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NOR<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/NOR<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NOR<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/NOR<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NOR<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/NOR<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/NOR<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/NOR<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/NOR<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NOR<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NOR<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/REL-V.42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL-V.42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL-V.42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-V.42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-V.42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-V.42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-V.42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-V.42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-V.42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-V.42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL-V.42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL-V.42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL-V.42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL-V.42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL-V.42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL-V.42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL-V.42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsecdy.inx b/private/unimodem/inf/mdmsecdy.inx
new file mode 100644
index 000000000..5dc9a1216
--- /dev/null
+++ b/private/unimodem/inf/mdmsecdy.inx
@@ -0,0 +1,142 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Security Dunamics
+; Supports AT&T Comsphere and others
+;
+; Security Dynamics devices are inserted between an external modem and the
+; PC. They can be treated as the external modem with the following restrictions:
+; 1. The DCE<->DTE rate and Connection rate are locked at 19200
+; 2. The connect response from the modem is eaten up by the device. This is
+; a big nuisance and RAS worked around it by hardcoding responses
+; corresponding to the packets from known protocols.
+; 2. Compression should be disabled.
+;
+;[SD ACM400 w/ AT&T 3820]
+;
+;This entry uses the Security Dynamics ACM/400 with the
+;AT&T Comsphere 3820 modem. - done
+; two devices - done
+;The macro definitions, <xxx_xx>=, and COMMAND_INIT= lines must be
+;changed in order to use other modems with the ACM/400.
+;Set ACM/400 ports to fixed 19200 bps (not autobaud).
+;Do not use Destination IDs with ACM/400 accounts.
+
+
+
+;-------------------------
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%SecurityDynamics%
+
+
+[Manufacturer]
+%SecurityDynamics% = SecurityDynamics
+
+
+[SecurityDynamics]
+%SecurityDynamics1% = SecurityDynamics1, SecDy_SD1
+
+
+; Installation sections
+
+[SecurityDynamics1]
+AddReg=All, Common, SecurityDynamics1.AddReg, att_responses, EXTERNAL
+
+;AddReg sections
+
+[SecurityDynamics1.AddReg]
+; uses comsphere 3820
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 07,00,00,00, 37,03,00,00, 00,4b,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+
+[Strings]
+SecurityDynamics ="Security Dynamics"
+SecurityDynamics1 ="Security Dynamics with AT&T 3820"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[Common]
+; uses comsphere 3820
+HKR,, InactivityScale, 1, 3c,00,00,00
+; original comsphere from Win95
+; HKR, Init, 2,, "AT &F S0=0 &D2 E0 V1<cr>"
+ HKR, Init, 2,, "AT&F&C1&D2 V1 X7 S0=0 S2=128 S7=55<cr>"
+HKR, Monitor, 1,, "ATS0=1<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "None"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, "" ; disabled
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N1"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[att_responses]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+; We consider <hff> to be a ring response
+HKR, Responses, "<hff>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+; we consider DIALIN to be a ring response
+HKR, Responses, "DIALIN", 1, 08, 00, 00,00,00,00, 00,00,00,00
+; we consider <h00> to be informational
+HKR, Responses, "<h00>", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsier.inx b/private/unimodem/inf/mdmsier.inx
new file mode 100644
index 000000000..123b5b2e0
--- /dev/null
+++ b/private/unimodem/inf/mdmsier.inx
@@ -0,0 +1,189 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Sierra Semiconductor
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Sierra%
+
+[Manufacturer]
+%Sierra% = Sierra
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM6A25C644 ; Sierra, AST
+
+ExcludeFromSelect=ISAPNP\SSC0001_DEV0000
+ExcludeFromSelect=ISAPNP\SSC0000_DEV0000
+ExcludeFromSelect=ISAPNP\SSC0004_DEV0000
+
+[Modem2.PosDup]
+*PNP0500
+
+[Sierra]
+%Modem1% = Modem1, UNIMODEM527EBE7A ; SQ3223
+%Modem2% = Modem2, SIER_Modem2, UNIMODEM6A25C644 ; SQ3229
+%Modem3% = Modem2, ISAPNP\SSC0001_DEV0000 ; SQ3262
+%Modem3% = Modem2, SIER_Modem3, UNIMODEM6A25C644 ; SQ3262
+%Modem4% = Modem2, SIER_Modem4, ISAPNP\SSC0000_DEV0000 ; SQ3228
+%Modem4% = Modem2, SIER_Modem4, UNIMODEM6A25C644 ; SQ3228
+%Modem5% = Modem2, UNIMODEM6A25C644 ; Sierra, AST
+%Modem6% = Modem2, ISAPNP\SSC0004_DEV0000 ; SQ3230
+%Modem6% = Modem2, SIER_Modem6, UNIMODEM6A25C644 ; SQ3230
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "\N6"
+
+[Strings]
+Sierra = "Sierra Semiconductor"
+Modem1="Sierra 14.4 Data Fax SQ3223"
+Modem2="Sierra 14.4 Data Fax Voice SQ3229"
+Modem3="Sierra 14.4 Data Fax Voice SQ3262"
+Modem4="Sierra 14.4 Data Fax Voice SQ3228"
+Modem5="14.4 Data Fax"
+Modem6="Sierra 14.4 Data Fax Voice SQ3230"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 W2 \V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0 "
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCON", 1, 03, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsimpl.inx b/private/unimodem/inf/mdmsimpl.inx
new file mode 100644
index 000000000..d67d09f92
--- /dev/null
+++ b/private/unimodem/inf/mdmsimpl.inx
@@ -0,0 +1,419 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Global Village Communication
+
+[Version]
+Signature="$CHICAGO$"
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Class=Modem
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem10% = Modem10, UNIMODEM0AD65972 ; Simplemodem 144vi
+%Modem9% = Modem9, UNIMODEMF998CBE2 ; Simplemodem 288vi
+%Modem8% = Modem8, UNIMODEMFB03E616 ; Simplemodem 144ve
+%Modem7% = Modem7, UNIMODEM23A23CC3 ; Simplemodem 288ve
+%Modem6% = Modem6, UNIMODEMB2251BDB ; Simplemodem 144fi
+%Modem5% = Modem5, UNIMODEM7F943131 ; Simplemodem 288fi V.34
+%Modem4% = Modem4, UNIMODEM8CAF3977 ; Simplemodem 96f
+%Modem3% = Modem3, UNIMODEM9F1B39F2 ; Simplemodem 144f
+%Modem2% = Modem2, UNIMODEMB35B067F ; Simplemodem 288f V.FC
+%Modem1% = Modem1, UNIMODEM25DBC05A ; Simplemodem 288f V.34
+
+
+; Installation sections
+
+[Modem10] ; Simplemodem 144vi
+AddReg=All, Modem10.AddReg, INTERNAL
+
+[Modem9] ; Simplemodem 288vi
+AddReg=All, Modem9.AddReg, INTERNAL
+
+[Modem8] ; Simplemodem 144ve
+AddReg=All, Modem8.AddReg, EXTERNAL
+
+[Modem7] ; Simplemodem 288ve
+AddReg=All, Modem7.AddReg, EXTERNAL
+
+[Modem6] ; Simplemodem 144fi
+AddReg=All, Modem6.AddReg, INTERNAL
+
+[Modem5] ; Simplemodem 288fi V.34
+AddReg=All, Modem5.AddReg, INTERNAL
+
+[Modem4] ; Simplemodem 96f
+AddReg=All, Modem4.AddReg, EXTERNAL
+
+[Modem3] ; Simplemodem 144f
+AddReg=All, Modem3.AddReg, EXTERNAL
+
+[Modem2] ; Simplemodem 288f V.FC
+AddReg=All, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; Simplemodem 288f V.34
+AddReg=All, Modem1.AddReg, EXTERNAL
+
+
+; AddReg sections
+
+[Modem10.AddReg] ; Simplemodem 144vi
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem9.AddReg] ; Simplemodem 288vi
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem8.AddReg] ; Simplemodem 144ve
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem7.AddReg] ; Simplemodem 288ve
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem6.AddReg] ; Simplemodem 144fi
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem5.AddReg] ; Simplemodem 288fi V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg] ; Simplemodem 96f
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem3.AddReg] ; Simplemodem 144f
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg] ; Simplemodem 288f V.FC
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg] ; Simplemodem 288f V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Simplecomputing Australia Pty Ltd"
+
+; Model strings
+
+Modem10="Simplemodem 144vi"
+Modem9="Simplemodem 288vi"
+Modem8="Simplemodem 144ve"
+Modem7="Simplemodem 288ve "
+Modem6="Simplemodem 144fi"
+Modem5="Simplemodem 288fi V.34"
+Modem4="Simplemodem 96f"
+Modem3="Simplemodem 144f"
+Modem2="Simplemodem 288f V.FC"
+Modem1="Simplemodem 288f V.34"
+
+
+[All]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F E0 V1 W1 S95=47 &C1 &D2 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, 00,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75RX - Connection at 1200/75 bps
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200RX - Connection at 75/1200 bps
+HKR, Responses, "<cr><lf>DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DELAYED - Blacklisting Action ERROR
+HKR, Responses, "<cr><lf>BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; BLACLISTED - Blacklisting Action ERROR
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS5 - MNP5 compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: MNP 5 - MNP5 compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP compatible EC)
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX Error - Action ERROR
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, 00,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, 00,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps error correction
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps error correction
+
+HKR, Responses, "<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MN<cr><lf>P", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42BI<cr><lf>S",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/V42b<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/V42b<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/V42b<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/V42b<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42b<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/V42b<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/V42b<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/V42b<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/V42b<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42b<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42b<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42b<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42b<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42b<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42b<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42b<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42b<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42b<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42b<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42b<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42b<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VF<cr><lf>C", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+HKR,, PortDriver,, "serial.vxd"
+HKR,, Contention,, *vcd
diff --git a/private/unimodem/inf/mdmsmart.inx b/private/unimodem/inf/mdmsmart.inx
new file mode 100644
index 000000000..5d335fc18
--- /dev/null
+++ b/private/unimodem/inf/mdmsmart.inx
@@ -0,0 +1,399 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Archtek Telecom Corp.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, Smartlnk_Modem1
+%Modem2% = Modem2, Smartlnk_Modem2
+%Modem3% = Modem3, Smartlnk_Modem3
+%Modem4% = Modem4, Smartlnk_Modem4
+%Modem5% = Modem5, Smartlnk_Modem5
+%Modem6% = Modem6, Smartlnk_Modem6
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Archtek Telecom Corp."
+
+; Model strings
+
+Modem1="SmartLink 1414AV FIN"
+Modem2="SmartLink 1414AVT FIN"
+Modem3="SmartLink 2400BSV V.42bis FIN"
+Modem4="SmartLink 2400SV V.42bis FIN"
+Modem5="SmartLink 9624SV V.42bis FIN"
+Modem6="SmartLink 9624BSV V.42bis FIN"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0<cr>"
+HKR, Init, 3,, "ATX3\J0\N3\Q3%%C1"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N1"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsmplt.inx b/private/unimodem/inf/mdmsmplt.inx
new file mode 100644
index 000000000..cb90b81f2
--- /dev/null
+++ b/private/unimodem/inf/mdmsmplt.inx
@@ -0,0 +1,12 @@
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+
+[Strings]
+MS = "Microsoft"
diff --git a/private/unimodem/inf/mdmsnit1.inx b/private/unimodem/inf/mdmsnit1.inx
new file mode 100644
index 000000000..69383fc67
--- /dev/null
+++ b/private/unimodem/inf/mdmsnit1.inx
@@ -0,0 +1,364 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Sysnet - Italy
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM9FF3D816 ; SMF-38.Fax
+%Modem1% = Modem1, UNIMODEME5C1A583 ; SMF-38.Fax
+
+; Installation sections
+
+[Modem1] ; SMF-38.FAX
+AddReg=All, MfgAddReg, ExtAddReg, Modem1.AddReg, External
+
+; AddReg sections
+
+[Modem1.AddReg] ; SMF-38.FAX
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+; Strings
+[Strings]
+ClassName = "Modem"
+Mfg = "Sysnet - Italy"
+
+; Model strings
+
+Modem1="Sysnet SMF-38.Fax V.34"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[ExtAddReg]
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, ErrorControl_Cellular,, "-K1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0"
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT &C1 &D2 S0=0 E0 V1 S95=47<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, ")M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsnitn.inx b/private/unimodem/inf/mdmsnitn.inx
new file mode 100644
index 000000000..40fd8b269
--- /dev/null
+++ b/private/unimodem/inf/mdmsnitn.inx
@@ -0,0 +1,413 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Sysnet - Italy
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+
+; Modem models
+
+[Models]
+%Modem6% = Modem6, UNIMODEM4F16BF00 ; SMF-81.FAX
+%Modem6% = Modem6, UNIMODEMAFBBBDE2 ; SMF-81.FAX
+%Modem5% = Modem5, UNIMODEM9EFE1BBA ; TOMMY
+%Modem4% = Modem4, UNIMODEM2B3BEDB5 ; SMF-71.FAX
+%Modem4% = Modem4, UNIMODEMA67A09ED ; SMF-71.FAX
+%Modem3% = Modem3, UNIMODEMD55809D6 ; SMF-36.FAX
+%Modem3% = Modem3, Sysnet_Modem3, UNIMODEMD67e6AB1 ; SMF-36.FAX
+%Modem3% = Modem3, UNIMODEME5106C22 ; SMF-36.FAX
+%Modem2% = Modem2, UNIMODEMFAF264A3 ; SMF-44.FAX
+%Modem1% = Modem1, UNIMODEM9A970EEA ; SMF-34.FAX
+
+
+; Installation sections
+
+[Modem6] ; SMF-81.FAX
+AddReg=All, MfgAddReg, ExtAddReg, Modem6.AddReg, External
+
+[Modem5] ; TOMMY
+AddReg=All, MfgAddReg, ExtAddReg, Modem5.AddReg, External
+
+[Modem4] ; SMF-71.FAX
+AddReg=All, MfgAddReg, Modem4.AddReg, EXTERNAL
+
+[Modem3] ; SMF-36.FAX
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem2] ; SMF-44.FAX
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1] ; SMF-34.FAX
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+
+; AddReg sections
+
+[Modem6.AddReg] ; SMF-81.FAX
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5.AddReg] ; TOMMY
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg] ; SMF-71.FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; SMF-36.FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem2.AddReg] ; SMF-44.FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem1.AddReg] ; SMF-34.FAX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+; Strings
+[Strings]
+ClassName = "Modem"
+Mfg = "Sysnet - Italy"
+
+; Model strings
+
+Modem6="Sysnet SMF-81.Fax V.34"
+Modem5="Sysnet TOMMY V.32bis Fax"
+Modem4="Sysnet SMF-71.Fax V.32bis"
+Modem3="Sysnet SMF-36.Fax V.32bis"
+Modem2="Sysnet SMF-44.Fax V.22bis"
+Modem1="Sysnet SMF-34.Fax V.22bis"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[ExtAddReg]
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Cellular_On,, "-K1"
+HKR, Settings, ErrorControl_Cellular,, "-K1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0"
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT &C1 &D2 S0=0 E0 V1 S95=47<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, ErrorControl_Cellular,, ")M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsonix.inx b/private/unimodem/inf/mdmsonix.inx
new file mode 100644
index 000000000..d67cfb702
--- /dev/null
+++ b/private/unimodem/inf/mdmsonix.inx
@@ -0,0 +1,365 @@
+; Windows Modem Setup File
+; Copyright 1995-1996 Microsoft Corp.
+;
+; Manufacturer: Sonix Communications Ltd
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem3% = Modem3, UNIMODEM3CE9F3A3
+%Modem2% = Modem2
+%Modem1% = Modem1, UNIMODEMBA222483
+
+; Installation sections
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, EXTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, EXTERNAL
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 39,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, 39,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, 39,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Sonix Commun. Ltd"
+
+; Model strings
+
+Modem3="Sonix Canzona"
+Modem2="Sonix Volante"
+Modem1="Sonix Volante Fast"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 S0=0 S95=47<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, """H3%%C1"
+HKR, Settings, Compression_Off,, """H0%%C0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmspec.inx b/private/unimodem/inf/mdmspec.inx
new file mode 100644
index 000000000..fbb52c735
--- /dev/null
+++ b/private/unimodem/inf/mdmspec.inx
@@ -0,0 +1,244 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; This INF supports Mwave modems from Spectrum, IBM, Best Data, other manufacturers
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+%Spectrum% = Spectrum
+%IBM% = IBM
+%BestData% = BestData
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMF8C332D9
+ExcludeFromSelect=UNIMODEM845FDB25
+ExcludeFromSelect=UNIMODEM0F66BB9E
+ExcludeFromSelect=UNIMODEMA227CF31
+ExcludeFromSelect=UNIMODEM69CD97F0
+
+[Spectrum]
+%Modem16%= Modem5, UNIMODEM69CD97F0 ; Envoy 2400, 9600, 14400
+%Modem7% = Modem3, UNIMODEMF8C332D9 ; Envoy 2400, 9600, 14400
+%Modem6% = Modem5, UNIMODEM845FDB25 ; Office FX 2400, 14000
+%Modem5% = Modem5, SPEC_Modem5, UNIMODEM845FDB25 ; Spectrum Office FX (2400 BPS)
+%Modem4% = Modem4, SPEC_Modem4, UNIMODEM845FDB25 ; Spectrum Office FX (14400 BPS)
+%Modem3% = Modem3, SPEC_Modem3, UNIMODEMF8C332D9 ; Envoy (2400 BPS)
+%Modem2% = Modem2, SPEC_Modem2, UNIMODEMF8C332D9 ; Envoy (9600 BPS)
+%Modem1% = Modem1, SPEC_Modem1, UNIMODEMF8C332D9 ; Envoy (14400 BPS)
+
+[IBM]
+%Modem15% = Modem7, UNIMODEMA426566B ; Thinkpad 28.8 Mwave
+%Modem14% = Modem7, UNIMODEMA227CF31 ; Generic 28.8 Mwave
+%Modem13% = Modem7, UNIMODEMF42031CC ; Aptiva 28.8 Mwave
+%Modem8% = Modem4, UNIMODEM6A13048E
+%Modem8% = Modem4, UNIMODEM34FDCC12
+
+[BestData]
+%Modem12% = Modem5, UNIMODEM0F66BB9E ; Ace 2400, 9600, 14400
+%Modem11% = Modem5, SPEC_Modem11, UNIMODEM0F66BB9E ; Ace (2400 BPS)
+%Modem10% = Modem6, SPEC_Modem10, UNIMODEM0F66BB9E ; Ace (9600 BPS)
+%Modem9% = Modem4, SPEC_Modem9, UNIMODEM0F66BB9E ; Ace (14400 BPS)
+
+
+[Modem7] ; 28.8
+AddReg=All, MfgAddReg, Modem7.AddReg, INTERNAL
+
+[Modem6] ; 9600
+AddReg=All, MfgAddReg, Modem6.AddReg, INTERNAL
+
+[Modem5] ; 2400
+AddReg=All, MfgAddReg, Modem5.AddReg, INTERNAL
+
+[Modem4] ; 14400
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; Envoy (2400 Baud)
+AddReg=All, MfgAddReg, Modem3.AddReg, INTERNAL
+
+[Modem2] ; Envoy (9600 baud)
+AddReg=All, MfgAddReg, Modem2.AddReg, INTERNAL
+
+[Modem1] ; Envoy Internal card (14400 baud)
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+; AddReg sections
+
+[Modem7.AddReg] ; 28800
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem6.AddReg] ; 9600
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 80,25,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem5.AddReg] ; 2400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 60,09,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem4.AddReg] ; 14400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem3.AddReg] ; Envoy (2400 Baud)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 60,09,00,00
+
+[Modem2.AddReg] ; Envoy (9600 baud)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 80,25,00,00
+
+[Modem1.AddReg] ; Envoy (14400)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, c7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Strings]
+MS = "Microsoft"
+
+Spectrum = "Spectrum Signal Processing Inc"
+Modem16="Spectrum Envoy 2400 or 14400"
+Modem7="Spectrum Envoy 2400 or 9600 or 14400"
+Modem6="Spectrum Office FX 2400 or 14400"
+Modem5="Spectrum Office FX (2400 bps)"
+Modem4="Spectrum Office FX (14400 bps)"
+Modem3="Spectrum Envoy (2400 bps)"
+Modem2="Spectrum Envoy (9600 bps)"
+Modem1="Spectrum Envoy (14400 bps)"
+
+IBM = "IBM"
+Modem15 = "IBM Thinkpad 28.8 Mwave Data Fax"
+Modem14 = "28.8 Mwave Data Fax"
+Modem13 = "IBM Aptiva 28.8 Mwave Data Fax"
+Modem8 = "IBM Thinkpad 14.4 Mwave Data Fax"
+
+BestData = "Best Data"
+Modem12="Best Data Ace 2400 or 9600 or 14400"
+Modem11="Best Data Ace (2400 bps)"
+Modem10="Best Data Ace (9600 bps)"
+Modem9 ="Best Data Ace (14400 bps)"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 S0=0 &D2 &C1 V1 \V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1""H3"
+HKR, Settings, Compression_Off,, "%%C0""H0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "&N1"
+HKR, Settings, SpeedNegotiation_On,, "&N0"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "HOST DRIVER TIMEOUT", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT ECL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT ECLC", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ECL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ECLC", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ECL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ECLC", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ECL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ECLC", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ECL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ECLC", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ECL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ECLC", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ECL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ECLC", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ECL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ECLC", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ECL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ECLC", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ECL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ECLC", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ECL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ECLC", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ECL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ECLC", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ECL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ECLC", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ECL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ECLC", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ECL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ECLC", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ECL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ECLC", 1, 02, 03, 80,70,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmspq28.inx b/private/unimodem/inf/mdmspq28.inx
new file mode 100644
index 000000000..033455a99
--- /dev/null
+++ b/private/unimodem/inf/mdmspq28.inx
@@ -0,0 +1,391 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Compaq
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Class=Modem
+Provider=%Compaq%
+
+[Manufacturer]
+%Compaq% = Compaq
+
+[Strings]
+Compaq="Compaq"
+Spq288="Compaq SpeedPaq 288 Telephony Modem (PCMCIA)"
+Spq288g="Compaq Global 28.8 Telephony Modem (PCMCIA)"
+
+; Modem models
+
+[Compaq]
+%Spq288% = Spq288, PCMCIA\COMPAQ-SPEEDPAQ_288_TELEPHONY_MODEM-4A74
+%Spq288g% = Spq288g, PCMCIA\COMPAQ-GLOBAL_28.8_TELEPHONY_MODEM-35E6
+
+; Installation sections
+
+[Spq288g]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, CELLULAR_Global, Spq288g.AddReg
+
+[Spq288]
+AddReg=All, MfgCompaq, PCMCIA, VerboseResultCodes, CELLULAR, Spq288.AddReg
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,, PortDriver,, Serial.vxd
+HKR,, Contention,, *vcd
+HKR,, DeviceType, 1, 03
+
+[CELLULAR]
+HKR, Settings, ErrorControl_Cellular,, "\N3 $M1 -K2 )M1" ;Motorola default
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4 $M1 W1"
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M2 -K2 )M1" ; Nokia
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M2 -K2 )M1" ; Technophone
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M3 -K2 )M1" ; Reserved
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M4 -K2 )M1" ; GE
+;HKR, Settings, ErrorControl_Cellular,, "\N3 $M4 -K2 )M1" ; Ericsson
+
+[CELLULAR_Global] ;Does not support cellular phones, but supports the protocols
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K2 )M1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N4 W1"
+
+[Spq288.AddReg]
+HKR, Init, 1,, "AT &F<cr>"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35"
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[Spq288g.AddReg]
+HKR, Init, 1,, "AT &F<cr>"
+HKR, Init, 2,, "AT &F E0 V1 W1 X4 S95=47 &C1 &D2<cr>"
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 5A,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C1 S101=35"
+HKR, Settings, Compression_Off,, "%%C0 S101=0"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[MfgCompaq]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[VerboseResultCodes]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300 V42bis", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600 V42bis", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200 V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75 V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX V42bis",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200 V42bis", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX V42bis",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400 V42bis", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800 V42bis", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200 V42bis", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600 V42bis", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000 V42bis", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400 V42bis", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800 V42bis", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200 V42bis", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600 V42bis", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000 V42bis", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400 V42bis", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800 V42bis", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400 V42bis", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600 V42bis", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200 V42bis", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200 V42bis", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400 V42bis", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsrt.inx b/private/unimodem/inf/mdmsrt.inx
new file mode 100644
index 000000000..d86652fa4
--- /dev/null
+++ b/private/unimodem/inf/mdmsrt.inx
@@ -0,0 +1,446 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Standard Radio Telecom AB
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM5E9F162C
+
+[Models]
+%Modem10% = Modem3, UNIMODEM5E9F162C ; Generic Viper 1414 Lite/SA/PC
+%Modem9% = Modem9, SRT_Modem9, UNIMODEM855CBE23 ; SRT Viper 1414 PCMCIA
+%Modem8% = Modem8, SRT_Modem8, UNIMODEM5E9F162C ; SRT Viper 1414 Lite
+%Modem7% = Modem7, UNIMODEMD020B67D ; SRT SwiftLine V.32bis & Fax
+%Modem6% = Modem6, SRT_Modem6, UNIMODEMC9720A17 ; SRT Viper 1414 Voice
+%Modem5% = Modem5, UNIMODEM9B0A09BA ; SRT Viper 1414 PM
+%Modem4% = Modem4, SRT_Modem4, UNIMODEM5E9F162C ; SRT Viper 1414 PC
+%Modem3% = Modem3, SRT_Modem3, UNIMODEM5E9F162C ; SRT Viper 1414 SA
+%Modem2% = Modem2, UNIMODEMF031A75E ; SRT Viper 2814
+%Modem2% = Modem2, UNIMODEMAB5867A6 ; SRT Viper 2814
+%Modem1% = Modem1, UNIMODEM0E68CD5B ; SRT PrimeLine V.34 & Fax
+
+
+; Installation sections
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, PCMCIA
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "ATZ<cr>"
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "ATZ<cr>"
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, Reset,, "AT&Z<cr>"
+HKR, Init, 3,, "AT E0 V1<cr>"
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "AT&Z<cr>"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "AT&Z<cr>"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "AT&Z<cr>"
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, Reset,, "AT&Z<cr>"
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, Reset,, "AT&Z<cr>"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 3,, "AT E0 V1<cr>"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Standard Radio Telecom AB"
+
+; Model strings
+
+Modem10="SRT Viper 1414 SA, 1414 PC & 1414 Lite"
+Modem9="SRT Viper 1414 PCMCIA"
+Modem8="SRT Viper 1414 Lite"
+Modem7="SRT SwiftLine V.32bis & Fax"
+Modem6="SRT Viper 1414 Voice"
+Modem5="SRT Viper 1414 PM"
+Modem4="SRT Viper 1414 PC"
+Modem3="SRT Viper 1414 SA"
+Modem2="SRT Viper 2814"
+Modem1="SRT PrimeLine V.34 & Fax"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3C,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47 \N3 %%C1 \J0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F1<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\t<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsupr3.inx b/private/unimodem/inf/mdmsupr3.inx
new file mode 100644
index 000000000..aebea21b4
--- /dev/null
+++ b/private/unimodem/inf/mdmsupr3.inx
@@ -0,0 +1,339 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Supra Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=ISAPNP\SUP1381
+ExcludeFromSelect=UNIMODEM85B2DC91
+ExcludeFromSelect=SERENUM\SUP1201
+ExcludeFromSelect=SERENUM\SUP1261
+ExcludeFromSelect=SERENUM\SUP1251
+ExcludeFromSelect=SERENUM\SUP1211
+ExcludeFromSelect=ISAPNP\SUP1311
+ExcludeFromSelect=ISAPNP\SUP1321
+ExcludeFromSelect=SERENUM\SUP1550
+ExcludeFromSelect=ISAPNP\SUP1560
+ExcludeFromSelect=SERENUM\SUP1280
+ExcludeFromSelect=ISAPNP\SUP1400
+ExcludeFromSelect=ISAPNP\SUP1300
+ExcludeFromSelect=ISAPNP\SUP1380
+ExcludeFromSelect=ISAPNP\SUP1310
+ExcludeFromSelect=UNIMODEM191DBDDB
+
+
+[Modem40.PosDup]
+*PNP0500
+
+[Modem39.NoResDup]
+UNIMODEM1C6DE8C1
+
+[Modem35.NoResDup]
+UNIMODEMD76A2DAB
+
+[Modem30.NoResDup]
+UNIMODEM44B0D26B
+
+[Modem29.NoResDup]
+UNIMODEM7FD4E3F0
+
+[Modem28.PosDup]
+*PNP0500
+
+[Modem26.NoResDup]
+UNIMODEM085B3649
+
+[Modem24.PosDup]
+*PNP0500
+
+[Modem22.NoResDup]
+UNIMODEM9BFFDCB4
+
+[Modem21.PosDup]
+*PNP0500
+
+[Modem19.PosDup]
+*PNP0500
+
+[Modem16.PosDup]
+*PNP0500
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem40%= Modem40, UNIMODEM85B2DC91
+%Modem40%= Modem40, ISAPNP\SUP1381 ;Annie with voice 33.6
+%Modem39%= Modem39, UNIMODEM1C6DE8C1 ;SFM 336
+%Modem39PNP%= Modem39, SERENUM\SUP1201
+%Modem35%= Modem35, UNIMODEMD76A2DAB ;Xpress 336i NT
+%Modem35PNP%= Modem35, SERENUM\SUP1261
+%Modem30%= Modem30, UNIMODEM44B0D26B ;Express 336e PnP
+%Modem30PNP%= Modem30, SERENUM\SUP1251
+%Modem29%= Modem29, UNIMODEM7FD4E3F0 ;SFM 336i IPC
+%Modem29PNP%= Modem29, SERENUM\SUP1211
+%Modem28%= Modem28, ISAPNP\SUP1311 ; Annie 336i
+%Modem28%= Modem28, ISAPNP\SUP1321
+%Modem28%= Modem28, UNIMODEMB7E5FF44
+%Modem26%= Modem26, UNIMODEM085B3649 ;Xpress 288 Japan
+%Modem26PNP%= Modem26, SERENUM\SUP1550
+%Modem24%= Modem24, SUPR3_Modem24, UNIMODEM191DBDDB
+%Modem24GEN%= Modem24, UNIMODEM191DBDDB
+%Modem24%= Modem24, ISAPNP\SUP1560 ;Annie with Voice for Japan
+%Modem22%= Modem22, UNIMODEM9BFFDCB4 ; SFM 288 German
+%Modem22PNP%= Modem22, SERENUM\SUP1280
+%Modem21%= Modem21, UNIMODEM5A7AC5A7
+%Modem21%= Modem21, ISAPNP\SUP1400 ;Express 288i PnP WorldWide
+; bugbug -- rank0 collision with mdmsupra.inf -- commented out until we resolve
+;%Modem19%= Modem19, UNIMODEM04BE9FD4
+%Modem19%= Modem19, ISAPNP\SUP1300 ;ExtremeExpress 144i
+%Modem16%= Modem16, UNIMODEM5FC44F8F
+%Modem16%= Modem16, SUPR3_Modem16, UNIMODEM191DBDDB
+%Modem16%= Modem16, ISAPNP\SUP1310 ;XP288i PnP
+
+
+[Modem40]
+AddReg=All, MfgAddReg, Modem40.AddReg, INTERNAL
+
+[Modem39]
+AddReg=All, MfgAddReg, Modem39.AddReg, EXTERNAL
+
+[Modem35]
+AddReg=All, MfgAddReg, Modem35.AddReg, INTERNAL
+
+[Modem30]
+AddReg=All, MfgAddReg, Modem30.AddReg, EXTERNAL
+
+[Modem29]
+AddReg=All, MfgAddReg, Modem29.AddReg, INTERNAL
+
+[Modem28]
+AddReg=All, MfgAddReg, Modem28.AddReg, INTERNAL
+
+[Modem26]
+AddReg=All, MfgAddReg, Modem26.AddReg, EXTERNAL
+
+[Modem24]
+AddReg=All, MfgAddReg, Modem24.AddReg, INTERNAL
+
+[Modem22]
+AddReg=All, MfgAddReg, Modem22.AddReg, EXTERNAL
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, INTERNAL
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, INTERNAL
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, INTERNAL
+
+
+[Modem40.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem39.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem35.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem30.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem29.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem28.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem26.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 80,70,00,00
+
+[Modem24.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem22.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Strings]
+Mfg = "Diamond Multimedia"
+
+Modem40="SupraExpress 336i PnP Voice"
+Modem39="SupraFAXModem 288(336)"
+Modem39PNP="SupraFAXModem 288(336) Plug & Play"
+
+Modem35="Supra 336i JP"
+Modem35PNP="Supra 336i JP Plug & Play"
+Modem30="SupraExpress 336 PnP"
+Modem30PNP="SupraExpress 336 Plug & Play"
+Modem29="SupraFAXModem 288i (336)"
+Modem29PNP="SupraFAXModem 288i (336) Plug & Play"
+Modem28="SupraExpress 336i PnP"
+Modem26="SupraExpress 288 PnP Japan"
+Modem26PNP="SupraExpress 288 Plug & Play Japan"
+Modem24GEN="SupraExpress 288i PnP" ; combo
+Modem24="SupraExpress 288i PnP Japan"
+Modem22="SupraFAXModem 288 German"
+Modem22PNP="SupraFAXModem 288 German Plug & Play"
+Modem21="SupraExpress 288i Multi-National"
+Modem19="SupraExpress 144i PnP (2)"
+Modem16="SupraExpress 288i PnP"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.VXD
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F2 E0 V1 Q0 W1 S95=47 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6\N"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Forced,, "&Q5\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, ErrorControl_Cellular_Forced,,"\N4 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, Compression_Off,, "%%C"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Modulation_CCITT,, "B"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "CONNECT", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "CONNECT 12000", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "CARRIER 31200", 1, 01, 00, E0,79,00,00, 00,00,00,00 ; CARRIER 31200 - Carrier detected at 31200 bps
+HKR, Responses, "CARRIER 33600", 1, 01, 00, 40,83,00,00, 00,00,00,00 ; CARRIER 33600 - Carrier detected at 33600 bps
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "CONNECT 31200", 1, 02, 00, E0,79,00,00, 00,00,00,00 ; CONNECT 31200 - Connection at 31200 bps
+HKR, Responses, "CONNECT 33600", 1, 02, 00, 40,83,00,00, 00,00,00,00 ; CONNECT 33600 - Connection at 33600 bps
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "PROTOCOL: ALT - CELLULAR", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 31200/ARQ", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/ARQ", 1, 02, 02, 40,83,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmsupra.inx b/private/unimodem/inf/mdmsupra.inx
new file mode 100644
index 000000000..11a7b0380
--- /dev/null
+++ b/private/unimodem/inf/mdmsupra.inx
@@ -0,0 +1,311 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Supra Corporation
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM3C59DB1C
+ExcludeFromSelect=UNIMODEMC6330559
+ExcludeFromSelect=UNIMODEM11C61667
+ExcludeFromSelect=UNIMODEM77DBA690
+ExcludeFromSelect=UNIMODEM04BE9FD4
+ExcludeFromSelect=UNIMODEM3A86BAE5
+ExcludeFromSelect=SERENUM\SUP1200
+ExcludeFromSelect=SERENUM\SUP1150
+ExcludeFromSelect=SERENUM\SUP0980
+ExcludeFromSelect=SERENUM\SUP1250
+ExcludeFromSelect=ISAPNP\SUP1290
+ExcludeFromSelect=ISAPNP\SUP1230
+
+[Modem15.PosDup]
+*PNP0500
+
+[Modem14.NoResDup]
+UNIMODEMEC095838
+
+[Modem13.NoResDup]
+UNIMODEM3637B3CC,UNIMODEMB1F47A08,UNIMODEMC4A73980,UNIMODEMC6330559,UNIMODEM3A86BAE5,UNIMODEM6114F274,UNIMODEMCD92E03A
+
+[Modem6.PosDup]
+*PNP0500
+
+[Modem5.NoResDup]
+UNIMODEM202E83DC,UNIMODEMB8349178,UNIMODEME4BCC28A
+
+[Modem8.NoResDup]
+UNIMODEM1AAD4030,UNIMODEM11C61667
+
+[Modem1.NoResDup]
+UNIMODEM3637B3CC,UNIMODEMB1F47A08,UNIMODEMC4A73980,UNIMODEMC6330559,UNIMODEM3A86BAE5,UNIMODEM6114F274,UNIMODEMCD92E03A
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem15PNP%= Modem15, ISAPNP\SUP1230
+%Modem15%= Modem15, SUPRA_Modem15, UNIMODEM04BE9FD4
+%Modem14PNP%= Modem14, SERENUM\SUP1250
+%Modem14%= Modem14, UNIMODEMEC095838
+%Modem12%= Modem12, SUPRA_Modem12, UNIMODEM77DBA690 ; Supra Express 144i Plus
+%Modem12%= Modem12, SUPRA_Modem12, UNIMODEM04BE9FD4 ; Supra Express 144i Plus
+%Modem11%= Modem10, SUPRA_Modem11, UNIMODEM77DBA690 ; Supra Express 144i (RPI style)
+%Modem11%= Modem10, SUPRA_Modem11, UNIMODEM04BE9FD4 ; Supra Express 144i (RPI style)
+%Modem10%= Modem10, UNIMODEM77DBA690 ; Supra Express 144i, 144i Plus
+%Modem10%= Modem10, UNIMODEM04BE9FD4 ; Supra Express 144i, 144i Plus
+%Modem9% = Modem2, UNIMODEM11C61667 ; rank 0 for modems 2 and 8
+%Modem8% = Modem8, SUPRA_Modem8, UNIMODEM11C61667 ; rank 1 for modems 2 and 8
+%Modem8PNP% = Modem8, SERENUM\SUP1150
+%Modem8% = Modem8, UNIMODEM1AAD4030
+%Modem7% = Modem2, UNIMODEM3C59DB1C
+%Modem7% = Modem2, UNIMODEMC6330559 ; V.32bis and 144i
+%Modem7% = Modem2, UNIMODEM3A86BAE5 ; V.32bis and 144i
+%Modem6% = Modem6, UNIMODEM66C4E492
+%Modem6% = Modem6, UNIMODEMEABC7143
+%Modem6% = Modem6, UNIMODEM39EFF2B3
+%Modem6PNP% = Modem6, ISAPNP\SUP1290
+%Modem5% = Modem5, UNIMODEME4BCC28A ; 288 Vfc model
+%Modem5% = Modem5, UNIMODEMB8349178 ; 288 model, true V.34
+%Modem5PNP% = Modem5, SERENUM\SUP1200 ; 288 model, true V.34
+%Modem5% = Modem5, UNIMODEM202E83DC ; 288 model, true V.34
+%Modem5% = Modem5, UNIMODEM08F26FEA
+%Modem5% = Modem5, UNIMODEM1CE09D16
+%Modem4% = Modem4, UNIMODEMF0782722
+%Modem3% = Modem3, SUPRA_Modem3, UNIMODEMC6330559
+%Modem3% = Modem3, SUPRA_Modem3, UNIMODEM3A86BAE5
+%Modem3% = Modem3, UNIMODEMC030DACB
+%Modem3% = Modem3, UNIMODEM354A33D6
+%Modem2% = Modem2, SUPRA_Modem2, UNIMODEM11C61667 ; rank 1 for modems 2 and 8
+%Modem2% = Modem2, UNIMODEM2989264D ; rank 0, 144LC model
+%Modem1% = Modem1, UNIMODEMB1F47A08
+%Modem1% = Modem1, UNIMODEMC4A73980
+%Modem1% = Modem1, SUPRA_Modem1, UNIMODEMC6330559
+%Modem1% = Modem1, SUPRA_Modem1, UNIMODEM3A86BAE5
+%Modem1% = Modem1, UNIMODEM6114F274
+%Modem1% = Modem1, UNIMODEMCD92E03A
+%Modem1PNP% = Modem13, SERENUM\SUP0980
+%Modem1% = Modem13,UNIMODEM3637B3CC
+
+; Installation sections
+
+[Modem15]
+AddReg=All, Modem15.AddReg, INTERNAL
+
+[Modem14]
+AddReg=All, Modem14.AddReg, EXTERNAL
+
+[Modem13]
+AddReg=All, Modem13.AddReg, EXTERNAL
+
+[Modem12]
+AddReg=All, Modem12.AddReg, INTERNAL
+
+[Modem10]
+AddReg=All, Modem10.AddReg, INTERNAL
+
+[Modem8]
+AddReg=All, Modem8.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, Modem5.AddReg, INTERNAL
+
+[Modem5]
+AddReg=All, Modem5.AddReg, EXTERNAL
+
+[Modem4]
+AddReg=All, Modem4.AddReg, EXTERNAL
+
+[Modem3]
+AddReg=All, Modem2.AddReg, INTERNAL
+
+[Modem2]
+AddReg=All, Modem2.AddReg, EXTERNAL
+
+[Modem1]
+AddReg=All, Modem1.AddReg, EXTERNAL
+
+; AddReg sections
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem12.AddReg] ; 144i Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem10.AddReg] ; 144i and 144i Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "&Q5" ; excluding \N3 works around a problem that prevents some 144LC's from connecting at 14.4
+ ; workaround uses default which happens to be \N3
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+Mfg = "Supra Corporation"
+
+; Model strings
+
+Modem15PNP="SupraExpress 144i Plug & Play"
+Modem15="SupraExpress 144i Plug & Play"
+Modem14PNP="SupraExpress 288 Plug & Play"
+Modem14="SupraExpress 288"
+Modem12="SupraExpress 144i Plus"
+Modem11="SupraExpress 144i"
+Modem10="SupraExpress 144i or 144i Plus"
+Modem9 ="Supra 144 Plus or 144LC"
+Modem8PNP ="SupraExpress 144 Plus Plug & Play"
+Modem8 ="SupraExpress 144 Plus"
+Modem7 ="SupraFAXModem V.32bis or 144i"
+Modem6PNP ="SupraFAXModem 288i Plug & Play"
+Modem6 ="SupraFAXModem 288i"
+Modem5PNP ="SupraFAXModem 288 Plug & Play"
+Modem5 ="SupraFAXModem 288"
+Modem4 ="SupraFAXModem V.32"
+Modem3 ="SupraFAXModem 144i"
+Modem2 ="SupraFAXModem 144LC"
+Modem1PNP ="SupraFAXModem V.32bis Plug & Play"
+Modem1 ="SupraFAXModem V.32bis"
+
+[All]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR,,FriendlyDriver,,Unimodem.VXD
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&F2EVQ0W1&C1&D2S95=47S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6\N"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Forced,, "&Q5\N4"
+HKR, Settings, ErrorControl_Cellular,, "\N3 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, ErrorControl_Cellular_Forced,,"\N4 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, Compression_Off,, "%%C"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "19<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "56<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "57<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "58<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+HKR, Responses, "95<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "96<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "97<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "98<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "99<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "100<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "101<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
diff --git a/private/unimodem/inf/mdmsuprv.inx b/private/unimodem/inf/mdmsuprv.inx
new file mode 100644
index 000000000..b1079f630
--- /dev/null
+++ b/private/unimodem/inf/mdmsuprv.inx
@@ -0,0 +1,558 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Supra
+
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Supra%
+
+[Manufacturer]
+%Supra% = Supra
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\SUP1330
+ExcludeFromSelect=SERENUM\SUP1331
+ExcludeFromSelect=*SUP1420
+ExcludeFromSelect=*SUP1440
+ExcludeFromSelect=*SUP1580
+ExcludeFromSelect=*SUP1640
+ExcludeFromSelect=*SUP1421
+ExcludeFromSelect=*SUP1581
+
+[Modem38.PosDup] ; Express 336i Multinational
+*PNP0500
+
+[Modem36.PosDup] ; Retail 336 SpPhone
+*PNP0500
+
+[Modem31.NoResDup] ; HSVO 336
+UNIMODEM7A7CA4B7
+
+[Modem27.PosDup] ; NEC Modem
+*PNP0500
+
+[Modem25.PosDup] ; Express 288i Multinational
+*PNP0500
+
+[Modem23.PosDup] ; OEM SpPhone
+*PNP0500
+
+[Modem20.PosDup] ; Retail SpPhone
+*PNP0500
+
+[Modem18.NoResDup] ; HSVO
+UNIMODEMBE60301A, UNIMODEM94A79C90
+
+
+[Supra]
+%Supra38% = Modem38, *SUP1581 ; Express 336i Multinational
+%Supra38% = Modem38, UNIMODEMC99E09FE
+%Supra36% = Modem36, *SUP1421 ; Retail SpeakerPhone with VoiceView
+%Supra36% = Modem36, UNIMODEM1DF829B2
+%Supra31PNP% = Modem31, SERENUM\SUP1331
+%Supra31% = Modem31, UNIMODEM7A7CA4B7
+%Supra27% = Modem27, *SUP1640 ; NEC Single Chip
+%Supra27% = Modem27, SUPRV_SUPRA27
+%Supra25% = Modem25, *SUP1580 ; Express 288i Multinational
+%Supra25% = Modem25, UNIMODEM9D5F85C0
+%Supra23% = Modem23, *SUP1440 ; OEM Speakerphone with VoiceView
+%Supra23% = Modem23, UNIMODEM14B44DBB
+
+%Supra20% = Modem20, *SUP1420 ; Retail SpeakerPhone with VoiceView
+%Supra20% = Modem20, UNIMODEM4492B6B8
+
+%Supra18PNP% = Modem18, SERENUM\SUP1330 ;HSVO
+%Supra18% = Modem18, UNIMODEMBE60301A
+%Supra18% = Modem18, UNIMODEM2C91C3BE
+
+[Modem38]
+AddReg=All, MfgAddReg, Supra_Voice_All3, Supra_Voice_Serwave2, Modem38.AddReg, INTERNAL
+
+[Modem36]
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, Supra_Voice_All, Supra_Voice_Serwave, Modem36.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem31]
+AddReg=All, MfgAddReg, Supra_Voice_All2, Supra_Voice_Serwave, Modem31.AddReg, EXTERNAL
+
+[Modem27]
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, Supra_Voice_All, Supra_Voice_Serwave, Modem27.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem25]
+AddReg=All, MfgAddReg, Supra_Voice_All3, Supra_Voice_Serwave2, Modem25.AddReg, INTERNAL
+
+[Modem23]
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, Supra_Voice_All, Supra_Voice_Serwave, Modem23.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem20]
+AddReg=All, MfgAddReg, VoiceView_Modem, VoiceView_Socket, Supra_Voice_All, Supra_Voice_Serwave, Modem20.AddReg, INTERNAL
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[Modem18]
+AddReg=All, MfgAddReg, Supra_Voice_All2, Supra_Voice_Serwave, Modem18.AddReg, EXTERNAL
+
+[Modem38.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem36.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 40,83,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Modem31.AddReg]
+HKR,, Properties, 1, C0,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,84,03,00, 40,83,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Modem27.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, F7,03,00,00, 00,C2,01,00, 40,83,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Modem25.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,C2,01,00, 80,70,00,00
+
+[Modem23.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, FF,03,00,00, 00,84,03,00, 80,70,00,00
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+
+[Strings]
+Supra = "Diamond Multimedia"
+
+Supra38 = "SupraExpress 336i Multinational"
+Supra36 = "Supra 336i SP"
+Supra31PNP = "SupraSonic 336V+ Plug & Play"
+Supra31 = "SupraSonic 336V+"
+Supra27 = "Supra 336i SVD"
+Supra25 = "SupraExpress 288i Multinational"
+Supra23 = "Supra 288i SP"
+Supra20 = "SupraExpress 288i SP"
+Supra18PNP = "SupraSonic 288V+ Plug & Play"
+Supra18 = "SupraSonic 288V+"
+
+; VoiceView
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.VXD
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[Supra_Voice_All] ; Supra baseline voice settings, includes VoiceView init plus everything
+HKR,,Enumerator,,serwave.vxd
+
+HKR,, SpeakerPhoneSpecs, 1, 00,00,00,00, 0f,00,00,00, 03,00,00,00, 00,00,00,00
+HKR, SpeakerPhoneEnable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneDisable, 2,, "at#spk=0,15,,<cr>"
+HKR, SpeakerPhoneDisable, 3,, "at#vls=0<cr>"
+HKR, SpeakerPhoneMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneMute, 2,, "at#spk=0,,,<cr>"
+HKR, SpeakerPhoneUnMute, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneUnMute, 2,, "at#spk=1,,,<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 1,, "at#vls=6<cr>"
+HKR, SpeakerPhoneSetVolumeGain, 2,, "at#spk=,<Vol>,<Gain><cr>"
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[Supra_Voice_All2] ; Supra/Rockwell baseline voice settings, doesn't includes VoiceView init or Speakerphone
+HKR,,Enumerator,,serwave.vxd
+
+HKR, EnableCallerID, 1,, "at#cid=1<cr>"
+HKR, EnableDistinctiveRing, 1,, "at-sdr=7<cr>"
+HKR,, ForwardDelay, 1,88,13
+HKR, CloseHandset, 1,, "at#cls=0<cr>"
+HKR,, CallerIDPrivate,,P
+HKR,, CallerIDOutSide,,O
+HKR,, VariableTerminator,,<cr><lf>
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATE = ", 1, 93, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "TIME = ", 1, 94, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NMBR = ", 1, 95, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NAME = ", 1, 96, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "MESG = ", 1, 97, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING1<cr><lf>", 1, 18, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING2<cr><lf>", 1, 19, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING3<cr><lf>", 1, 1a, 00, 00,00,00,00, 00,00,00,00
+
+[Supra_Voice_All3] ; Supra/Rockwell baseline voice settings, doesn't includes VoiceView init, speakerphone, handset, caller id, distingtive ring
+HKR,,Enumerator,,serwave.vxd
+
+HKR,, ForwardDelay, 1,88,13
+HKR,, VariableTerminator,,<cr><lf>
+HKR, GenerateDigit, 1,, "at#vts=<Digit><cr>"
+HKR, Responses, "<cr><lf>VCON<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+[Supra_Voice_Serwave] ; Rockwell serial wave settings
+
+HKR,, VoiceProfile, 1, 27,03,08,00
+
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+
+[Supra_Voice_Serwave2] ; Rockwell serial wave settings
+
+; HKR,, VoiceProfile, 1,23,03,00,00
+HKR,, VoiceProfile, 1,23,03,08,00
+
+HKR,, HandsetCloseDelay, 1, 1e,00,00,00
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, HandsetSetRecordFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetRecordFormat, 2,,"at#vbs=4<cr>"
+HKR, HandsetSetPlayFormat, 1,,"at#vsr=7200<cr>"
+HKR, HandsetSetPlayFormat, 2,,"at#vbs=4<cr>"
+HKR, OpenHandset, 1,, "at#cls=8<cr>"
+HKR, OpenHandset, 2,, "at#vls=1<cr>"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+
+[Supra_Voice_Serwave3] ; Rockwell serial wave settings - drop handset, caller id and distinctive ring
+
+; HKR,, VoiceProfile, 1,A1,13,01,00
+HKR,, VoiceProfile, 1,A1,13,09,00
+
+HKR, StartPlay, 1,, "at#vtx<cr>"
+HKR, StopPlay, 1,, "None"
+HKR, StopPlay, 2,, "NoResponse"
+HKR, StartRecord, 1,, "at#vrx<cr>"
+HKR, StopRecord, 1,, "None"
+HKR, StopRecord, 2,, "NoResponse"
+HKR,, TerminateRecord,, "<h10>E<cr>at<cr>"
+HKR,, TerminatePlay,, "<h10><h03>at<cr>"
+HKR,, AbortPlay,, "<h10><h18>at<cr>"
+HKR, LineSetPlayFormat, 1,, "at#vls=0<cr>"
+HKR, LineSetRecordFormat, 1,, "None"
+HKR, LineSetRecordFormat, 2,, "NoResponse"
+HKR, VoiceToDataAnswer, 1,, "at#cls=0<cr>"
+HKR, VoiceToDataAnswer, 2,, "ata<cr>"
+HKR, VoiceAnswer, 1,, "at#cls=8<cr>"
+HKR, VoiceAnswer, 2,, "at#vls=0<cr>"
+HKR, VoiceAnswer, 3,, "at#vbt=1<cr>"
+HKR, VoiceAnswer, 4,, "at#vsr=7200<cr>"
+HKR, VoiceAnswer, 5,, "at#vbs=4<cr>"
+HKR, VoiceAnswer, 6,, "ats30=60<cr>"
+HKR, VoiceAnswer, 7,, "ata<cr>"
+HKR, VoiceDialNumberSetup, 1,, "at#cls=8<cr>"
+HKR, VoiceDialNumberSetup, 2,, "at#vls=0<cr>"
+HKR, VoiceDialNumberSetup, 3,, "at#vrn=0<cr>"
+HKR, VoiceDialNumberSetup, 4,, "at#vbt=1<cr>"
+HKR, VoiceDialNumberSetup, 5,, "at#vsr=7200<cr>"
+HKR, VoiceDialNumberSetup, 6,, "at#vbs=4<cr>"
+HKR, VoiceDialNumberSetup, 7,, "ats30=60<cr>"
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F2 E0 V1 Q0 W1 S95=47 S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6\N"
+HKR, Settings, ErrorControl_On,, "&Q5\N3"
+HKR, Settings, ErrorControl_Forced,, "&Q5\N2"
+HKR, Settings, ErrorControl_Cellular,, "\N3 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, ErrorControl_Cellular_Forced,,"\N4 &Q5 -K1 *H1 )M1 -C1 -Q0"
+HKR, Settings, Compression_Off,, "%%C"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Modulation_CCITT,, "B"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "CONNECT", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "CONNECT 12000", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "CONNECT 31200", 1, 02, 00, E0,79,00,00, 00,00,00,00 ; CONNECT 31200 - Connection at 31200 bps
+HKR, Responses, "CONNECT 33600", 1, 02, 00, 40,83,00,00, 00,00,00,00 ; CONNECT 33600 - Connection at 33600 bps
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "CARRIER 31200", 1, 01, 00, E0,79,00,00, 00,00,00,00 ; CARRIER 31200 - Carrier detected at 31200 bps
+HKR, Responses, "CARRIER 33600", 1, 01, 00, 40,83,00,00, 00,00,00,00 ; CARRIER 33600 - Carrier detected at 33600 bps
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "PROTOCOL: ALT - CELLULAR", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR
+
+HKR, Responses, "CARRIER 14400/VFC", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "CARRIER 16800/VFC", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "CARRIER 19200/VFC", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "CARRIER 21600/VFC", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "CARRIER 24000/VFC", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "CARRIER 26400/VFC", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "CARRIER 28800/VFC", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 31200/ARQ", 1, 02, 02, E0,79,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 33600/ARQ", 1, 02, 02, 40,83,00,00, 00,00,00,00
+
+; Voice View
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+;setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+;setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "-SSV", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SMD", 1, 0A, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SFA", 1, 0B, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRA", 1, 0C, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRQ", 1, 0D, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRC:", 1, 0E, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-STO", 1, 0F, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SVM", 1, 10, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtaicm.inx b/private/unimodem/inf/mdmtaicm.inx
new file mode 100644
index 000000000..d1b1ab738
--- /dev/null
+++ b/private/unimodem/inf/mdmtaicm.inx
@@ -0,0 +1,341 @@
+; Windows Modem Setup File
+; Copyright 1994-1996 Microsoft Corp.
+; Manufacturer: Taicom
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM52E23CDD ; internal 1442PC
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Taicom"
+
+Modem1 = "Taicom 1442 PC"
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg, INTERNAL
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 00,00,00,00, FF,00,00,00, 00,00,00,00, 07,00,00,00, 0F,00,00,00, B7,03,00,00, 00,E1,00,00, 40,38,00,00
+
+[Common]
+HKR, Init, 1,, "AT &F<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, "\J0"
+HKR, Settings, SpeedNegotiation_On,, "\J1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, ""
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; connect at 14400
+HKR, Responses, "69<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; Protocol:None
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Protocol:LAPM
+HKR, Responses, "78<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00 ; Connect V42BIS
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; Prorocol:ALT
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NOTUSED<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT EC<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 EC<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 EC/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 EC/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 EC/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 EC/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 EC/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 EC/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 EC/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 EC/V42BIZ<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 4800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL-LAPM V.42 BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200TX/75RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75TX/1200RX V.23<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:CLASS 5<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:V.42BIS<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-FAX<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-+FCERROR<cr><lf>",1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-+FCERROR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT-DATA<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL:MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>",1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "<cr><lf>CONNECT REL/MNP5<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300 REL/MNP5<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600 REL/MNP5<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 REL/MNP5<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 REL/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 REL/MNP5<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 REL/MNP5<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 REL/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000 REL/MNP5<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 REL/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800 REL/MNP5<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200 REL/MNP5<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600 REL/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000 REL/MNP5<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400 REL/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800 REL/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400 REL/MNP5<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600 REL/MNP5<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200 REL/MNP5<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX REL/MNP5<cr><lf>", 1, 03, 02, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300/VFC<cr><lf>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200/VFC<cr><lf>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400/VFC<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800/VFC<cr><lf>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200/VFC<cr><lf>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600/VFC<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000/VFC<cr><lf>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 01, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 01, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 01, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmtdk.inx b/private/unimodem/inf/mdmtdk.inx
new file mode 100644
index 000000000..a91c6258e
--- /dev/null
+++ b/private/unimodem/inf/mdmtdk.inx
@@ -0,0 +1,152 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: TDK
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%DF2496% = DF2496, PCMCIA\TDK-DF2496_DATA/FAX_MODEM-190C
+%DF2496% = DF2496, PCMCIA\TDK-DF2496A_DATA/FAX_MODEM-5859
+%DF1414% = DF1414, PCMCIA\TDK-DF1414_DATA/FAX_MODEM-8E9C
+%DF1414% = DF1414, PCMCIA\TDK-DF1414A_DATA/FAX_MODEM-6D37
+%DF1414% = DF1414, PCMCIA\TDK-DF1414_DATA/FAX_MODEM-2496
+%DF1414% = DF1414, UNIMODEMAC24C910
+%DF1414% = DF1414, PCMCIA\TDK-DF1414_DATA/FAX_MODEM-25BF
+
+; Installation sections
+
+[DF2496]
+AddReg=All, MfgAddReg, DF2496.AddReg, PCMCIA
+
+[DF1414]
+AddReg=All, MfgAddReg, DF1414.AddReg, PCMCIA
+
+; AddReg sections
+
+[DF2496.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 01,00,00,00, 0f,00,00,00, 73,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0W1S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "&Q5"
+HKR, Settings, ErrorControl_Off,, "&Q0"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[DF1414.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+Mfg = "TDK"
+
+; Model strings
+
+DF2496="TDK DF2496 2400 Data + 9600 Fax Modem"
+DF1414="TDK DF1414 14400 Data + Fax Modem"
+
+; Plug and Play device names
+
+PCMCIA\TDK-DF2496_DATA/FAX_MODEM-190C.DeviceDesc="DF2496"
+PCMCIA\TDK-DF1414_DATA/FAX_MODEM-8E9C.DeviceDesc="DF1414"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass, 1, 02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[PCMCIA]
+HKR,, DeviceType, 1, 03
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+
+[MfgAddReg]
+HKR, Init, 2,, "AT&FE0&D2&C1V0W1S0=0S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&FE1V1S0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "24<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "25<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "26<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "27<cr>", 1, 02, 00, 00,00,00,00, 4b,00,00,00
+HKR, Responses, "28<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "31<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "42<cr>", 1, 01, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "43<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "82<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "83<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtelbt.inx b/private/unimodem/inf/mdmtelbt.inx
new file mode 100644
index 000000000..177847e01
--- /dev/null
+++ b/private/unimodem/inf/mdmtelbt.inx
@@ -0,0 +1,526 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Telebit
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem11%= Modem11,UNIMODEM7563093E ; Telebit Espresso 8396A
+%Modem10%= Modem10,UNIMODEMDFBBEF35 ; Telebit Fastblazer 8840
+%Modem9% = Modem9, Telebit_Modem9, UNIMODEMA3EEEF33 ; Telebit V.34 28800
+%Modem8% = Modem8, UNIMODEM78620DB5 ; Telebit QBlazer
+%Modem7% = Modem7, UNIMODEMA7A407A4 ; Telebit QBlazer Plus
+%Modem6% = Modem6, UNIMODEM8DD48B79 ; Telebit Worldblazer
+%Modem6% = Modem6, UNIMODEM839F724A ; Telebit WorldBlazer
+%Modem5% = Modem5, UNIMODEMAFB48C74 ; Telebit TrailBlazer Plus
+%Modem5% = Modem5, UNIMODEM2104110C ; Telebit TrailBlazer Plus
+%Modem4% = Modem4, UNIMODEM0D1645DD ; Telebit T1600
+%Modem4% = Modem4, UNIMODEM6A464A05 ; Telebit T1600
+%Modem3% = Modem3, UNIMODEM5D333D59 ; Telebit T2500
+%Modem3% = Modem3, UNIMODEM894DFD84 ; Telebit T2500
+%Modem3% = Modem3, UNIMODEM97905B10 ; Telebit T2500
+%Modem3% = Modem3, UNIMODEMEF4928B4 ; Telebit T2500
+%Modem2% = Modem2, UNIMODEM59B13E1B ; Telebit T3000
+%Modem2% = Modem2, UNIMODEM98FCC1A2 ; Telebit T3000
+%Modem2% = Modem2, UNIMODEMA99E6972 ; Telebit T3000
+%Modem1% = Modem1, Telebit_Modem1 ; Telebit Trailblazer Plus 2400
+
+; Installation sections
+
+[Modem11] ; Telebit Espresso 8396A
+AddReg=All, MfgAddReg, Modem11.AddReg, External
+
+[Modem10] ; Telebit Fastblazer 8840
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9] ; Telebit V.34
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8] ; Telebit QBlazer
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem7] ; Telebit QBlazer Plus
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem6] ; Telebit WorldBlazer
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem5] ; Telebit TrailBlazer Plus
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem4] ; Telebit T1600
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3] ; Telebit T2500
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; Telebit T3000
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; Telebit Trailblazer Plus 2400
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+; AddReg sections
+
+[Modem11.AddReg] ; Telebit Espresso 8396A
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR, Init, 3,, "AT &F &C1 &D2 E0 V1<cr>"
+HKR, Settings, InactivityTimeout,, "S37=<#>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&E1"
+HKR, Settings, ErrorControl_Off,, "&E0"
+HKR, Settings, ErrorControl_Forced,, "&E3"
+HKR, Settings, Compression_Off,, "*E0"
+HKR, Settings, Compression_On,, "*E1"
+HKR, Settings, SpeedNegotiation_Off,, "%%F0"
+HKR, Settings, SpeedNegotiation_On,, "%%F4%%R1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+[Modem10.AddReg] ; Telebit Fastblazer 8840
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, 36,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR, Init, 2,, "AT &F E0 V1 &I1<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&E1"
+HKR, Settings, ErrorControl_Off,, "&E0"
+HKR, Settings, ErrorControl_Forced,, "&E3"
+HKR, Settings, InactivityTimeout,, "S37=<#>"
+
+[Modem9.AddReg] ; Telebit V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S95=47 W1 S0=0<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem8.AddReg] ; Telebit QBlazer
+HKR, Init, 3,, "AT S59=3<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Settings, Blind_Off,, "X2"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem7.AddReg] ; Telebit QBlazer Plus
+HKR, Init, 3,, "AT S59=3<cr>"
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Blind_Off,, "X1"
+HKR, Settings, Blind_On,, "X0"
+
+[Modem6.AddReg] ; Telebit WorldBlazer
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Init, 3,, "AT &F9 E0 V1 S92=1 S59=3<cr>"
+HKR,, Reset,, "AT&F9<cr>"
+HKR, Settings, ErrorControl_Off,, "S180=0S181=1"
+HKR, Settings, ErrorControl_On,, "S180=3S181=1"
+HKR, Settings, ErrorControl_Forced,, "S180=2S181=2"
+HKR, Settings, Blind_Off,, "X1"
+HKR, Settings, Blind_On,, "X0"
+
+[Modem5.AddReg] ; Telebit TrailBlazer Plus
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR, Init, 3,, "AT W1<cr>"
+HKR, Settings, SpeakerVolume_Low,, "S61=50"
+HKR, Settings, SpeakerVolume_Med,, "S61=150"
+HKR, Settings, SpeakerVolume_High,, "S61=250"
+HKR, Settings, ErrorControl_Off,, "S106=0S97=0S95=0"
+HKR, Settings, ErrorControl_On,, "S106=1S95=2S97=0S66=2"
+HKR, Settings, ErrorControl_Forced,, "S106=0S97=1S95=1S66=1"
+HKR, Settings, Compression_Off,, "S198=0S96=0"
+HKR, Settings, Compression_On,, "S198=0S96=1S110=1"
+HKR, Settings, Blind_Off,, "X2"
+HKR, Settings, Blind_On,, "X0"
+
+[Modem4.AddReg] ; Telebit T1600
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,96,00,00, 80,25,00,00
+HKR, Init, 2,, "AT &F9<cr>"
+HKR, Init, 3,, "AT E0 V1 S59=7<cr>"
+HKR, Settings, ErrorControl_Off,, "S180=0"
+HKR, Settings, ErrorControl_On,, "S180=1 S181=1"
+HKR, Settings, ErrorControl_Forced,, "S180=1 S181=2"
+HKR, Settings, Blind_Off,, "X1"
+HKR, Settings, Blind_On,, "X0"
+HKR, Settings, SpeedNegotiation_Off,, "S94=0"
+HKR, Settings, SpeedNegotiation_On,, "S50=6S94=1"
+
+[Modem3.AddReg] ; Telebit T2500
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR, Init, 2,, "AT &F0<cr>"
+HKR, Init, 3,, "AT E0 V1 W1<cr>"
+HKR, Settings, SpeakerVolume_Low,, "S61=50"
+HKR, Settings, SpeakerVolume_Med,, "S61=150"
+HKR, Settings, SpeakerVolume_High,, "S61=250"
+HKR, Settings, FlowControl_Off,, "S58=0 S68=255"
+HKR, Settings, FlowControl_Hard,, "S58=2 S68=255"
+HKR, Settings, FlowControl_Soft,, "S58=3 S68=255"
+HKR, Settings, ErrorControl_Off,, "S95=0 S66=1 S97=0"
+HKR, Settings, ErrorControl_On,, "S106=1 S97=1 S66=2 S95=2"
+HKR, Settings, ErrorControl_Forced,, "S95=1"
+HKR, Settings, Compression_Off,, "S98=0 S96=0"
+HKR, Settings, Compression_On,, "S98=0 S96=0"
+HKR, Settings, Blind_Off,, "X3"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem2.AddReg] ; Telebit T3000
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F9 E0 V1 S59=7<cr>"
+HKR, Settings, ErrorControl_On,, "S180=3S181=1"
+HKR, Settings, Blind_Off,, "X2"
+HKR, Settings, Blind_On,, "X1"
+
+[Modem1.AddReg] ; Telebit Trailblazer Plus 2400
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Strings]
+Mfg = "Telebit"
+
+Modem11="Telebit Xpresso 8396A"
+Modem10="Telebit Fastblazer 8840"
+Modem9 ="Telebit V.34 28800"
+Modem8 ="Telebit QBlazer"
+Modem7 ="Telebit QBlazer Plus"
+Modem6 ="Telebit WorldBlazer"
+Modem5 ="Telebit TrailBlazer Plus"
+Modem4 ="Telebit T1600"
+Modem3 ="Telebit T2500"
+Modem2 ="Telebit T3000"
+Modem1 ="Telebit TrailBlazer Plus 2400"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 68,01,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, InactivityTimeout,, "S41=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "S58=0"
+HKR, Settings, FlowControl_Hard,, "S58=2"
+HKR, Settings, FlowControl_Soft,, "S58=3"
+HKR, Settings, ErrorControl_Off,, "S180=0S181=1"
+HKR, Settings, ErrorControl_On,, "S180=2S181=1"
+HKR, Settings, ErrorControl_Forced,, "S180=2S181=2"
+HKR, Settings, Compression_Off,, "S190=0"
+HKR, Settings, Compression_On,, "S190=1"
+HKR, Settings, SpeedNegotiation_Off,, "S50=254S94=0"
+HKR, Settings, SpeedNegotiation_On,, "S50=0S94=1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DIALING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RRING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf><cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/REL/COMP<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/REL/COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/REL/COMP<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/REL/COMP<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/REL/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/REL/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/REL/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/REL/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/REL/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/REL/COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/REL/COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/REL/COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/REL/COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/REL/COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/REL/COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/REL/COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/REL/COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/REL/COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/REL/COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/REL/COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/REL/COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/REL/COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/REL/COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/REL/COMP<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/REL/COMP<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/REL/COMP<cr><lf>", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAPM<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAPM<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAPM<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAPM<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAPM<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAPM<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAPM<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAPM<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAPM<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAPM<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAPM<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAPM<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAPM<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAPM<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAPM<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAPM<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAPM<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAPM<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/LAPM<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/LAPM/COMP<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAPM/COMP<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAPM/COMP<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAPM/COMP<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAPM/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAPM/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAPM/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAPM/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAPM/COMP<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM/COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAPM/COMP<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM/COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAPM/COMP<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAPM/COMP<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAPM/COMP<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAPM/COMP<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAPM/COMP<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAPM/COMP<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAPM/COMP<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAPM/COMP<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAPM/COMP<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAPM/COMP<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAPM/COMP<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAPM/COMP<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAPM/COMP<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAPM/COMP<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAPM/COMP<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 230400/LAPM/COMP<cr><lf>", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAP-B<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 0600/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115,200/LAP-M/COMPRESSION<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtelin.inx b/private/unimodem/inf/mdmtelin.inx
new file mode 100644
index 000000000..6c614c318
--- /dev/null
+++ b/private/unimodem/inf/mdmtelin.inx
@@ -0,0 +1,603 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: TELINDUS DISTRIBUTION
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM076A08B5
+%Modem2% = Modem2, UNIMODEMC9431C5B
+%Modem3% = Modem3, UNIMODEM7F00E06E
+%Modem4% = Modem4, UNIMODEM458EBF5A
+%Modem5% = Modem5, Telindus_Modem5
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, 4f,00,00,00, ff,00,00,00, 01,00,00,00, 0d,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT&Q0&C1&D1Q0V1W1E0S95=47<cr>"
+HKR,, Reset,, "AT&F&Q0<cr>"
+HKR, Settings, ErrorControl_On,, "\N5"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C2\N7"
+HKR, Settings, Compression_Off,, "%%C0\N6"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_On,, "F0"
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, b0,04,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 00,00,00,00, 58,02,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 80,25,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,4b,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "21<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 50,00,00,00, ff,00,00,00, 01,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 F0 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 50,00,00,00, ff,00,00,00, 01,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 F0 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, 78,00,00,00, ff,00,00,00, 01,00,00,00, 0d,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F \N11 E0 V1 W1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N11"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N10"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_On,, "F0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, c0,01,00,00, 78,00,00,00, ff,00,00,00, 01,00,00,00, 0d,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N11"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N11"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0F(I4)"
+HKR, Settings, Modulation_Bell,, "B1F(i4)"
+HKR, Settings, SpeedNegotiation_On,, "F0"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "TELINDUS"
+
+; Model strings
+
+Modem1="TELINDUS ASTER 4"
+Modem2="TELINDUS PARTITA PC CO TO"
+Modem3="TELINDUS PARTITA PO"
+Modem4="TELINDUS QUINTET PC & MC V32Bis"
+Modem5="TELINDUS QUINTET TT V32Bis"
+
+; Plug and Play device names
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &Q0&C1&D1&K3Q0V1W0X4E1B0F0%%C2\N7<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0B15"
+HKR, Settings, Modulation_Bell,, "B1B16"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "24<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "25<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "26<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps (found by experimentation)
+HKR, Responses, "28<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "29<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps (found by experimentation)
+HKR, Responses, "31<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "34<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps (found by experimentation)
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - DATA connection
+HKR, Responses, "60<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps (found by experimentation)
+HKR, Responses, "65<cr>", 1, 02, 00, 00,84,03,00, 00,00,00,00 ; CONNECT 230400 - Connection at 230400 bps
+; Negotiation Progress Messages
+HKR, Responses, "36<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "37<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "38<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "68<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: ADC - Hayes Adaptive Data Compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode
+HKR, Responses, "71<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB - LAPB error-control negotiated
+HKR, Responses, "72<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/HDX - LAPB half-duplex error-control negotiated
+HKR, Responses, "73<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ERROR-CONTROL/LAPB/AFT - LAPB Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "74<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB - X.25 error-control negotiated
+HKR, Responses, "75<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/HDX - X.25 half-duplex error-control negotiated
+HKR, Responses, "76<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: X.25/LAPB/AFT - X.25 Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "78<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/HDX - V.42 LAPM half-duplex error-control negotiated
+HKR, Responses, "79<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM/AFT - V.42 LAPM Asynchronous Framing Technique error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "91<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 1
+HKR, Responses, "92<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 2
+HKR, Responses, "93<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; AUTOSTREAM: LEVEL 3
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 bis<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: ADC<cr><lf>", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ERROR-CONTROL/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: X.25/LAPB/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP_M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/HDX<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M/AFT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT-CELLULAR<cr><lf>", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtelnk.inx b/private/unimodem/inf/mdmtelnk.inx
new file mode 100644
index 000000000..97badd61f
--- /dev/null
+++ b/private/unimodem/inf/mdmtelnk.inx
@@ -0,0 +1,255 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Telelink
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1 ; Swissmod III SWITCH
+%Modem2% = Modem2 ; SAFEline
+%Modem3% = Modem3 ; Swissmod III FAST
+%Modem4% = Modem4 ; IMS-08 Faxline+
+%Modem5% = Modem5 ; Cardline V32bis
+
+; Installation sections
+
+[Modem1] ; Swissmod III
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ;SAFEline
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3] ; Swissmod III FAST
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4] ; IMS-08 Faxline+
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem5] ; Cardline V32bis
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem1.AddReg] ; Swissmod III
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 4b,00,00,00
+HKR, INIT,3,,"AT&F W0 S95=251 <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem2.AddReg] ; SAFEline
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,84,03,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, INIT,3,,"AT&F W1<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem3.AddReg] ; Swissmod III FAST
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 4f,00,00,00
+HKR, INIT,3,,"AT&F W0 S95=251 <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem4.AddReg] ; IMS-08 Faxline+
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, INIT,3,,"AT&F2 W1<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem5.AddReg] ; Cardline V32bis
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, INIT,3,,"AT&F W1 <cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, Compression_On,, "%%C3"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Telelink"
+
+; Model strings
+
+Modem1="Telelink Swissmod III SWITCH"
+Modem2="Telelink SAFEline"
+Modem3="Telelink Swissmod III FAST"
+Modem4="Telelink IMS-08 Faxline+"
+Modem5="Telelink Cardline V32bis"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>VOICE<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DELAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>TEST FAILED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>AUTOLOGON FAILED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>TEST PASSED<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 12000<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42 BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: V42<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP ALT<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 1<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 2<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 3<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 4<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: MNP REL 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtexas.inx b/private/unimodem/inf/mdmtexas.inx
new file mode 100644
index 000000000..9d440980b
--- /dev/null
+++ b/private/unimodem/inf/mdmtexas.inx
@@ -0,0 +1,365 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Texas Instruments
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem2% = Modem2, UNIMODEMA2400B82
+%Modem1% = Modem1, UNIMODEM794B63D5
+%Modem1% = Modem1, UNIMODEME8C5F475
+
+
+; Installation sections
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 40,38,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Texas Instruments"
+
+; Model strings
+
+Modem2="TI 2396TM Internal"
+Modem1="TI 2314TM Internal"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 &D2 S7=50 \Q3 +Q1 S10=40<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>" ; was AT&F
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "+M0"
+HKR, Settings, SpeedNegotiation_On,, "+M3"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "+S8=<#>"
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtger.inx b/private/unimodem/inf/mdmtger.inx
new file mode 100644
index 000000000..c3a92d185
--- /dev/null
+++ b/private/unimodem/inf/mdmtger.inx
@@ -0,0 +1,152 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: MultiTech
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem2% = Modem2,UNIMODEM7896F369 ; MT1432MG
+%Modem1% = Modem1,Multi_Modem1,UNIMODEM7130E8D2 ; MT1432BG
+
+
+; Installation sections
+
+[Modem2] ; MT1432MG
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+[Modem1] ; MT1432BG
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; MT1432BG
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+
+[Modem2.AddReg] ; MT1432MG
+HKR,, Properties, 1, 80,01,00,00, 64,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 09,00,00,00
+HKR, Settings, FlowControl_Off,, "&E3"
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "MultiTech (Ger)"
+
+; Model strings
+
+Modem2="Multitech MT1432MG"
+Modem1="Multitech MT1432BG"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F S0=0 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "AT H <cr>"
+HKR, Answer, 1,, "AT A <cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,,
+HKR, Settings, SpeakerVolume_Low,, ""
+HKR, Settings, SpeakerVolume_Med,, ""
+HKR, Settings, SpeakerVolume_High,, ""
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&E0"
+HKR, Settings, FlowControl_Hard,, "&E4"
+HKR, Settings, FlowControl_Soft,, "&E5"
+HKR, Settings, ErrorControl_On,, "&E1"
+HKR, Settings, ErrorControl_Off,, "&E0"
+HKR, Settings, ErrorControl_Forced,, "&E2"
+HKR, Settings, Compression_On,, "&E15"
+HKR, Settings, Compression_Off,, "&E14"
+HKR, Settings, Modulation_CCITT,,
+HKR, Settings, Modulation_Bell,,
+HKR, Settings, SpeedNegotiation_Off,,
+HKR, Settings, SpeedNegotiation_On,,
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 LAPM<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM<cr><lf>", 1, 02, 02, 00,00,00,00, 40,38,00,00
+
+HKR, Responses, "<cr><lf>CONNECT RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 RELIABLE<cr><lf>", 1, 02, 02, 00,00,00,00, 40,38,00,00
+
+
+HKR, Responses, "<cr><lf> CONNECT 1200 LAPM COMPRESSED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 20,1c,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400 LAPM COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 40,38,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, 00,96,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 1275<cr><lf>", 1, 02, 00, 00,96,00,00, b0,04,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 00,96,00,00, 60,09,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, 00,96,00,00, c0,12,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 00,96,00,00, 20,1c,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 00,96,00,00, 80,25,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 00,96,00,00, 40,38,00,00
diff --git a/private/unimodem/inf/mdmti.inx b/private/unimodem/inf/mdmti.inx
new file mode 100644
index 000000000..4f69d82bb
--- /dev/null
+++ b/private/unimodem/inf/mdmti.inx
@@ -0,0 +1,155 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Texas Instruments
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Driver sections
+
+[Models]
+%Modem3% = Modem3, UNIMODEM9E99B53D
+%Modem2% = Modem2, UNIMODEM4D2A5294
+%Modem1% = Modem1, UNIMODEM94BE37E7
+
+; Installation sections
+
+[Modem3]
+AddReg=All, TI, Modem3.AddReg
+
+[Modem2]
+AddReg=All, TI, Modem2.AddReg
+
+[Modem1]
+AddReg=All, TI, Modem1.AddReg
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Init, 3,, "AT E0 Q0 V0 W2 &C1<cr>"
+HKR, Init, 4,, "AT &D2 &S0 \J0 \V1 S95=47<cr>"
+
+[Modem2.AddReg]
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Strings]
+MS = "Microsoft"
+
+Mfg = "Texas Instruments"
+Modem3="14.4 Data Fax Modem"
+Modem2="TravelMate 14400 Data, 14400 Fax"
+Modem1="TravelMate 14400 Data, 9600 Fax"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.VXD
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[TI]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F0 <cr>"
+HKR, Init, 3,, "AT E0 Q0 V0 W1 T L2 M1 &C1 <cr>"
+HKR, Init, 4,, "AT &D2 &S0 X4 %%C1 \J0 \N7 \Q3 \V1 \T0 <cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "34<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+
+HKR, Responses, "20<cr>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "26<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "27<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "28<cr>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "40<cr>", 1, 01, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 01, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 01, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 01, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "66<cr>", 1, 02, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 02, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmtkr.inx b/private/unimodem/inf/mdmtkr.inx
new file mode 100644
index 000000000..7a4dc995f
--- /dev/null
+++ b/private/unimodem/inf/mdmtkr.inx
@@ -0,0 +1,316 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: TKR
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem2% = Modem2 ;TerboLine 19k2
+%Modem1% = Modem1,UNIMODEMFB4CF2C7 ;SlimLine 144
+
+
+; Installation sections
+
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem2.AddReg] ;TerboLine 19k2
+HKR,, Properties, 1, 80,01,00,00, 63,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 00,96,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, ErrorControl_On,, "\N2"
+HKR, Settings, ErrorControl_Forced,, "\N3"
+
+[Modem1.AddReg] ;SlimLine 144
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 0f,00,00,00
+HKR, Init, 2,, "AT W0 S95=251<cr>"
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "TKR"
+
+; Model strings
+
+Modem2="TKR TerboLine 19k2"
+Modem1="TKR SlimLine 144"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F S0=0 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,,"\N0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75 V.23<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200 V.23<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION :CLASS5<cr><lf>" ,1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtorn.inx b/private/unimodem/inf/mdmtorn.inx
new file mode 100644
index 000000000..cec9a56fa
--- /dev/null
+++ b/private/unimodem/inf/mdmtorn.inx
@@ -0,0 +1,384 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Tornado Nederland
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, UNIMODEM5CB4DD37 ; Tornado FM 144
+%Modem2% = Modem2, UNIMODEM5E3E5A20 ; Tornado FM 144 E
+%Modem2% = Modem2, UNIMODEMD779D134
+%Modem3% = Modem3, UNIMODEMB89855C3
+%Modem4% = Modem4, Tornado_Modem4, UNIMODEM5B621B5F ; Tornado FM 288 e
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Modem1.AddReg, Internal
+
+[Modem2]
+AddReg=All, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, Modem3.AddReg, Internal
+
+[Modem4]
+AddReg=All, Modem4.AddReg, External
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Tornado Nederland"
+
+; Model strings
+
+Modem1="Tornado FM-144 H"
+Modem2="Tornado FM-144 E"
+Modem3="Tornado FM-288 H"
+Modem4="Tornado FM-288 E"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F2 E0 &C1 &D2 V1 \V1 S0=0<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmtosh.inx b/private/unimodem/inf/mdmtosh.inx
new file mode 100644
index 000000000..c8c1d272f
--- /dev/null
+++ b/private/unimodem/inf/mdmtosh.inx
@@ -0,0 +1,724 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Toshiba, Noteworthy
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Toshiba%
+
+[Manufacturer]
+%Toshiba% = Toshiba
+%Noteworthy% = Noteworthy
+%Kingston% = Kingston
+
+[Toshiba]
+%Modem13% = Modem13, PCMCIA\PSION_DACOM-ADVANCED_PCMCIA_MODEM-3D25 ; Toshiba British (UK) Advanced PCMCIA modem (mfg by Psion )
+%Modem13% = Modem13, UNIMODEMD7AC3773
+
+%Modem12% = Modem12, TOSH_Modem12 ; T24DX similar to modem4 but no fax
+%Modem11% = Modem11, TOSH_Modem11 ; T24SL similar to modem6
+%Modem8% = Modem8, PCMCIA\TOSHIBA-T144P/F4-4EB7 ; T144PF4
+%Modem8% = Modem8, UNIMODEM39888E6F ; T144PF4
+%Modem7% = Modem7, UNIMODEMEE6AD1B7 ; BC 14.400
+%Modem7% = Modem7, PCMCIA\PURE_DATA_LTD-PDMCIA_V.17_FAX/MODEM-0085 ; BC 14.400 (Toshiba Canada)
+%Modem6% = Modem6, UNIMODEMA1E98A9B ; T24M
+%Modem6% = Modem6, UNIMODEMF83D4E2F ; T24M
+%Modem5% = Modem5, TOSH_Modem5 ; TPCV32BF (Psion Dacom)
+%Modem4% = Modem4, TOSH_Modem4 ; T24D/F has fax
+%Modem3% = Modem3, TOSH_Modem3 ; T144D/F
+
+[Noteworthy]
+%Modem14% = Modem14, PCMCIA\NOTEWORTHY-NW288CR-6DBA ; V.34 model
+%Modem14% = Modem14, TOSH_Modem14, UNIMODEM1058B7F8 ; V.34 model
+%Modem10% = Modem10, UNIMODEMDC96479E ; T144NW
+%Modem10% = Modem10, PCMCIA\TOSHIBA-T144PF-B87B ; T144NW
+%Modem9% = Modem9, UNIMODEM74CD5712 ; T24NW
+%Modem9% = Modem9, PCMCIA\TOSHIBA-T24PF-8F85 ; T24NW
+%Modem2% = Modem2, TOSH_Modem2, PCMCIA\INTEL-DATAFAX_14.4-7462 ; T144NWX
+%Modem2% = Modem2, UNIMODEM30EA2F30 ; T144NWX
+%Modem1% = Modem1, "PCMCIA\NOTEWORTHY-NW144CR-4A96" ; NW144CR
+
+[Kingston]
+%Modem15% = Modem15, PCMCIA\KINGSTON_TECHNOLOGY-DATAREX_14.4_DATA/FAX_MODEM-6EC4 ; Kingston DataRex 14.4 PCMCIA Modem
+%Modem15% = Modem15, UNIMODEM3192220E ; Kingston DataRex 14.4 PCMCIA Modem
+
+; Installation sections
+
+[Modem15] ; Kingston DataRex 14.4 PCMCIA Modem
+AddReg=All, MfgAddReg, Modem15.AddReg, PCMCIA
+
+[Modem14] ; V.34
+AddReg=All, MfgAddReg, Modem14.AddReg, PCMCIA
+
+[Modem13] ; Toshiba UK model
+AddReg=All, MfgAddReg, Modem13.AddReg, PCMCIA
+
+[Modem12] ; T24DX
+AddReg=All, MfgAddReg, Modem12.AddReg, INTERNAL
+
+[Modem11] ; T24SL
+AddReg=All, MfgAddReg, Modem11.AddReg, INTERNAL
+
+[Modem10] ;Toshiba Noteworthy T144NW
+AddReg=All, MfgAddReg, Modem10.AddReg, PCMCIA
+
+[Modem9] ; T24NW
+AddReg=All, MfgAddReg, Modem9.AddReg, PCMCIA
+
+[Modem8] ; T144PF4
+AddReg=All, MfgAddReg, Modem8.AddReg, PCMCIA
+
+[Modem7] ; BC 14.400
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem6] ; T24M
+AddReg=All, MfgAddReg, Modem6.AddReg, INTERNAL
+
+[Modem5] ; TPCV32BF (Psion Dacom)
+AddReg=All, MfgAddReg, Modem5.AddReg, PCMCIA
+
+[Modem4] ; T24D/F
+AddReg=All, MfgAddReg, Modem4.AddReg, INTERNAL
+
+[Modem3] ; T144D/F
+AddReg=All, MfgAddReg, Modem3.AddReg, INTERNAL
+
+[Modem2] ; T144NWX
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1] ; NW144CR
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+; AddReg sections
+
+[Modem15.AddReg] ; Kingston DataRex 14.4 PCMCIA
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 Q0 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 *H2 %%C3 -Q1"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 *H2 %%C3 -Q1""
+
+[Modem14.AddReg] ; V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 W2 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, ErrorControl_Cellular,, "\N7 -K1 -C0 -J1 -K1 -Q1 *H2"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N6 -K1 -C0 -J1 -K1 -Q1 *H2"
+
+[Modem13.AddReg] ;Toshiba UK PCMCIA modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem12.AddReg] ; T24DX based on T24D/F
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0 \V1<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Compression_Off,, "S46=136"
+
+[Modem11.AddReg] ; T24SL
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem10.AddReg] ; T144nw Toshiba Noteworthy T144NW PC Card
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+
+[Modem9.AddReg] ; T24NW
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+[Modem8.AddReg] ; T144PF4
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 \V2<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem7.AddReg] ; BC 14.400 - Canadian
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 \V2 &D2 &C1 S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem6.AddReg] ; T24M
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 &D2 &C1 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem5.AddReg] ; TPCV32BF (Psion Dacom)
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 S95=47<cr>"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 %%C3 -Q0 S46=138"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 %%C3 -Q0 S46=138"
+
+[Modem4.AddReg] ; T24D/F
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT &F E0 V1 &D2 &C1 S0=0 \V1<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Compression_Off,, "S46=136"
+
+[Modem3.AddReg] ; T144D/F
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 47,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 S0=0 \V1<cr>"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+
+[Modem2.AddReg] ; T144NWX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Init, 2,, "AT &F E0 V1 W2 &D2 &C1 \V2 S0=0<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 *H2 %%C3 -Q1 S46=138"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 *H2 %%C3 -Q1 S46=138"
+
+[Modem1.AddReg] ; NW144CR
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 W2 &D2 &C1 S95=47 S0=0<cr>"
+HKR, Settings, Compression_On,, "%%C1 S46=138"
+HKR, Settings, Compression_Off,, "%%C0 S46=136"
+HKR, Settings, Modulation_CCITT,, "B0 B15"
+HKR, Settings, Modulation_Bell,, "B1 B16"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, ErrorControl_Cellular,, "\N3 -K1 )M1 *H2 %%C1 -Q2 S46=138"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 -K1 )M1 *H2 %%C1 -Q2 S46=138""
+
+[Strings]
+Toshiba = "Toshiba"
+Modem13="Toshiba UK Advanced PCMCIA Modem" ; Psion model
+Modem12="Toshiba T24DX Modem" ; Similar to Modem4
+Modem11="Toshiba T24SL PCMCIA Modem" ; Same as Modem6
+Modem8 ="Toshiba T144PF4 PCMCIA Modem"
+Modem7 ="Toshiba BC 14.400 Fax-Data PCMCIA Modem" ; Toshiba of Canada Ltd.
+Modem6 ="Toshiba T24M Modem"
+Modem5 ="Toshiba TPCV32BF PCMCIA Modem" ;Psion Dacom
+Modem4 ="Toshiba T24D-F Modem"
+Modem3 ="Toshiba T144D-F Modem"
+
+Noteworthy = "Noteworthy"
+Modem14="Noteworthy 28.8, V.34 PCMCIA Modem"
+Modem10="Noteworthy T144NW PCMCIA Modem"
+Modem9 ="Noteworthy T24NW PCMCIA Modem"
+Modem2 ="Noteworthy T144NWX PCMCIA Modem"
+Modem1 ="Noteworthy NW144CR Cellular PCMCIA Modem"
+
+Kingston = "Kingston"
+Modem15="Kingston DataRex 14.4 PCMCIA Modem"
+
+; Common registry sections
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 0300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL-5", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 0300/REL-V.42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL-MNP-COMP", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/REL-LAPM-COMP", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 0300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-5", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-V.42", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-MNP-COMP", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL-LAPM-COMP", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-5", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-V.42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-MNP-COMP", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL-LAPM-COMP", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-5", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-V.42", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAPM", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-MNP-COMP", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL-LAPM-COMP", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-5", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-V.42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-MNP-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL-LAPM-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-5", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-V.42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-MNP-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL-LAPM-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-5", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-V.42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-MNP-COMP",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL-LAPM-COMP",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-5", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-V.42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-MNP-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL-LAPM-COMP", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-5", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-LAPM", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-V.42", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-MNP-COMP",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL-LAPM-COMP",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-5", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-V.42", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-MNP-COMP", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL-LAPM-COMP", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-5", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-V.42", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-MNP-COMP", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL-LAPM-COMP", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-5", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-V.42", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-MNP-COMP", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL-LAPM-COMP", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-5", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-V.42", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-MNP-COMP", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL-LAPM-COMP", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-5", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-V.42", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-MNP-COMP", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL-LAPM-COMP", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-5", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-LAPM", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-MNP-COMP", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL-V.42", 1, 02, 02, 40,38,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 14400/REL-LAPM-COMP", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL-5", 1, 02, 02, A0,41,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 16800/REL-MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL-LAPM", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL-V.42", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL-MNP-COMP", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL-LAPM-COMP", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-5", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-LAPM", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-V.42", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-MNP-COMP", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL-LAPM-COMP", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-5", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-REL-LAPM", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-V.42", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-MNP-COMP", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL-LAPM-COMP", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-5", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-LAPM", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-V.42", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-MNP-COMP", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL-LAPM-COMP", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-5", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-LAPM", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-V.42", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-LAPM-COMP", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL-MNP-COMP", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-5", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-LAPM", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-V.42", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL/VFC", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/VFC", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-MNP-COMP", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL-LAPM-COMP", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-5", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-LAPM", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-V.42", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL/VFC", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/VFC", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-LAPM-COMP", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL-MNP-COMP", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-5", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-LAPM", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-V.42", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL/VFC", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/VFC", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-MNP-COMP", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL-LAPM-COMP", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-5", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-LAPM", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-V.42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL/VFC", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/VFC", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-LAPM-COMP", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL-MNP-COMP", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL-5", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL-V.42", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 0300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/ETC", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP10", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtripl.inx b/private/unimodem/inf/mdmtripl.inx
new file mode 100644
index 000000000..c0c64ff72
--- /dev/null
+++ b/private/unimodem/inf/mdmtripl.inx
@@ -0,0 +1,240 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Triple P
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM84A9533B, UNIMODEMFD24EB57
+
+[Models]
+%Modem1% = Modem1, TripleP_Modem1, UNIMODEM84A9533B ; SL288F External
+%Modem2% = Modem2, TripleP_Modem2, UNIMODEM84A9533B ; SL288F PC-Card
+%Modem3% = Modem3, TripleP_Modem3, UNIMODEMFD24EB57 ; SL144.1F External
+%Modem4% = Modem4, TripleP_Modem4, UNIMODEMFD24EB57 ; SL144.1F PC-Card
+
+%Modem5% = Modem1, UNIMODEM84A9533B ; Generic SL288F External/PC-Card
+%Modem6% = Modem3, UNIMODEMFD24EB57 ; Generic SL144.1F External/PC-Card
+
+; Installation sections
+
+[Modem1] ; 28800 Fax Modem
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2] ; 28800 Fax Modem
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem3] ; SL 144.1F
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4] ; SL144.1F
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem1.AddReg] ; 28800 Fax Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem2.AddReg] ; 28800 Fax Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem3.AddReg] ; 14.4 External Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+[Modem4.AddReg] ; 14.4 Internal Modem
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 5a,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Triple P"
+
+Modem1 ="Triple-P SL288F External"
+Modem2 ="Triple-P SL288F PC-Card"
+Modem3 ="Triple-P SL144.1F External"
+Modem4 ="Triple-P SL144.1F PC-Card"
+
+Modem5 ="Triple-P SL288F"
+Modem6 ="Triple-P SL144.1F"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "&E0"
+HKR, Settings, SpeedNegotiation_On,, "&E1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf><cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/MNP COMPRESSED<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/MNP COMPRESSED<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/MNP COMPRESSED<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/MNP COMPRESSED<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/MNP COMPRESSED<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/MNP COMPRESSED<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/MNP COMPRESSED<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/MNP COMPRESSED<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/V42<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 115200/VBIS<cr><lf>", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+
+
diff --git a/private/unimodem/inf/mdmtron.inx b/private/unimodem/inf/mdmtron.inx
new file mode 100644
index 000000000..880a8756e
--- /dev/null
+++ b/private/unimodem/inf/mdmtron.inx
@@ -0,0 +1,432 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: TRON B.V. Datacommunicatie
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem1% = Modem1, Tron_Modem1
+%Modem2% = Modem2, UNIMODEMFD6F6F92
+%Modem3% = Modem3, UNIMODEMCA75DE31
+%Modem4% = Modem4, UNIMODEM4261CAA1
+%Modem5% = Modem5, Tron_Modem5
+%Modem6% = Modem6, Tron_Modem6
+%Modem7% = Modem7, Tron_Modem7
+%Modem8% = Modem8, UNIMODEM1244D510
+%Modem9% = Modem9, UNIMODEM24451AF7
+%Modem10% = Modem10, UNIMODEM1986E975
+
+; Installation sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, External
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, External
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "TRON"
+
+; Model strings
+
+Modem1="TRON FAXMODEM"
+Modem2="TRON QuaTron FM144"
+Modem3="TRON QuaTron FM14.4"
+Modem4="TRON DF14.4"
+Modem5="TRON QuaTron FMV14.4"
+Modem6="TRON VDF14.4"
+Modem7="TRON DF19.2"
+Modem8="TRON DF24.0"
+Modem9="TRON QuaTron FM28.8"
+Modem10="TRON DF28.8"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 S95=47<cr>"
+
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmtrust.inx b/private/unimodem/inf/mdmtrust.inx
new file mode 100644
index 000000000..477990308
--- /dev/null
+++ b/private/unimodem/inf/mdmtrust.inx
@@ -0,0 +1,397 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Trust Computer Products
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM5B621B5F
+
+[Models]
+%Modem1% = Modem1, Trust_Modem1, UNIMODEM0ADAAC9E
+%Modem1% = Modem1, UNIMODEM6BB96A00
+%Modem2% = Modem2, Trust_Modem2, UNIMODEM5B621B5F
+%Modem3% = Modem3, UNIMODEM1BCCBFC6
+%Modem4% = Modem2, UNIMODEM5B621B5F
+
+; Installation sections
+
+[Modem1]
+AddReg=All, Common, Modem1.AddReg, External
+
+[Modem2]
+AddReg=All, Common, Modem2.AddReg, External
+
+[Modem3]
+AddReg=All, Common, Modem3.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&F&C1E0&D2V1W2S95=47<cr>"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT&F2&C1&D2V1\V1S0=0\N6%%C1\J0E0<cr>"
+HKR, Settings, InactivityTimeout,, "\T<#>"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_On,, "\N6"
+HKR, Settings, ErrorControl_Forced,, "\N5"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT&F&C1E0&D2V1W2S95=47<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Responses, "2<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Trust"
+
+; Model strings
+
+Modem1="Trust AE1414"
+Modem2="Trust Communicator 28800"
+Modem3="Trust AC1414"
+Modem4="28800 V.34 Faxmodem" ; Generic Trust/Tornado
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7"
+HKR, Settings, Compression_Off,, "S46=136"
+HKR, Settings, Compression_On,, "S46=138"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmucom.inx b/private/unimodem/inf/mdmucom.inx
new file mode 100644
index 000000000..1f0edac98
--- /dev/null
+++ b/private/unimodem/inf/mdmucom.inx
@@ -0,0 +1,520 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Ucom AS (Nordic series)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem12% = Modem12, Ucom_Modem12 ; Nordic WM-3417CRN (V.34)
+%Modem11% = Modem11, Ucom_Modem11 ; Nordic WM-1414CRN (V.32bis)
+%Modem10% = Modem10, Ucom_Modem10 ; Nordic WM-3417ARN (V.34)
+%Modem9% = Modem9, Ucom_Modem9 ; Nordic WM-1414ARN (V.32bis)
+%Modem8% = Modem8, PCMCIA\ ; Nordic WM-3417CIA (V.34)
+%Modem8% = Modem8, Ucom_Modem8 ; Nordic WM-3417CIA (V.34)
+%Modem7% = Modem7, PCMCIA\ ; Nordic WM-1414CIA (V.32bis)
+%Modem7% = Modem7, Ucom_Modem7 ; Nordic WM-1414CIA (V.32bis)
+%Modem6% = Modem6, Ucom_Modem6 ; Nordic WM-3417CR (V.34)
+%Modem5% = Modem5, Ucom_Modem5 ; Nordic WM-2814CR (V.FC)
+%Modem4% = Modem4, Ucom_Modem4 ; Nordic WM-1414CR (V.32bis)
+%Modem3% = Modem3, UNIMODEMB4612582 ; Nordic WM-3417AR (V.34)
+%Modem2% = Modem2, UNIMODEMF4207C7E ; Nordic WM-2814AR (V.FC)
+%Modem1% = Modem1, UNIMODEM37DAE127 ; Nordic WM-1414AR (V.32bis)
+
+
+; Installation sections
+
+[Modem12] ; Nordic WM-3417CRN (V.34)
+AddReg=All, MfgAddReg, Modem12.AddReg, Internal
+
+[Modem11] ; Nordic WM-1414CRN (V.32bis)
+AddReg=All, MfgAddReg, Modem11.AddReg, Internal
+
+[Modem10] ; Nordic WM-3417ARN (V.34)
+AddReg=All, MfgAddReg, Modem10.AddReg, External
+
+[Modem9] ; Nordic WM-1414ARN (V.32bis)
+AddReg=All, MfgAddReg, Modem9.AddReg, External
+
+[Modem8] ; Nordic WM-3417CIA (V.34)
+AddReg=All, MfgAddReg, Modem8.AddReg, PCMCIA
+
+[Modem7] ; Nordic WM-1414CIA (V.32bis)
+AddReg=All, MfgAddReg, Modem7.AddReg, PCMCIA
+
+[Modem6] ; Nordic WM-3417CR (V.34)
+AddReg=All, MfgAddReg, Modem6.AddReg, Internal
+
+[Modem5] ; Nordic WM-2814CR (V.FC)
+AddReg=All, MfgAddReg, Modem5.AddReg, Internal
+
+[Modem4] ; Nordic WM-1414CR (V.32bis)
+AddReg=All, MfgAddReg, Modem4.AddReg, Internal
+
+[Modem3] ; Nordic WM-3417AR (V.34)
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; Nordic WM-2814AR (V.FC)
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; Nordic WM-1414AR (V.32bis)
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem12.AddReg] ; Nordic WM-3417CRN (V.34)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem11.AddReg] ; Nordic WM-1414CRN (V.32bis)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem10.AddReg] ; Nordic WM-3417ARN (V.34)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem9.AddReg] ; Nordic WM-1414ARN (V.32bis)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem8.AddReg] ; Nordic WM-3417CIA (V.34)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem7.AddReg] ; Nordic WM-1414CIA (V.32bis)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg] ; Nordic WM-3417CR (V.34)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem5.AddReg] ; Nordic WM-2814CR (V.FC)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4.AddReg] ; Nordic WM-1414CR (V.32bis)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg] ; Nordic WM-3417AR (V.34)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem2.AddReg] ; Nordic WM-2814AR (V.FC)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg] ; Nordic WM-1414AR (V.32bis)
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Ucom AS (Nordic series)"
+
+; Model strings
+
+Modem12="Ucom Nordic WM-3417CRN (V.34)"
+Modem11="Ucom Nordic WM-1414CRN (V.32bis)"
+Modem10="Ucom Nordic WM-3417ARN (V.34)"
+Modem9="Ucom Nordic WM-1414ARN (V.32bis)"
+Modem8="Ucom Nordic WM-3417CIA (V.34)"
+Modem7="Ucom Nordic WM-1414CIA (V.32bis)"
+Modem6="Ucom Nordic WM-3417CR (V.34)"
+Modem5="Ucom Nordic WM-2814CR (V.FC)"
+Modem4="Ucom Nordic WM-1414CR (V.32bis)"
+Modem3="Ucom Nordic WM-3417AR (V.34)"
+Modem2="Ucom Nordic WM-2814AR (V.FC)"
+Modem1="Ucom Nordic WM-1414AR (V.32bis)"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Init, 2,, "AT&FE0V1&C1&D2<cr>"
+HKR, Init, 3,, "AT&S0&R1-K0S0=0S6=3S7=60S95=47<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7"
+HKR, Settings, ErrorControl_Off,, "&Q5S36=3S48=7"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=128"
+HKR, Settings, Compression_On,, "S46=138%%C3"
+HKR, Settings, Compression_Off,, "S46=136%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "T"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1)M1"
+HKR, Settings, Cellular_Off,, "-K0)M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "19200"
+HKR, Fax, Class1FlowOff,, "&K0"
+HKR, Fax, Class1FlowHW,, "&K6"
+HKR, Fax, Class1FlowSW,, "&K4"
+HKR, Fax, Class2FlowOff,, "&K0"
+HKR, Fax, Class2FlowHW,, "&K6"
+HKR, Fax, Class2FlowSW,, "&K4"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,c2,01,00, 00,00,00,00
+HKR, Responses, "22<cr>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "24<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "40<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "45<cr>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "59<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "61<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "62<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FC<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmusrcr.inx b/private/unimodem/inf/mdmusrcr.inx
new file mode 100644
index 000000000..9a2e72d3b
--- /dev/null
+++ b/private/unimodem/inf/mdmusrcr.inx
@@ -0,0 +1,899 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: U.S. Robotics, Inc. (Courier)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMB8355EDC ; V.Everything, V.34 Ready
+ExcludeFromSelect=UNIMODEMA388E589 ; V.Everything, Dual Standard V.34 Fax
+ExcludeFromSelect=PCMCIA\USROBOTICS-PCMCIA_28800_DATA/FAX-92A2 ; Sportster, Courier PCMCIA
+ExcludeFromSelect=*USR0009
+ExcludeFromSelect=SERENUM\USR0100
+ExcludeFromSelect=UNIMODEM3BFBF0AE ; V.Everything internal or external
+
+[Modem36.NoResDup]
+UNIMODEM3BFBF0AE
+
+[Modem35.PosDup]
+*PNP0500
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem38% = Modem38, PCMCIA\USROBOTICS-PCMCIA_V.Everything-3D75 ;Courier V.Everything (PC-Card) PCMCIA
+%Modem38% = Modem38, UNIMODEMD901726F ;Courier V.Everything (PC-Card) PCMCIA
+%Modem38% = Modem38, UNIMODEM215748DF ;Courier V.Everything (PC-Card) PCMCIA
+%Modem37% = Modem29, UNIMODEMDBE8D9C0 ;Total Control Quad V.34 Rack
+
+%Modem36PNP% = Modem36, SERENUM\USR0100 ; V.Everything external
+%Modem36% = Modem36, USRCR_Modem36, UNIMODEM3BFBF0AE ; V.Everything external
+%Modem36GEN% = Modem36, UNIMODEM3BFBF0AE ; combo V.Everything internal or external
+
+%Modem35PNP% = Modem35, *USR0009 ; V.Everything internal ISAPNP
+%Modem35% = Modem35, USRCR_Modem35, UNIMODEM3BFBF0AE ; V.Everything internal ISAPNP
+
+%Modem34% = Modem33, PCMCIA\USROBOTICS-PCMCIA_28800_DATA/FAX-92A2 ; U.S. Robotics 28.8 PCMCIA Modem
+%Modem33% = Modem33, USRCR_Modem33, PCMCIA\USROBOTICS-PCMCIA_28800_DATA/FAX-92A2 ; Courier 28.8 Dual Standard Data-Fax PCMCIA
+%Modem33% = Modem33, UNIMODEMB23CEDA2 ; Courier 28.8 Dual Standard Data-Fax PCMCIA
+%Modem32% = Modem29, UNIMODEMA388E589 ;V.Everything, Dual Standard V.34 Fax
+%Modem32% = Modem29, UNIMODEM8EAAB5CB ;V.Everything, Dual Standard V.34 Fax
+%Modem31% = Modem23, USRCR_Modem31, UNIMODEMA388E589 ;Dual Standard V.34 Fax
+%Modem30% = Modem24, UNIMODEMB8355EDC ;External Courier Dual Standard V.34 or V.Everything
+%Modem29% = Modem24, UNIMODEM2347FF16 ;External Courier V.32 V.FC Fax
+%Modem28% = Modem28, UNIMODEM1D65693C ;External Courier 2400
+%Modem28% = Modem28, UNIMODEM127AE5E2 ;External Courier 2400
+%Modem27% = Modem27, UNIMODEM39ED6288 ;External Courier HST dual standard with v.32bis and ASL
+%Modem27% = Modem27, UNIMODEM3A2CF0D8 ;External Courier HST dual standard with v.32bis and ASL
+%Modem26% = Modem26, UNIMODEM730CFDCE ;External Courier V32bis with ASL
+%Modem26% = Modem26, UNIMODEM6D63BB30 ;External Courier V32bis with ASL
+%Modem26% = Modem26, UNIMODEMA6C7E9DE ;External Courier V32bis with ASL
+%Modem26% = Modem26, UNIMODEM565BEC06 ;External Courier V32bis with ASL
+%Modem25% = Modem25, UNIMODEMF399F4C4 ;External courier HST dual std with fax and ASL
+%Modem25% = Modem25, UNIMODEM7E55AE17 ;External courier HST dual std with fax and ASL
+%Modem24% = Modem24, UNIMODEM7C587E53 ;External Courier V.34 Ready
+%Modem24% = Modem24, UNIMODEM5C45417B ;External Courier V.34 Ready - retail model before flash upgrade
+%Modem24% = Modem24, USRCR_Modem24, UNIMODEMB8355EDC ;External Courier V.34
+%Modem23% = Modem29, USRCR_Modem23, UNIMODEMA388E589 ;External Courier V.Everything - after flash upgrade
+%Modem23% = Modem23, UNIMODEM1252C879 ;External Courier V.Everything
+%Modem23% = Modem23, USRCR_Modem23, UNIMODEMB8355EDC ;External Courier V.Everything
+%Modem22% = Modem22, USRCR_Modem22 ;Internal Courier Terbo V32bis Fax PC
+%Modem21% = Modem21, UNIMODEM2A860703 ;External Courier Terbo V32bis Fax
+%Modem20% = Modem20, USRCR_Modem20 ;Internal Courier Terbo Dual Standard Fax PC
+%Modem19% = Modem19, USRCR_Modem19 ;Internal Courier 14,400 Dual Standard PC
+%Modem18% = Modem18, UNIMODEMF537198E ;External Courier 14,400 Dual Standard
+%Modem18% = Modem18, UNIMODEM439612CB ;External Courier 14,400 Dual Standard
+%Modem17% = Modem17, USRCR_Modem17 ;Internal Courier 9600 V32 PC
+%Modem16% = Modem16, UNIMODEMAA889B79 ;External Courier 9600 V32
+%Modem15% = Modem15, USRCR_Modem15 ;Internal Courier 9600 HST PC
+%Modem14% = Modem14, UNIMODEM3885B225 ;External Courier 9600 HST
+%Modem13% = Modem13, USRCR_Modem13 ;Internal Courier 2400 V42bis PC
+%Modem12% = Modem12, UNIMODEMCBBE6746 ;External Courier 2400 V42bis
+%Modem11% = Modem11, USRCR_Modem11 ;Internal Courier 16,800 HST PC
+%Modem10% = Modem10, USRCR_Modem10 ;External Courier 16,800 HST
+%Modem9% = Modem9, USRCR_Modem9 ;Internal Courier 16,800 Dual Standard Fax PC
+%Modem8% = Modem8, UNIMODEM6B0563D5 ;External Courier 16,800 Dual Standard Fax
+%Modem7% = Modem7, USRCR_Modem7 ;Internal Courier 14,400 V32bis-V42bis PC
+%Modem6% = Modem6, UNIMODEM8842E37F ;External Courier V32bis-V42bis
+%Modem5% = Modem5, UNIMODEM6FA02081 ;Internal Courier 14,400 HST PC
+%Modem4% = Modem4, USRCR_Modem4 ;External Courier 14,400 HST
+%Modem3% = Modem3, USRCR_Modem3 ;Internal Courier 14,400 V32bis FAX PC
+%Modem2% = Modem2, USRCR_Modem2 ;External Courier 14,400 V32bis FAX
+%Modem1% = Modem1, UNIMODEMB2FDE7A6 ;External Courier Terbo Dual Standard Fax
+
+; Installation sections
+
+[Modem38]
+AddReg= All, MfgAddReg, Fast, Modem38.AddReg, Verbose, PCMCIA
+
+[Modem36]
+AddReg = All, MfgAddReg, Fast, Modem35.AddReg, Verbose, External
+
+[Modem35]
+AddReg = All, MfgAddReg, Fast, Modem35.AddReg, Verbose, Internal
+
+[Modem33]
+AddReg=All, MfgAddReg, Fast, Modem33.AddReg, Verbose, PCMCIA
+
+[Modem29]
+AddReg=All, MfgAddReg, Fast, Modem29.AddReg, Verbose, External
+
+[Modem28]
+AddReg=All, MfgAddReg, Modem28.AddReg, Verbose, External
+
+[Modem27]
+AddReg=All, MfgAddReg, Modem27.AddReg, Verbose, External
+
+[Modem26]
+AddReg=All, MfgAddReg, Modem26.AddReg, Verbose, External
+
+[Modem25]
+AddReg=All, MfgAddReg, Modem25.AddReg, Verbose, External
+
+[Modem24]
+AddReg=All, MfgAddReg, Fast, Modem24.AddReg, Verbose, External
+
+[Modem23]
+AddReg=All, MfgAddReg, Fast, Modem23.AddReg, Verbose, External
+
+[Modem22]
+AddReg=All, MfgAddReg, Modem22.AddReg, Verbose, Internal
+
+[Modem21]
+AddReg=All, MfgAddReg, Modem21.AddReg, Verbose, External
+
+[Modem20]
+AddReg=All, MfgAddReg, Modem20.AddReg, Verbose, Internal
+
+[Modem19]
+AddReg=All, MfgAddReg, Modem19.AddReg, Verbose, Internal
+
+[Modem18]
+AddReg=All, MfgAddReg, Modem18.AddReg, Verbose, External
+
+[Modem17]
+AddReg=All, MfgAddReg, Modem17.AddReg, Verbose, Internal
+
+[Modem16]
+AddReg=All, MfgAddReg, Modem16.AddReg, Verbose, External
+
+[Modem15]
+AddReg=All, MfgAddReg, Modem15.AddReg, Verbose, Internal
+
+[Modem14]
+AddReg=All, MfgAddReg, Modem14.AddReg, Verbose, External
+
+[Modem13]
+AddReg=All, MfgAddReg, Modem13.AddReg, Verbose, Internal
+
+[Modem12]
+AddReg=All, MfgAddReg, Modem12.AddReg, Verbose, External
+
+[Modem11]
+AddReg=All, MfgAddReg, Modem11.AddReg, Verbose, Internal
+
+[Modem10]
+AddReg=All, MfgAddReg, Modem10.AddReg, Verbose, External
+
+[Modem9]
+AddReg=All, MfgAddReg, Modem9.AddReg, Verbose, Internal
+
+[Modem8]
+AddReg=All, MfgAddReg, Modem8.AddReg, Verbose, External
+
+[Modem7]
+AddReg=All, MfgAddReg, Modem7.AddReg, Verbose, Internal
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem6.AddReg, Verbose, External
+
+[Modem5]
+AddReg=All, MfgAddReg, Modem5.AddReg, Verbose, Internal
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, Verbose, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, Verbose, Internal
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Verbose, External
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, Verbose, External
+
+
+; AddReg sections
+
+[Modem38.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 07,00,00,00, 0F,00,00,00, 77,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem35.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, FF,00,00,00, 00,00,00,00, 0F,00,00,00, 77,03,00,00, 00,C2,01,00, 40,83,00,00
+
+[Modem33.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem29.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "&M4 &L2 S10=30"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&M5 &L2 S10=30"
+HKR, Settings, DialSuffix,, ""
+
+[Modem28.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem27.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem26.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem25.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, a0,41,00,00
+
+[Modem24.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "&M4 &L2 S10=30"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&M5 &L2 S10=30"
+
+[Modem23.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, ErrorControl_Cellular,, "&M4 &L2 S10=30"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&M5 &L2 S10=30"
+
+[Modem22.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 60,54,00,00
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 60,54,00,00
+
+[Modem20.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 60,54,00,00
+HKR, Settings, ErrorControl_Cellular,, "&M4 &L2 S10=30"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&M5 &L2 S10=30"
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem18.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem17.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 80,25,00,00
+
+[Modem13.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 80,25,00,00, 60,09,00,00
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, a0,41,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, a0,41,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, a0,41,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, a0,41,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,96,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 3f,03,00,00, 00,c2,01,00, 60,54,00,00
+HKR, Settings, ErrorControl_Cellular,, "&M4 &L2 S10=30"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&M5 &L2 S10=30"
+
+
+[Strings]
+Mfg = "U.S. Robotics, Inc."
+
+Modem38="Courier V.Everything PCMCIA"
+Modem37="Total Control Quad V.34 card"
+
+Modem36PNP="Courier V.Everything External Plug & Play"
+Modem36="Courier V.Everything External"
+Modem36GEN="Courier V.Everything" ; combo V.Everything internal or external
+
+Modem35PNP="Courier V.Everything Internal Plug & Play"
+Modem35="Courier V.Everything Internal"
+
+Modem34="U.S. Robotics 28.8 PCMCIA Modem"
+Modem33="Courier 28.8 Dual Standard Data-Fax PCMCIA"
+Modem32="Courier V.34 Data Fax Modem"
+Modem31="Courier Dual Standard V.34 Fax"
+Modem30="Courier Dual Standard V.34 or V.Everything"
+Modem29="Courier V.32bis V.FC Fax"
+Modem28="Courier 2400"
+Modem27="Courier HST Dual Standard V.32bis+ASL"
+Modem26="Courier V32bis with ASL"
+Modem25="Courier HST Dual Standard Fax+ASL"
+Modem24="Courier Dual Standard V.34 Ready Fax"
+Modem23="Courier HST Dual Standard Fax+ASL+Cell"
+Modem22="Courier Terbo V32bis Fax PC"
+Modem21="Courier Terbo V32bis Fax"
+Modem20="Courier Terbo Dual Standard Fax PC"
+Modem19="Courier 14,400 Dual Standard PC"
+Modem18="Courier 14,400 Dual Standard"
+Modem17="Courier 9600 V32 PC"
+Modem16="Courier 9600 V32"
+Modem15="Courier 9600 HST PC"
+Modem14="Courier 9600 HST"
+Modem13="Courier 2400 V42bis PC"
+Modem12="Courier 2400 V42bis"
+Modem11="Courier 16,800 HST PC"
+Modem10="Courier 16,800 HST"
+Modem9 ="Courier 16,800 Dual Standard Fax PC"
+Modem8 ="Courier 16,800 Dual Standard Fax"
+Modem7 ="Courier 14,400 V32bis-V42bis PC"
+Modem6 ="Courier V32bis-V42bis"
+Modem5 ="Courier 14,400 HST PC"
+Modem4 ="Courier 14,400 HST"
+Modem3 ="Courier 14,400 V32bis Fax PC"
+Modem2 ="Courier 14,400 V32bis Fax"
+Modem1 ="Courier Terbo Dual Standard Fax"
+
+; Common sections
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "ATE0Q0V1<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&F&B1&C1&D2&M4&K1E0Q0V1&A3<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Fast]
+HKR, Init, 2,, "AT&F1&B1&C1&D2E0Q0V1&A3S0=0<cr>"
+
+[Verbose]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR,Responses,"<cr><lf>BUSY<cr><lf>",1,06,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO ANSWER<cr><lf>",1,07,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO CARRIER<cr><lf>",1,04,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIAL TONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIALTONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RING<cr><lf>",1,08,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RINGING<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>VOICE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CONNECT<cr><lf>",1,02,00,00,00,00,00,00,00,00,00
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/NONE<cr><lf>",1,2,0,B0,04,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/V34/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/HST/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V32/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V34/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/HST/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V32/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V34/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/HST/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V32/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V34/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/HST/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V32/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V34/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/VFC/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/HST/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V32/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V34/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/VFC/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/HST/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V32/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V34/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/VFC/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V32/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V34/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/VFC/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V32/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V34/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/VFC/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/V34/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/VFC/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/V34/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/VFC/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/V34/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/VFC/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/MNP<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/MNP<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/MNP<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/MNP<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/MNP<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/MNP<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/MNP<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/MNP<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/V34/NONE<cr><lf>",1,2,0,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/VFC/NONE<cr><lf>",1,2,0,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/V34/NONE<cr><lf>",1,2,0,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/VFC/NONE<cr><lf>",1,2,0,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
diff --git a/private/unimodem/inf/mdmusrf.inx b/private/unimodem/inf/mdmusrf.inx
new file mode 100644
index 000000000..9be470e90
--- /dev/null
+++ b/private/unimodem/inf/mdmusrf.inx
@@ -0,0 +1,392 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: US Robotics (France)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem5% = Modem3, UNIMODEM2964D7B6
+%Modem4% = Modem4, USRF_Modem4
+%Modem3% = Modem3,,UNIMODEMF910BD97
+%Modem2% = Modem2, USRF_Modem2
+%Modem1% = Modem1, USRF_Modem1, UNIMODEM72850D79
+%Modem1% = Modem1, PCMCIA\INTEL-MODEM_2400+-9E9E
+
+; Installation sections
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem4.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,07,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,07,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "U.S. Robotics (France)"
+
+; Model strings
+
+Modem5="Worldport Lite 9600"
+Modem4="Worldport Lite 2400"
+Modem3="Worldport Lite 14400"
+Modem2="Worldport 2496 PCMCIA"
+Modem1="Worldport 14400 PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 1,, "ATE0Q0V1<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "S48=7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1"
+HKR, Settings, Compression_On,, "%%C1S46=138"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Modulation_CCITT_V23,, "S34=8"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmusrg.inx b/private/unimodem/inf/mdmusrg.inx
new file mode 100644
index 000000000..cadfa366d
--- /dev/null
+++ b/private/unimodem/inf/mdmusrg.inx
@@ -0,0 +1,428 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: U.S.Robotics, Inc. (German)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem20%=Modem20 ;Sportster 14400 FAX German Version internal
+%Modem19%=Modem19, UNIMODEMBB5075AE ;Sportster 14400 FAX German Version external
+
+; Installation sections
+
+[Modem19]
+AddReg=All, USRSP, Modem19.AddReg, Verbose, External
+
+[Modem20]
+AddReg=All, USRSP, Modem19.AddReg, Verbose, internal
+
+; AddReg sections
+
+[Modem19.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 07,00,00,00
+HKR, Init, 2,, "AT&FE1V1&A3&S0<cr>"
+HKR, Settings, FlowControl_Off,, "&H0&B0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&B1&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&B1&I2&R1"
+
+[Strings]
+ClassName = "Modem"
+Mfg = "U.S. Robotics (Ger)"
+
+Modem19="Sportster 14400 FAX extern"
+Modem20="Sportster 14400 FAX intern"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "ATE0Q0V1<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+
+[USRSP]
+HKR, Init, 2,, "AT&FE1V1&A3&B1&D2&S0<cr>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Verbose]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR,Responses,"<cr><lf>BUSY<cr><lf>",1,06,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO ANSWER<cr><lf>",1,07,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO CARRIER<cr><lf>",1,04,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIAL TONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RING<cr><lf>",1,08,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RINGING<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>VOICE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CONNECT<cr><lf>",1,02,00,00,00,00,00,00,00,00,00
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/NONE<cr><lf>",1,2,0,B0,04,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/V34/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/HST/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V32/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V34/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/HST/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V32/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V34/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/HST/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V32/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V34/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/HST/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V32/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V34/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/VFC/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/HST/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V32/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V34/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/VFC/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V32/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V34/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/VFC/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V32/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V34/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/VFC/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/V34/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/VFC/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/V34/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/VFC/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/V34/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/VFC/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,A0,41,00,0,0,0,0,0
diff --git a/private/unimodem/inf/mdmusrsp.inx b/private/unimodem/inf/mdmusrsp.inx
new file mode 100644
index 000000000..3688313a3
--- /dev/null
+++ b/private/unimodem/inf/mdmusrsp.inx
@@ -0,0 +1,786 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: U.S.Robotics, Inc. (Sportster)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%USR%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM5A28D161
+ExcludeFromSelect=SERENUM\USR0000 ; Sportster 14.4 PNP
+ExcludeFromSelect=UNIMODEM7E803A35 ; Sportster 14.4 PNP
+ExcludeFromSelect=UNIMODEMD21C6D4A ; Sportster 14.4 PNP
+ExcludeFromSelect=SERENUM\USR0011 ;Sportster 28.8 internal
+
+[Modem3a.NoResDup]
+UNIMODEM7E803A35,UNIMODEMD21C6D4A
+
+[Modem28.NoResDup]
+UNIMODEM7A1BB094
+
+[Manufacturer]
+%USR% = USR
+%DEC% = DEC
+
+[DEC]
+%Modem22% = Modem17, PCMCIA\DIGITAL-PCMCIA_28_800_V.34_FAX-8FAF
+%Modem22% = Modem17, UNIMODEMF72FBA02
+%Modem21% = Modem18, PCMCIA\DIGITAL-PCMCIA_V.32BIS_14_400_FAX-DDAE
+
+[USR]
+%Modem28PNP% = Modem28, SERENUM\USR0011 ;Sportster 28800 V.34, internal
+%Modem28% = Modem28, SERENUM\USR0011 ;Sportster 28800 V.34, internal
+%Modem28% = Modem28, UNIMODEM7A1BB094 ;Sportster 28800 V.34, internal
+%Modem28% = Modem28, UNIMODEM2CA175B7 ;Sportster 28800 V.34, internal
+
+; %Modem27% = Modem19, UNIMODEMB7A2ED54 ; severe interop bug -- unsupported
+%Modem26% = Modem26, UNIMODEM803D22C8 ; sportster 28800 33600
+%Modem26% = Modem26, UNIMODEM2095B40E ; sportster 28800 33600
+%Modem26% = Modem26, UNIMODEM7ABE8C8F ; sportster 28800 33600
+
+%Modem25% = Modem3a, UNIMODEMD21C6D4A
+%Modem24% = Modem24, UNIMODEM7E803A35
+%Modem23% = Modem16, UNIMODEME76319A1 ;Sportster 28800 (Sweden)
+%Modem23% = Modem16, UNIMODEMD93AA044 ;Sportster 28800 (Sweden)
+%Modem20% = Modem16, UNIMODEM5A28D161 ;Sportster 28800 V.34, internal+external combo
+%Modem19% = Modem19, USRSP_Modem19, UNIMODEM5A28D161 ;Sportster 28800 V.34, internal
+%Modem18% = Modem18, PCMCIA\USROBOTICS-PCMCIA_14_400_FAX-552B ;Sportster 14400 PCMCIA
+%Modem18% = Modem18, PCMCIA\USROBOTICS-PCMCIA_14_400_FAX-B4EC ;Sportster 14400 PCMCIA
+%Modem17% = Modem17, USRSP_Modem17, PCMCIA\USROBOTICS-PCMCIA_28800_DATA/FAX-92A2 ;Sportster 28800 PCMCIA V.34
+%Modem17% = Modem17, UNIMODEM779AF855 ;Sportster 28800 PCMCIA V.34
+%Modem17% = Modem17, UNIMODEMD1EA1E5F ;Sportster 28800 PCMCIA V.34
+%Modem17% = Modem17, UNIMODEM402CE3B6 ;Sportster 28800 PCMCIA V.34
+%Modem16% = Modem16, USRSP_Modem16, UNIMODEMD687E7EB ;Sportster 28800 V.34, external
+%Modem16% = Modem16, USRSP_Modem16, UNIMODEM5A28D161 ;Sportster 28800 V.34, external
+%Modem16% = Modem16, UNIMODEM16ADA0B2 ;Sportster 28800 V.FC
+%Modem15% = Modem15, USRSP_Modem15 ;Sportster 1200
+%Modem14% = Modem14, USRSP_Modem14 ;Sportster 9600 V.42bis
+%Modem12% = Modem12, UNIMODEMDF0B7023 ;Sportster 9600 FAX or FAX PC
+%Modem12% = Modem12, UNIMODEM24AB465A ;Sportster 9600 FAX
+%Modem12% = Modem12, UNIMODEM1FA45BF3 ;Sportster 9600 FAX
+%Modem11% = Modem11, USRSP_Modem11 ;Sportster 2400 V.42bis PC
+%Modem10% = Modem10, USRSP_Modem10 ;Sportster 2400 V.42bis
+%Modem9% = Modem9, USRSP_Modem9 ;Sportster 2400 PC
+%Modem8% = Modem8, USRSP_Modem8 ;Sportster 2400 V.42bis FAX PC
+%Modem7% = Modem7, USRSP_Modem7 ;Sportster 2400 V.42bis FAX
+%Modem6% = Modem6, UNIMODEM95B0CA3B ;Sportster 2400
+%Modem6% = Modem6, UNIMODEMB37584C1 ;Sportster 2400
+%Modem5% = Modem5, USRSP_Modem5, UNIMODEM04D8823C ;Sportster 14400 V.42bis PC
+%Modem5% = Modem5, UNIMODEMEF29BFC0 ;Sportster 14400 V.42bis PC
+%Modem4% = Modem4, UNIMODEM04D8823C ;Sportster 14400 V.42bis
+%Modem3% = Modem3, USRSP_Modem3, UNIMODEM1F3959B0 ;Sportster 14400 FAX PC
+%Modem3% = Modem3, UNIMODEMA5325AF2 ;Sportster 14400 FAX PC
+%Modem3% = Modem3, UNIMODEM193EC3D3 ;Sportster 14400 FAX PC
+%Modem3% = Modem3, USRSP_Modem3, UNIMODEMD21C6D4A ;Sportster 14400 FAX PC
+%Modem3aPNP%=Modem3a, SERENUM\USR0000 ;Sportster 14400 FAX PC
+%Modem3a% = Modem3a, USRSP_Modem3a, UNIMODEM7E803A35 ;Sportster 14400 FAX PC
+%Modem3a% = Modem3a, USRSP_Modem3a, UNIMODEMD21C6D4A ;Sportster 14400 FAX PC
+%Modem2% = Modem2, UNIMODEM1F3959B0 ;Sportster 14400 FAX
+%Modem2% = Modem2, UNIMODEM7D0826A0 ;Sportster 14400 FAX
+%Modem2% = Modem2, UNIMODEM95E330DC ;Sportster 14400 FAX
+%Modem2% = Modem2, UNIMODEM669F6622 ;Sportster 14400 FAX
+%Modem2% = Modem2, USRSP_Modem2, UNIMODEM7E803A35 ;Sportster 14400 FAX
+%Modem2% = Modem2, UNIMODEMB3543CE1 ;Sportster 14400 FAX, Swedish
+%Modem1% = Modem1, USRSP_Modem1 ;Sportster 9600 V.42bis PC
+
+; Installation sections
+
+[Modem28]
+AddReg=All, USRSP, Fast, Modem28.AddReg, Verbose, Internal
+
+[Modem26]
+AddReg=All, USRSP, Fast, Modem28.AddReg, Verbose, External
+
+[Modem24]
+AddReg=All, USRSP, Modem3a.AddReg, Verbose, External
+
+[Modem19]
+AddReg=All, USRSP, Fast, Modem16.AddReg, Verbose, Internal
+
+[Modem18]
+AddReg=All, USRSP, Modem2.AddReg, Verbose, PCMCIA
+
+[Modem17]
+AddReg=All, USRSP, Fast, Modem16.AddReg, Verbose, PCMCIA
+
+[Modem16]
+AddReg=All, USRSP, Fast, Modem16.AddReg, Verbose, External
+
+[Modem15]
+AddReg=All, USRSP, Modem15.AddReg, Verbose, External
+
+[Modem14]
+AddReg=All, USRSP, Modem14.AddReg, Verbose, External
+
+[Modem12]
+AddReg=All, USRSP, Modem12.AddReg, Verbose, External
+
+[Modem11]
+AddReg=All, USRSP, Modem11.AddReg, Verbose, Internal
+
+[Modem10]
+AddReg=All, USRSP, Modem10.AddReg, Verbose, External
+
+[Modem9]
+AddReg=All, USRSP, Modem9.AddReg, Verbose, Internal
+
+[Modem8]
+AddReg=All, USRSP, Modem8.AddReg, Verbose, Internal
+
+[Modem7]
+AddReg=All, USRSP, Modem7.AddReg, Verbose, External
+
+[Modem6]
+AddReg=All, USRSP, Modem6.AddReg, Verbose, External
+
+[Modem5]
+AddReg=All, USRSP, Modem5.AddReg, Verbose, Internal
+
+[Modem4]
+AddReg=All, USRSP, Modem4.AddReg, Verbose, External
+
+[Modem3]
+AddReg=All, USRSP, Modem3.AddReg, Verbose, Internal
+
+[Modem3a]
+AddReg=All, USRSP, Modem3a.AddReg, Verbose, Internal
+
+[Modem2]
+AddReg=All, USRSP, Modem2.AddReg, Verbose, External
+
+[Modem1]
+AddReg=All, USRSP, Modem1.AddReg, Verbose, Internal
+
+; AddReg sections
+
+[Modem28.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,83,00,00
+HKR, Settings, DialSuffix,, ""
+HKR,, CompatibilityFlags, 1, 01,00,00,00
+
+
+[Modem16.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, b0,04,00,00, b0,04,00,00
+
+[Modem14.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem12.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem10.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem9.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem8.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem7.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem5.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3a.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 80,25,00,00
+
+[Strings]
+DEC = "Digital Equipment Corporation"
+Modem22="DEC 28.8, V.34 Data Fax PCMCIA"
+Modem21="DEC 14.4 Data Fax PCMCIA"
+
+USR = "U.S. Robotics, Inc."
+
+Modem28PNP="Sportster 28800-33600 Internal Plug & Play"
+Modem28="Sportster 28800-33600 Internal"
+; Modem27="Sportster VI 28000 Data Fax Voice" ; not supported -- interop probs.
+Modem26="Sportster 28800-33600 External"
+Modem25="Sportster 14400 Fax PC"
+Modem24="Sportster 14400 Fax"
+Modem23="Sportster 28800 (Sweden)"
+Modem20="Sportster 28800"
+Modem19="Sportster 28800 Internal"
+Modem18="Sportster 14400 PCMCIA"
+Modem17="Sportster 28800 PCMCIA"
+Modem16="Sportster 28800 External"
+Modem15="Sportster 1200"
+Modem14="Sportster 9600 V.42bis"
+Modem12="Sportster 9600 Fax"
+Modem11="Sportster 2400 V.42bis PC" ; EXAR
+Modem10="Sportster 2400 V.42bis" ; EXAR
+Modem9 ="Sportster 2400 PC" ; EXAR
+Modem8 ="Sportster 2400 V.42bis Fax PC" ; EXAR
+Modem7 ="Sportster 2400 V.42bis Fax" ; EXAR
+Modem6 ="Sportster 2400" ; EXAR
+Modem5 ="Sportster 14400 V.42bis PC"
+Modem4 ="Sportster 14400 V.42bis"
+Modem3 ="Sportster 14400 Fax PC"
+Modem3aPNP = "Sportster 14400 Fax PC Plug & Play"
+Modem3a="Sportster 14400 Fax PC"
+Modem2 ="Sportster 14400 Fax"
+Modem1 ="Sportster 9600 V.42bis PC"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "ATE0Q0V1<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[External]
+HKR,, DeviceType, 1, 01
+
+[Internal]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[USRSP]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FE0V1&A3&B1&D2&S0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Fast]
+HKR, Init, 2,, "AT &F1 E0 V1 &C1 &D2 Q0 S0=0 &B1 &A3<cr>"
+
+[Verbose]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR,Responses,"<cr><lf>BUSY<cr><lf>",1,06,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO ANSWER<cr><lf>",1,07,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO CARRIER<cr><lf>",1,04,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIAL TONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RING<cr><lf>",1,08,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RINGING<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>VOICE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CONNECT<cr><lf>",1,02,00,00,00,00,00,00,00,00,00
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/NONE<cr><lf>",1,2,0,B0,04,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/V34/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/HST/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V32/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V34/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/HST/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V32/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V34/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/HST/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V32/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V34/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/HST/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V32/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V34/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/VFC/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/HST/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V32/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V34/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/VFC/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/HST/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V32/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V34/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/VFC/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V32/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V34/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/VFC/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V32/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V34/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/VFC/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/V34/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/VFC/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/V34/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/VFC/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/V34/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/VFC/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/V34/NONE<cr><lf>",1,2,0,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/VFC/NONE<cr><lf>",1,2,0,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/V34/NONE<cr><lf>",1,2,0,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/VFC/NONE<cr><lf>",1,2,0,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+
+
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/MNP<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/MNP<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/MNP<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/MNP<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/MNP<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/MNP<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/MNP<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
diff --git a/private/unimodem/inf/mdmusrwp.inx b/private/unimodem/inf/mdmusrwp.inx
new file mode 100644
index 000000000..4b793d5ff
--- /dev/null
+++ b/private/unimodem/inf/mdmusrwp.inx
@@ -0,0 +1,848 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: U.S. Robotics, Inc.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem12% = Modem12, PCMCIA\USROBOTICS-PCMCIA_16_800_DUAL_STANDARD_FAX_VOICE-5B49
+%Modem11% = Modem11, USRWP_Modem11
+%Modem10% = Modem10, USRWP_Modem10
+%Modem9% = Modem9, USRWP_Modem9
+%Modem8% = Modem8, USRWP_Modem8
+%Modem7% = Modem7, USRWP_Modem7
+%Modem6% = Modem6, USRWP_Modem6
+%Modem5% = Modem5, USRWP_Modem5
+%Modem4% = Modem4, USRWP_Modem4
+%Modem3a% = Modem3a, UNIMODEM72850D79 ; USR and Rockwell common command set
+%Modem3a% = Modem3a, USRWP_Modem3a, PCMCIA\INTEL-MODEM_2400+-9E9E ; USR and Rockwell common command set
+%Modem3a% = Modem3a, USRWP_Modem3a, PCMCIA\INTEL-MODEM_2400+-B767 ; USR and Rockwell common command set
+%Modem3b% = Modem3b, USRWP_Modem3b,,PCMCIA\INTEL-MODEM_2400+-9E9E ; USR command set
+%Modem3b% = Modem3b, USRWP_Modem3b,,PCMCIA\INTEL-MODEM_2400+-B767 ; USR command set
+%Modem3b% = Modem3b, PCMCIA\USROBOTICS-PCMCIA_14_400_FAX-9F98 ; USR command set
+%Modem3b% = Modem3b, UNIMODEM4BDB6D03 ; USR command set
+%Modem3c% = Modem3c, USRWP_Modem3c,,PCMCIA\INTEL-MODEM_2400+-9E9E ; Rockwell command set
+%Modem3c% = Modem3c, USRWP_Modem3c,,PCMCIA\INTEL-MODEM_2400+-B767 ; Rockwell command set
+%Modem2% = Modem2, UNIMODEMFF115759
+%Modem2% = Modem2, UNIMODEM0831EA7C
+%Modem1% = Modem1, USRWP_Modem1
+
+; Installation sections
+
+[Modem12]
+AddReg=All, USRWP, Modem12.AddReg
+
+[Modem11]
+AddReg=All, USRWP, Modem11.AddReg
+
+[Modem10]
+AddReg=All, USRWP, Modem10.AddReg
+
+[Modem9]
+AddReg=All, USRWP, Modem9.AddReg
+
+[Modem8]
+AddReg=All, USRWP, Modem8.AddReg
+
+[Modem7]
+AddReg=All, USRWP, Modem7.AddReg
+
+[Modem6]
+AddReg=All, USRWP, Modem6.AddReg
+
+[Modem5]
+AddReg=All, USRWP, Modem5.AddReg
+
+[Modem4]
+AddReg=All, USRWP, Modem4.AddReg
+
+[Modem3c]
+AddReg=All, USRWP, Modem3c.AddReg
+
+[Modem3b]
+AddReg=All, USRWP, Modem3b.AddReg
+
+[Modem3a]
+AddReg=All, USRWP, Modem3a.AddReg
+
+[Modem2]
+AddReg=All, USRWP, Modem2.AddReg
+
+[Modem1]
+AddReg=All, USRWP, Modem1.AddReg
+
+
+; AddReg sections
+
+[Modem12.AddReg]
+HKR,, DeviceType, 1, 03 ; PCMCIA
+HKR,,PortDriver,,SERIAL.VXD
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, a0,41,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, DialSuffix,, ""
+
+[Modem11.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, FlowControl_Off,, "&H0&R1&I0"
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem10.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 80,25,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &FX4S7=60<cr>"
+HKR, Init, 3,, "AT \J0<cr>"
+HKR, Init, 4,, "AT E0 V1 Q0 T<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q2"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem9.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 80,25,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, SpeakerMode_Setup,, "M0"
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem8.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem7.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem6.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, 60,09,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT X4S7=60<cr>"
+HKR, Init, 4,, "AT E0 V1 Q0 T<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Modem5.AddReg]
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &FX4S7=60<cr>"
+HKR, Init, 3,, "AT \J0<cr>"
+HKR, Init, 4,, "AT E0 V1 Q0 T<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q2"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem4.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,4b,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &FX4S7=60<cr>"
+HKR, Init, 3,, "AT \J0<cr>"
+HKR, Init, 4,, "AT E0 V1 Q0 T<cr>"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q2"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+;HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "\T<#>"
+
+[Modem3c.AddReg] ; Rockwell command set
+HKR,, DeviceType, 1, 03
+HKR,,PortDriver,,SERIAL.VXD
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 S0=0 S95=47<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Modem3b.AddReg] ; USR command set
+HKR,, DeviceType, 1, 03
+HKR,,PortDriver,,SERIAL.VXD
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3a.AddReg] ; USR and Rockwell common command set
+HKR,, DeviceType, 1, 03
+HKR,,PortDriver,,SERIAL.VXD
+HKR,,Contention,,*vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 2,, "AT &F E0 V1 &C1 &D2 S0=0<cr>"
+
+[Modem2.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+
+[Modem1.AddReg]
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, c0,03,00,00, b0,04,00,00, b0,04,00,00
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT X4S7=60<cr>"
+HKR, Init, 4,, "AT E0 V1 Q0 T<cr>"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+;HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+;HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Strings]
+Mfg = "U.S. Robotics, Inc."
+
+; Model strings
+
+Modem12="Worldport PCMCIA 16800 Dual Standard Fax"
+Modem11="Worldport 9600 V.42bis"
+Modem10="Worldport 9600 MNP 5"
+Modem9="Worldport 9696 V.42bis FAX"
+Modem8="Worldport 2400 V.42bis (EXAR)"
+Modem7="Worldport 2400 V.42bis FAX (EXAR)"
+Modem6="Worldport 2400 (EXAR)"
+Modem5="Worldport 2496itd V.42bis FAX"
+Modem4="Worldport 2496 V.42bis FAX"
+Modem3c="Worldport PCMCIA 14400 (Rockwell command set)"
+Modem3b="Worldport PCMCIA 14400 (USR command set)"
+Modem3a="Worldport PCMCIA 14400 (Generic command set)"
+Modem2="Worldport 14400 FAX"
+Modem1="Worldport 1200 (Touchbase Systems)"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.VXD
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "ATE0Q0V1<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[USRWP]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Init, 2,, "AT&FE0V1&A3&B1&C1&D2&S0S0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_On,, "S15=0"
+HKR, Settings, SpeedNegotiation_Off,, "S15=2"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+F4/+FCERROR",1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+F4", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR,Responses,"CONNECT 1200/ARQ",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/LAPM",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/LAPM/MNP5",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/LAPM/V42BIS",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/MNP/MNP5",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/HST/HST/V42BIS",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/ARQ/MNP/V42BIS",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"CONNECT 1200/NONE",1,2,0,B0,04,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 2400/ARQ/HST/HST/V42BIS",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/LAPM/MNP5",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/LAPM",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/LAPM",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/LAPM/NONE",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/LAPM/V42BIS",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/LAPM/V42BIS",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/MNP/MNP5",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/MNP/NONE",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/ARQ/V34/MNP/V42BIS",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/NONE",1,2,0,60,09,00,0,0,0,0,0
+HKR,Responses,"CONNECT 2400/V34/NONE",1,2,0,60,09,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 4800/ARQ/HST/LAPM/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/LAPM/NONE",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/HST/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/LAPM/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/MNP/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/MNP/NONE",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/HST/MNP/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/LAPM/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/LAPM",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/LAPM",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/LAPM/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/MNP/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/MNP/NONE",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V32/MNP/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/LAPM/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/LAPM/NONE",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/LAPM/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/LAPM/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/MNP/MNP5",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/MNP/NONE",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/ARQ/V34/MNP/V42BIS",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/HST/NONE",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/V32/NONE",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 4800/V34/NONE",1,2,0,C0,12,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 7200/ARQ/HST/LAPM/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/LAPM/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/HST/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/LAPM/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/MNP/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/MNP/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/MNP/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/LAPM/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/LAPM/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/LAPM/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/LAPM/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/MNP/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/MNP/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/LAPM",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/LAPM",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V32/MNP/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/LAPM/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/LAPM/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/LAPM/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/MNP/MNP5",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/MNP/NONE",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/V34/MNP/V42BIS",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/HST/NONE",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/V32/NONE",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/V34/NONE",1,2,0,20,1C,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 9600/ARQ/HST/LAPM/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/LAPM/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/LAPM/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/MNP/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/MNP/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/HST/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/MNP/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/LAPM/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/LAPM/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/LAPM/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/LAPM/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/MNP/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/MNP/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/MNP/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/MNP/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V32/MNP/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/LAPM/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/LAPM",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/LAPM/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/LAPM/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/MNP/MNP5",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/MNP/NONE",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/V34/MNP/V42BIS",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/HST/NONE",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/V32/NONE",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/V34/NONE",1,2,0,80,25,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 14400/ARQ/HST/LAPM/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/LAPM/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/HST/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/LAPM/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/MNP/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/MNP/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/HST/MNP/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/LAPM/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/LAPM",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/LAPM/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/LAPM/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/LAPM/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/MNP/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/MNP/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V32/MNP/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/LAPM/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/LAPM/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/LAPM/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/MNP/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/MNP/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/V34/MNP/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/LAPM/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/LAPM/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/LAPM",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/LAPM/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/MNP/MNP5",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/MNP/NONE",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/ARQ/VFC/MNP/V42BIS",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/HST/NONE",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/V32/NONE",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/V34/NONE",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14400/VFC/NONE",1,2,0,40,38,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 16800/ARQ/HST/LAPM/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/LAPM/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/MNP/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/MNP/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/MNP/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/HST/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/LAPM/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/LAPM",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/LAPM/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/MNP/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/MNP/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V32/MNP/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/LAPM/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/LAPM/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/MNP/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/MNP/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/V34/MNP/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/LAPM/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/LAPM/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/LAPM/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/MNP/MNP5",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/MNP/NONE",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/VFC/MNP/V42BIS",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/HST/NONE",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/V32/NONE",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/V34/NONE",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/VFC/NONE",1,2,0,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 19200/ARQ/V32/LAPM/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V32/LAPM/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/HST/HST/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V32/LAPM/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V32/MNP/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V32/MNP/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/LAPM/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V32/MNP/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/LAPM/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/LAPM",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/LAPM/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/LAPM/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/MNP/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/MNP/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/V34/MNP/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/LAPM/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/LAPM/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/LAPM/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/MNP/MNP5",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/MNP/NONE",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/ARQ/VFC/MNP/V42BIS",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/V32/NONE",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/V34/NONE",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"CONNECT 19200/VFC/NONE",1,2,0,00,4B,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 21600/ARQ/V32/LAPM/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V32/LAPM/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V32/LAPM/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V32/MNP/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V32/MNP/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/HST/HST/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V32/MNP/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/LAPM/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/LAPM",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/LAPM/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/LAPM/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/LAPM/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/MNP/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/MNP/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/V34/MNP/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/LAPM/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/LAPM/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/LAPM/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/MNP/MNP5",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/MNP/NONE",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/ARQ/VFC/MNP/V42BIS",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/V32/NONE",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/V34/NONE",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"CONNECT 21600/VFC/NONE",1,2,0,60,54,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 24000/ARQ/V34/LAPM/MNP5",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/V34/LAPM/NONE",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/HST/HST/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/V34/LAPM/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/V34/MNP/MNP5",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/V34/MNP/NONE",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/V34/MNP/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/LAPM/MNP5",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/LAPM",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/LAPM/NONE",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/LAPM/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/LAPM/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/MNP/MNP5",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/MNP/NONE",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/ARQ/VFC/MNP/V42BIS",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/V34/NONE",1,2,0,C0,5D,00,0,0,0,0,0
+HKR,Responses,"CONNECT 24000/VFC/NONE",1,2,0,C0,5D,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 26400/ARQ/V34/LAPM/MNP5",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/V34/LAPM/NONE",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/HST/HST/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/V34/LAPM/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/V34/MNP/MNP5",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/V34/MNP/NONE",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/LAPM/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/V34/MNP/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/LAPM/MNP5",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/LAPM",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/LAPM/NONE",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/LAPM/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/MNP/MNP5",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/MNP/NONE",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/ARQ/VFC/MNP/V42BIS",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/V34/NONE",1,2,0,20,67,00,0,0,0,0,0
+HKR,Responses,"CONNECT 26400/VFC/NONE",1,2,0,20,67,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 28800/ARQ/V34/LAPM/MNP5",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/V34/LAPM/NONE",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/HST/HST/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/LAPM/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/V34/LAPM/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/V34/MNP/MNP5",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/V34/MNP/NONE",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/V34/MNP/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/LAPM/MNP5",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/LAPM/NONE",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/LAPM",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/LAPM/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/MNP/MNP5",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/MNP/NONE",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/ARQ/VFC/MNP/V42BIS",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/V34/NONE",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"CONNECT 28800/VFC/NONE",1,2,0,80,70,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"CONNECT 4800/ARQ/HST/HST/CELLULAR",1,2,A,C0,12,00,0,0,0,0,0
+HKR,Responses,"CONNECT 7200/ARQ/HST/HST/CELLULAR",1,2,A,20,1C,00,0,0,0,0,0
+HKR,Responses,"CONNECT 9600/ARQ/HST/HST/CELLULAR",1,2,A,80,25,00,0,0,0,0,0
+HKR,Responses,"CONNECT 12000/ARQ/HST/HST/CELLULAR",1,2,A,E0,2E,00,0,0,0,0,0
+HKR,Responses,"CONNECT 14000/ARQ/HST/HST/CELLULAR",1,2,A,40,38,00,0,0,0,0,0
+HKR,Responses,"CONNECT 16800/ARQ/HST/HST/CELLULAR",1,2,A,A0,41,00,0,0,0,0,0
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmvayrs.inx b/private/unimodem/inf/mdmvayrs.inx
new file mode 100644
index 000000000..52b5e719d
--- /dev/null
+++ b/private/unimodem/inf/mdmvayrs.inx
@@ -0,0 +1,381 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: VAYRIS, S.A.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem4% = Modem4, Vayris_Modem4 ; VY-502
+%Modem3% = Modem3, UNIMODEM8CDA349C ; MD-304
+%Modem2% = Modem2, UNIMODEM7C76BF71 ; NL-24
+%Modem1% = Modem1, UNIMODEMAD5BBBE7 ; NL-144
+
+; Installation sections
+
+[Modem4] ; VY-502
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3] ; MD-304
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; NL-24
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; NL-144
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+[Modem4.AddReg] ; VY-502
+HKR,, Properties, 1, 00,01,00,00, 19,00,00,00, fa,05,00,00, 07,00,00,00, 0f,00,00,00, b0,03,00,00, 00,96,00,00, 80,70,00,00
+
+[Modem3.AddReg] ; MD-304
+HKR,, Properties, 1, c0,01,00,00, 19,00,00,00, fa,05,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,4b,00,00, 60,09,00,00
+
+[Modem2.AddReg] ; NL-24
+HKR,, Properties, 1, c0,01,00,00, 19,00,00,00, fa,05,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 60,09,00,00
+
+[Modem1.AddReg] ; NL-144
+HKR,, Properties, 1, c0,01,00,00, 19,00,00,00, fa,05,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "VAYRIS, S.A."
+
+; Model strings
+
+Modem4="VAYRIS VY-502"
+Modem3="VAYRIS MD-304"
+Modem2="VAYRIS NL-24"
+Modem1="VAYRIS NL-144"
+
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F V1 S0=0 S95=47<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, ErrorControl_Cellular,, ")M1"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "F1 F4"
+HKR, Settings, Modulation_Bell,, "B1F1 B1F4"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmvdot.inx b/private/unimodem/inf/mdmvdot.inx
new file mode 100644
index 000000000..b132c44d7
--- /dev/null
+++ b/private/unimodem/inf/mdmvdot.inx
@@ -0,0 +1,369 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: V.DOT
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem2% = Modem2, UNIMODEM4A05D2DA
+%Modem2% = Modem2, "PCMCIA\PC_CARD_DISTRIBUTION-V.DOT_288-EE73"
+%Modem1% = Modem1, UNIMODEM1B925E4F
+%Modem1% = Modem1, "PCMCIA\PC_CARD_DISTRIBUTION-V.DOT_144-F6EE"
+
+; Installation sections
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, PCMCIA
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, PCMCIA
+
+
+; AddReg sections
+
+[Modem2.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, c0,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "V.DOT"
+
+; Model strings
+Modem2="V.DOT 288 PCMCIA"
+Modem1="V.DOT 144 PCMCIA"
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47 <cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, Cellular_On,, "-K1)M1"
+HKR, Settings, Cellular_Off,, "-K0)M1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmvict.inx b/private/unimodem/inf/mdmvict.inx
new file mode 100644
index 000000000..9b9c079eb
--- /dev/null
+++ b/private/unimodem/inf/mdmvict.inx
@@ -0,0 +1,438 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Victory
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM18C20355
+
+[Models]
+%Modem3% = Modem3, UNIMODEM2A40A898 ;1414VIP
+%Modem4% = Modem4, Victory_Modem4, UNIMODEM52AF34A9 ;14400I
+%Modem6% = Modem6, Victory_Modem6, UNIMODEM7C16C318 ;14400E (AT&T chipset)
+%Modem11% = Modem11, Victory_Modem11, UNIMODEM18C20355 ;2400E
+%Modem15% = Modem15, UNIMODEMF82C2E99 ;2400I
+%Modem21% = Modem21, Victory_Modem21, UNIMODEM18C20355 ;2423E
+%Modem22% = Modem21, UNIMODEM4A430FEC ;2423I
+%Modem23% = Modem11, UNIMODEM18C20355 ;Generic 2400E & 2423E
+%Modem38% = Modem38, Victory_Modem38, UNIMODEM52AF34A9 ;14400E (Rockwell chipset)
+%Modem41% = Modem41, Victory_Modem41, UNIMODEM322437AF ;28800E
+%Modem42% = Modem42, Victory_Modem42, UNIMODEM322437AF ;28800I
+
+; Installation sections
+
+[Modem3]
+AddReg=All, Common, Modem3.AddReg, External
+
+[Modem4]
+AddReg=All, Common, Modem4.AddReg, Internal
+
+[Modem6]
+AddReg=All, Common, Modem6.AddReg, External
+
+[Modem11]
+AddReg=All, Common, Modem11.AddReg, External
+
+[Modem15]
+AddReg=All, Common, Modem15.AddReg, Internal
+
+[Modem21]
+AddReg=All, Common, Modem21.AddReg, External
+
+[Modem22]
+AddReg=All, Common, Modem22.AddReg, Internal
+
+[Modem38]
+AddReg=All, Common, Modem38.AddReg, External
+
+[Modem41]
+AddReg=All, Common, Modem41.AddReg, External
+
+[Modem42]
+AddReg=All, Common, Modem42.AddReg, Internal
+
+
+; AddReg sections
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "$F5"
+HKR, Settings, FlowControl_Hard,, "$F4"
+HKR, Settings, FlowControl_Soft,, "$F0"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E0"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, Compression_Off,, "$C0"
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem6.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+
+[Modem11.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem15.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem21.AddReg]
+HKR,, Properties, 1, 80,01,00,00, FF,00,00,00, 00,00,00,00, 07,00,00,00, 0F,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+
+[Modem38.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem41.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem42.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Victory"
+
+Modem3="Victory 1414 VIP"
+Modem4="Victory 14400 I"
+Modem6="Victory 14400 E (AT&T chipset)"
+Modem11="Victory 2400 E"
+Modem15="Victory 2400 I"
+Modem21="Victory 2423 E"
+Modem22="Victory 2423 I"
+Modem23="Victory 2400 E & 2423 E"
+Modem38="Victory 14400 E (Rockwell chipset)"
+Modem41="Victory 28800 E"
+Modem42="Victory 28800 I"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,, InactivityScale, 01,00,00,00
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT &F <cr>"
+
+[Common]
+HKR, Init, 1,, "AT<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&F V1 E0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "\Q0"
+HKR, Settings, FlowControl_Hard,, "\Q3"
+HKR, Settings, FlowControl_Soft,, "\Q1"
+HKR, Settings, ErrorControl_On,, "\J0\N3"
+HKR, Settings, ErrorControl_Off,, "\J1\N1"
+HKR, Settings, ErrorControl_Forced,, "\J0\N4"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmvv.inx b/private/unimodem/inf/mdmvv.inx
new file mode 100644
index 000000000..64981cf62
--- /dev/null
+++ b/private/unimodem/inf/mdmvv.inx
@@ -0,0 +1,604 @@
+; MDMVV.INF
+;
+; This is the INF file for modems supported using generic
+; VoiceView command set information.
+;
+; Copyright (c) 1993-1996 Microsoft Corporation
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%MS%
+
+[ControlFlags]
+ExcludeFromSelect=*PNPC110,*PNPC111,*PNPC112,*PNPC113,*PNPC114,*PNPC115
+ExcludeFromSelect=*PNPC116,*PNPC117,*PNPC118,*PNPC119,*PNPC11A,*PNPC11B
+ExcludeFromSelect=*PNPC11C,*PNPC11D,*PNPC11E,*PNPC11F
+
+[Manufacturer]
+%VoiceView% = VoiceView
+
+[DestinationDirs]
+Register.Copy = 17 ;LDID_INF
+VV_Sys = 11
+VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+VV_App = 10
+VV_Help = 18 ;LDID_HELP
+
+[VoiceView]
+%VVGen96% = VVGen96, MDMVVGEN96
+%VVGen144% = VVGen144, MDMVVGEN144
+%VVGen192% = VVGen192, MDMVVGEN192
+%VVGen288% = VVGen288, MDMVVGEN288
+%PNPC110% = PNPC110, *PNPC110
+%PNPC111% = PNPC111, *PNPC111
+%PNPC112% = PNPC112, *PNPC112
+%PNPC113% = PNPC113, *PNPC113
+%PNPC114% = PNPC114, *PNPC114
+%PNPC115% = PNPC115, *PNPC115
+%PNPC116% = PNPC116, *PNPC116
+%PNPC117% = PNPC117, *PNPC117
+%PNPC118% = PNPC118, *PNPC118
+%PNPC119% = PNPC119, *PNPC119
+%PNPC11A% = PNPC11A, *PNPC11A
+%PNPC11B% = PNPC11B, *PNPC11B
+%PNPC11C% = PNPC11C, *PNPC11C
+%PNPC11D% = PNPC11D, *PNPC11D
+%PNPC11E% = PNPC11E, *PNPC11E
+%PNPC11F% = PNPC11F, *PNPC11F
+
+[VVGen96]
+AddReg = All, GenericAddReg, Gen96Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[VVGen144]
+AddReg = All, GenericAddReg, Gen144Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[VVGen192]
+AddReg = All, GenericAddReg, Gen192Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[VVGen288]
+AddReg = All, GenericAddReg, Gen288Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC110]
+AddReg = All, GenericAddReg, Gen96Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC111]
+AddReg = All, GenericAddReg, Gen144Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC112]
+AddReg = All, GenericAddReg, Gen288Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC113]
+AddReg = All, GenericAddReg, GenAnyReg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC114]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh96Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC115]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh144Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC116]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh288Reg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC117]
+AddReg = All, GenericAddReg, EnhancedAddReg, EnhAnyReg, EXTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC118]
+AddReg = All, GenericAddReg, Gen96Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC119]
+AddReg = All, GenericAddReg, Gen144Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11A]
+AddReg = All, GenericAddReg, Gen288Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11B]
+AddReg = All, GenericAddReg, GenAnyReg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11C]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh96Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11D]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh144Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11E]
+AddReg = All, GenericAddReg, EnhancedAddReg, Enh288Reg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[PNPC11F]
+AddReg = All, GenericAddReg, EnhancedAddReg, EnhAnyReg, INTERNAL, VoiceView_Modem, VoiceView_Socket
+CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+UpdateInis = VView.Inis
+Uninstall = VoiceView_remove
+
+[VoiceView_remove]
+UpdateInis = VView.Rem.Inis
+
+[VV_Sys]
+fte.dll
+vvexe32.exe
+wsvv.vxd
+
+[VV_Sock_Sys]
+wsock32.dll
+wsock.vxd
+vtdi.386
+
+[VV_App]
+filexfer.exe
+
+[VV_Help]
+filexfer.hlp
+filexfer.cnt
+
+[VView.Inis]
+setup.ini, progman.groups,, "group4="%APPS_DESC%"" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%"", filexfer.exe" ;creates link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%"", filexfer.exe" ; create Link to EXE
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%"", filexfer.exe /a" ;creates link
+
+[VView.Rem.Inis]
+setup.ini, progman.groups,, "group4=""%APPS_DESC%""" ;creates folder
+setup.ini, group4,, """%FileXfer_DESC%""" ;deletes link
+setup.ini, progman.groups,, "SendTo=""..\..\%SendTo_DESC%""" ;creates folder
+setup.ini, SendTo,,"""%SendToPhone_DESC%""" ;deletes link
+setup.ini, progman.groups,, "group1=""%StartUp_DESC%""" ;creates folder
+setup.ini, group1,, """%StartXfer_DESC%""" ;deletes link
+
+[VoiceView_Socket]
+HKLM, System\CurrentControlSet\Services\VxD\Winsock, "VoiceView Winsock Provider",, "wsvv.vxd"
+
+[VoiceView_Modem]
+HKR,, RunOnce,,"grpconv /o"
+HKR,, VoiceView, 1, 01
+HKR, MonitorVoiceViewOn, 1,, "AT+FCLASS=80<cr>"
+HKR, MonitorVoiceViewOn, 2,, "None"
+HKR, MonitorVoiceViewOff, 1,, "AT+FCLASS=0<cr>"
+HKR, MonitorVoiceViewOff, 2,, "None"
+
+HKR, Responses, "-SSV", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SMD", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SFA", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRA", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRQ", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SRC:", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-STO", 1, 09, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "-SVM", 1, 09, 00, 00,00,00,00, 00,00,00,00
+
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[EnhancedAddReg]
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+
+[GenericAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "ATE0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+
+; DTE/DCE speeds will not be exact for generic modems because we will
+; treat CONNECT ### as a DCE speed when some modems will report it as DTE.
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[Gen96Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,96,00,00, 80,25,00,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen144Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen192Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 00,4b,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Gen288Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[GenAnyReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh96Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 00,96,00,00, 80,25,00,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh144Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Enh288Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[EnhAnyReg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,03,00,00, 00,c2,01,00, 00,c2,01,00
+HKR,, DCB, 1, 1C,00,00,00, 80,25,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+
+[Strings]
+MS ="Microsoft"
+
+VoiceView = "(VoiceView Modem Types)"
+VVGen96 = "VoiceView 9600 bps Modem"
+VVGen144 = "VoiceView 14400 bps Modem"
+VVGen192 = "VoiceView 19200 bps Modem"
+VVGen288 = "VoiceView 28800 bps Modem"
+PNPC110 = "VoiceView 9600 bps Modem"
+PNPC111 = "VoiceView 14400 bps Modem"
+PNPC112 = "VoiceView 28800 bps Modem"
+PNPC113 = "VoiceView Modem"
+PNPC114 = "VoiceView 9600 bps Modem"
+PNPC115 = "VoiceView 14400 bps Modem"
+PNPC116 = "VoiceView 28800 bps Modem"
+PNPC117 = "VoiceView Modem"
+PNPC118 = "VoiceView 9600 bps Modem"
+PNPC119 = "VoiceView 14400 bps Modem"
+PNPC11A = "VoiceView 28800 bps Modem"
+PNPC11B = "VoiceView Modem"
+PNPC11C = "VoiceView 9600 bps Modem"
+PNPC11D = "VoiceView 14400 bps Modem"
+PNPC11E = "VoiceView 28800 bps Modem"
+PNPC11F = "VoiceView Modem"
+
+APPS_DESC = "Accessories" ; Name of Accessories menu
+StartUp_DESC = "StartUp"
+SendTo_DESC = "SendTo" ; Name of SendTo folder in the Windows dir
+FileXfer_DESC = "File Transfer" ; Name of file tranfer app in Accessories menu
+SendToPhone_DESC = "Person On Phone" ; Name for file transfer app in SendTo menu
+StartXfer_DESC = "VoiceView Auto Detection" ; Name for auto start feature
diff --git a/private/unimodem/inf/mdmwell.inx b/private/unimodem/inf/mdmwell.inx
new file mode 100644
index 000000000..e9432f745
--- /dev/null
+++ b/private/unimodem/inf/mdmwell.inx
@@ -0,0 +1,393 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Easytel Oy
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+; Manufacturers
+
+[Manufacturer]
+%Mfg% = Models
+
+; Driver sections
+
+[Models]
+%Modem1% = Modem1, UNIMODEM40795F6F
+%Modem2% = Modem2, UNIMODEM3BA372EB
+%Modem3% = Modem3, UNIMODEM0B1A23D9
+%Modem3% = Modem3, UNIMODEM500C152D
+%Modem4% = Modem4, UNIMODEME0212F46
+%Modem5% = Modem3, UNIMODEM9B25725E
+%Modem6% = Modem6, UNIMODEM4F405895
+%Modem7% = Modem7, UNIMODEM53441A38
+
+; --------------------------------------------------
+; Generic modem install sections
+
+[Modem1]
+AddReg=All, MfgAddReg, Gen288Reg, INTERNAL
+
+[Modem2]
+AddReg=All, MfgAddReg, Gen144Reg, INTERNAL
+
+[Modem3]
+AddReg=All, MfgAddReg, Gen288Reg, EXTERNAL
+
+[Modem4]
+AddReg=All, MfgAddReg, Gen144Reg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Gen144Reg, Modem6.AddReg, INTERNAL
+
+[Modem7]
+AddReg=All, MfgAddReg, Gen144Reg, Modem7.AddReg, EXTERNAL
+
+; --------------------------------------------------
+; Model AddReg sections
+
+[Gen144Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0F,00,00,00, 00,01,00,00, 00,E1,00,00, 40,38,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,4B,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 3,, "AT&F&K3S0=0<cr>"
+HKR, Fax, FixModemClass,, "2"
+
+[Gen288Reg]
+HKR,, Properties, 1, 80,01,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0F,00,00,00, 00,01,00,00, 00,C2,01,00, 80,70,00,00
+HKR,, DCB, 1, 1C,00,00,00, 00,96,00,00, 15,20,00,00, 00,00, 0a,00, 0a,00, 08, 00, 00, 11, 13, 00, 00, 00
+HKR, Init, 3,, "AT&F&K3S95=47S0=0<cr>"
+
+[Modem6.AddReg]
+HKR, Settings, DialSuffix,, ""
+
+[Modem7.AddReg]
+HKR, Settings, DialSuffix,, ""
+
+
+[Strings]
+Classname = "Modem"
+Mfg = "Easytel"
+
+;Model Strings
+Modem1 = "TeleWell Internal TW-2814Si Data-Fax Modem"
+Modem2 = "Well Internal AT-1414PCV Data-Fax Modem"
+Modem3 = "Well External XT-2814SAM Data-Fax Modem"
+Modem4 = "Well External XT-1414SAM Data-Fax Modem"
+Modem5 = "Well External AT-2814SAM Data-Fax Modem"
+Modem6 = "Well Internal AT-1414PCM Data-Fax Modem"
+Modem7 = "Well External AT-1414SAM Data-Fax Modem"
+
+; --------------------------------------------------
+; Common AddReg sections
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&F&K3E0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "AT&FS0=0<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DIALING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RRING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,00,00,00, 00,96,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,00,00,00, 00,E1,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,00,00,00, 00,C2,01,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,00,00,00, 00,84,03,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,00,00,00, 00,84,03,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmwhql0.inx b/private/unimodem/inf/mdmwhql0.inx
new file mode 100644
index 000000000..30817d939
--- /dev/null
+++ b/private/unimodem/inf/mdmwhql0.inx
@@ -0,0 +1,565 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: U.S. Robotics, Inc. (Courier)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\USR0411
+
+[Modem33.NoResDup]
+UNIMODEMC81503CD
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem33% = Modem33, UNIMODEMC81503CD ;External Courier I-Modem ISDN & V.34
+%Modem33PNP% = Modem33, SERENUM\USR0411 ;PnP ID of Modem33
+
+; Installation sections
+
+
+[Modem33]
+AddReg=All, MfgAddReg, Fast, Verbose, External
+
+
+; String section
+
+
+[Strings]
+Mfg = "U.S. Robotics, Inc."
+Modem33="Courier I-Modem ISDN & V.34"
+Modem33PNP="Courier I-Modem ISDN & V.34 External PnP"
+
+; AddReg sections
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[MfgAddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 00,fa,00,00
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR,, Reset,, "ATZ<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Hard,, "&H1&R2&I0"
+HKR, Settings, FlowControl_Off,, "&H0&I0&R1"
+HKR, Settings, FlowControl_Soft,, "&H2&I2&R1"
+HKR, Settings, ErrorControl_On,, "&M4"
+HKR, Settings, ErrorControl_Off,, "&M0"
+HKR, Settings, ErrorControl_Forced,, "&M5"
+HKR, Settings, Compression_On,, "&K1"
+HKR, Settings, Compression_Off,, "&K0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S19=<#>"
+
+[Fast]
+HKR, Init, 2,, "AT&F1&B1&C1&D2E0Q0V1&A3S0=0<cr>"
+
+[Verbose]
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+
+HKR,Responses,"<cr><lf>BUSY<cr><lf>",1,06,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>ERROR<cr><lf>",1,03,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO ANSWER<cr><lf>",1,07,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO CARRIER<cr><lf>",1,04,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIAL TONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>NO DIALTONE<cr><lf>",1,05,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>OK<cr><lf>",1,00,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RING<cr><lf>",1,08,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>RINGING<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>VOICE<cr><lf>",1,01,00,00,00,00,00,00,00,00,00
+HKR,Responses,"<cr><lf>CONNECT<cr><lf>",1,02,00,00,00,00,00,00,00,00,00
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/LAPM<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 1200/NONE<cr><lf>",1,2,0,B0,04,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/V34/NONE<cr><lf>",1,2,0,60,09,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/HST/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V32/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/V34/NONE<cr><lf>",1,2,0,C0,12,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/HST/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V32/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/V34/NONE<cr><lf>",1,2,0,20,1C,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/HST/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V32/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/V34/NONE<cr><lf>",1,2,0,80,25,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/HST/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V32/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/V34/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/VFC/NONE<cr><lf>",1,2,0,E0,2E,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/HST/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V32/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/V34/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/VFC/NONE<cr><lf>",1,2,0,40,38,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/HST/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V32/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/V34/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/VFC/NONE<cr><lf>",1,2,0,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V32/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/V34/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/VFC/NONE<cr><lf>",1,2,0,00,4B,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V32/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/V34/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/VFC/NONE<cr><lf>",1,2,0,60,54,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/V34/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/VFC/NONE<cr><lf>",1,2,0,C0,5D,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/V34/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/VFC/NONE<cr><lf>",1,2,0,20,67,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/HST/HST/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/NONE<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/VFC/MNP/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/V34/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/VFC/NONE<cr><lf>",1,2,0,80,70,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/LAPM<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5<cr><lf>",1,2,B,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14000/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/HST/HST/CELLULAR<cr><lf>",1,2,A,A0,41,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/MNP<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/MNP<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/MNP<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/MNP<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/MNP<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/MNP<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/MNP<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/MNP<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/MNP<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/MNP<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/MNP<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/MNP<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/MNP<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V32/LAPM/V42BIS<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/MNP/MNP5<cr><lf>",1,2,3,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/MNP/MNP5<cr><lf>",1,2,3,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/MNP/MNP5<cr><lf>",1,2,3,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/MNP/MNP5<cr><lf>",1,2,3,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/MNP/MNP5<cr><lf>",1,2,3,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/MNP/MNP5<cr><lf>",1,2,3,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/MNP/MNP5<cr><lf>",1,2,3,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 1200/ARQ/V34/MNP<cr><lf>",1,2,2,B0,04,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 2400/ARQ/V34/MNP<cr><lf>",1,2,2,60,09,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 4800/ARQ/V34/MNP<cr><lf>",1,2,2,C0,12,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 7200/ARQ/V34/MNP<cr><lf>",1,2,2,20,1C,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 9600/ARQ/V34/MNP<cr><lf>",1,2,2,80,25,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 12000/ARQ/V34/MNP<cr><lf>",1,2,2,E0,2E,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 14400/ARQ/V34/MNP<cr><lf>",1,2,2,40,38,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 16800/ARQ/V34/MNP<cr><lf>",1,2,2,A0,41,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 19200/ARQ/V34/MNP<cr><lf>",1,2,2,00,4B,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 21600/ARQ/V34/MNP<cr><lf>",1,2,2,60,54,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 24000/ARQ/V34/MNP<cr><lf>",1,2,2,C0,5D,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 26400/ARQ/V34/MNP<cr><lf>",1,2,2,20,67,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 28800/ARQ/V34/MNP<cr><lf>",1,2,2,80,70,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/V34/NONE<cr><lf>",1,2,0,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/LAPM<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/MNP/MNP5<cr><lf>",1,2,3,E0,79,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 31200/ARQ/V34/MNP<cr><lf>",1,2,2,E0,79,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/NONE<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP/V42BIS<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/V34/NONE<cr><lf>",1,2,0,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/LAPM<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/MNP/MNP5<cr><lf>",1,2,3,40,83,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 33600/ARQ/V34/MNP<cr><lf>",1,2,2,40,83,00,0,0,0,0,0
+
+HKR,Responses,"<cr><lf>CONNECT 56000<cr><lf>",1,2,0,C0,DA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 56000/DIGITAL<cr><lf>",1,2,2,C0,DA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 56000/ARQ/DIGITAL<cr><lf>",1,2,2,C0,DA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 56000/ARQ/DIGITAL/V120<cr><lf>",1,2,2,C0,DA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 64000<cr><lf>",1,2,0,00,FA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 64000/DIGITAL<cr><lf>",1,2,2,00,FA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 64000/ARQ/DIGITAL<cr><lf>",1,2,2,00,FA,00,0,0,0,0,0
+HKR,Responses,"<cr><lf>CONNECT 64000/ARQ/DIGITAL/V120<cr><lf>",1,2,2,00,FA,00,0,0,0,0,0
diff --git a/private/unimodem/inf/mdmwoer.inx b/private/unimodem/inf/mdmwoer.inx
new file mode 100644
index 000000000..5fa4a3c57
--- /dev/null
+++ b/private/unimodem/inf/mdmwoer.inx
@@ -0,0 +1,334 @@
+; Windows Modem Setup File
+; Copyright 1995-1996 Microsoft Corp.
+;
+; Manufacturer: Woerlein
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem11% =Modem2, ;WOERLTRONIC dataphon SK 24/96 fax Steckkarte
+%Modem10% =Modem2,Woerl_Modem10,UNIMODEMB0583818;WOERLTRONIC SK 144 BA Steckkarte
+%Modem9% = Modem2,Woerl_Modem9,UNIMODEM7D78A7F1 ;WOERLTRONIC SK 144 Voice Steckkarte
+%Modem8% = Modem2, ;WOERLTRONIC dataphon SK 288 fax Steckkarte
+%Modem7% = Modem2, ;WOERLTRONIC dataphon SK 288 Steckkarte
+%Modem6% = Modem1,UNIMODEM7D5715A5 ;WOERLTRONIC dataphon M 24/96 Fax
+%Modem5% = Modem1, ;WOERLTRONIC dataphon M 144 fax
+%Modem4% = Modem1, ;WOERLTRONIC Little dataphon 144 fax
+%Modem3% = Modem1,Woerl_Modem3,UNIMODEMFA93A03B ;WOERLTRONIC dataphon VC 144
+%Modem2% = Modem1, ;WOERLTRONIC Little dataphon 288 fax
+%Modem1% = Modem1,Woerl_Modem1,UNIMODEM8BD1FE44 ;WOERLTRONIC dataphon M 288 fax
+
+
+; Installation sections
+
+[Modem2] ; internal
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; external
+AddReg=All, MfgAddReg, Modem1.AddReg, Internal
+
+
+; AddReg sections
+[Modem1.AddReg] ; external
+HKR,, Properties, 1, 80,01,00,00, 3a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+[Modem2.AddReg] ; internal
+HKR,, Properties, 1, 80,01,00,00, 3a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 37,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, FClass, 1, 0f,00,00,00
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Woerlein"
+
+; Model strings
+
+Modem11="WOERLTRONIC dataphon SK 24,96 fax Steckkarte"
+Modem10="WOERLTRONIC SK 144 BA Steckkarte"
+Modem9="WOERLTRONIC SK 144 Voice Steckkarte"
+Modem8="WOERLTRONIC dataphon SK 288 fax Steckkarte"
+Modem7="WOERLTRONIC dataphon SK 288 Steckkarte"
+Modem6="WOERLTRONIC dataphon M 24,96 Fax"
+Modem5="WOERLTRONIC dataphon M 144 fax"
+Modem4="WOERLTRONIC Little dataphon 144 fax"
+Modem3="WOERLTRONIC dataphon VC 144"
+Modem2="WOERLTRONIC Little dataphon 288 fax"
+Modem1="WOERLTRONIC dataphon M 288 fax"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 W0 S95=249 <cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N4"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Forced_ON,, "-K1)M1"
+HKR, Settings, ErrorControl_Cellular_Off,, "-K0)M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+
+HKR, Responses,"<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIAL TONE<cr><lf>",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>FAX<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DATA<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER DELAYED:TIMER<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NUMBER LOCKED OUT<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CALL LOCKED:BLACKLISTED<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>DALAYED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses,"<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/ARQ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/REL<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/MNP<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/LAP-M<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT/V42BIS<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/ARQ<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/REL<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/MNP<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/LAP-M<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 300/V42BIS<cr><lf>", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600<cr><lf>", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/ARQ<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/REL<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/MNP<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/LAP-M<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 0600/V42BIS<cr><lf>", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200/75/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 1200TX/75RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75/1200/V42BIS<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX<cr><lf>", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/ARQ<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/REL<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/MNP<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/LAP-M<cr><lf>", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 75TX/1200RX/V42BIS<cr><lf>",1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/ARQ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/REL<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/MNP<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/LAP-M<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 2400/V42BIS<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/ARQ<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/REL<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/MNP<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/LAP-M<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 4800/V42BIS<cr><lf>", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/ARQ<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/REL<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/MNP<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/LAP-M<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 7200/V42BIS<cr><lf>", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/ARQ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/REL<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/MNP<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/LAP-M<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 9600/V42BIS<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/ARQ<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/REL<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/MNP<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/LAP-M<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 12000/V42BIS<cr><lf>", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/ARQ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/REL<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/MNP<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/LAP-M<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 14400/V42BIS<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/ARQ<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/REL<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/MNP<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/LAP-M<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 16800/V42BIS<cr><lf>", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/ARQ<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/REL<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/MNP<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/LAP-M<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 19200/V42BIS<cr><lf>", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/ARQ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/REL<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/MNP<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/LAP-M<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 21600/V42BIS<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/ARQ<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/REL<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/MNP<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/LAP-M<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 24000/V42BIS<cr><lf>", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/ARQ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/REL<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/MNP<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/LAP-M<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 26400/V42BIS<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/ARQ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/REL<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/MNP<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/LAP-M<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 28800/V42BIS<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/ARQ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/REL<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/MNP<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/LAP-M<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 38400/V42BIS<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/ARQ<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/REL<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/MNP<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/LAP-M<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 57600/V42BIS<cr><lf>", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200<cr><lf>", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/ARQ<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/REL<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/MNP<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/LAP-M<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 115,200/V42BIS<cr><lf>", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400<cr><lf>", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/ARQ<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/REL<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/MNP<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/LAP-M<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses,"<cr><lf>CONNECT 230400/V42BIS<cr><lf>", 1, 02, 02, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CARRIER 300<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200/75<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 75/1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 1200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 2400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 4800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 7200<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 9600<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800<cr><lf>", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200<cr><lf>", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600<cr><lf>", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000<cr><lf>", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400<cr><lf>", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 14400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 16800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 19200/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 21600/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 24000/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 26400/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CARRIER 28800/VFC<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>PROTOCOL: NONE<cr><lf>",1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAPM<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: LAP-M<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT<cr><lf>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>PROTOCOL: ALT - CELLULAR<cr><lf>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>COMPRESSION: NONE<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: MNP5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: V.42BIS<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>COMPRESSION: CLASS 5<cr><lf>", 1, 01, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmyorik.inx b/private/unimodem/inf/mdmyorik.inx
new file mode 100644
index 000000000..147b72db8
--- /dev/null
+++ b/private/unimodem/inf/mdmyorik.inx
@@ -0,0 +1,440 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Yoriko
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMBC797AC0
+
+[Models]
+%Modem5% = Modem3, UNIMODEMBC797AC0
+
+%Modem4% = Modem4, Yorik_Modem4, UNIMODEMBC797AC0
+%Modem3% = Modem3, Yorik_Modem3, UNIMODEMBC797AC0
+%Modem2% = Modem2, UNIMODEM929E757A
+%Modem1% = Modem1, UNIMODEM22A9871C
+
+
+; Installation sections
+
+
+[Modem4]
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3]
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2]
+AddReg=All, MfgAddReg, Modem2.AddReg, Internal
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+
+; AddReg sections
+
+
+[Modem4.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem3.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, 5a,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+; Strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "Yoriko"
+
+; Model strings
+
+Modem5="Yoriko 144et & 144ET"
+Modem4="Yoriko 144ET"
+Modem3="Yoriko 144et"
+Modem2="Yoriko 144i"
+Modem1="Yoriko 288e"
+
+[All]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F<cr>"
+HKR, Init, 3,, "AT E0 V1 S95=47<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, ErrorControl_Cellular,, "-K1)M1*H0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "-K0)M0"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 02, 00, 00,00,00,00, 58,02,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 00,00,00,00, 60,09,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, 00,00,00,00, c0,12,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 00,00,00,00, 80,25,00,00
+HKR, Responses, "13<cr>", 1, 02, 00, 00,00,00,00, 20,1c,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,00,00,00, e0,2e,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 00,00,00,00, 40,38,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, 00,00,00,00, 00,4b,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00
+HKR, Responses, "22<cr>", 1, 02, 00, 00,00,00,00, 4b,00,00,00
+HKR, Responses, "23<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "40<cr>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "44<cr>", 1, 02, 00, 00,00,00,00, b0,04,00,00
+HKR, Responses, "45<cr>", 1, 02, 00, 4b,00,00,00, 00,00,00,00
+HKR, Responses, "46<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "47<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "48<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "49<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "50<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "51<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "52<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "53<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "54<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "55<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "56<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "57<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "58<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "66<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "67<cr>", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400", 1, 02, 00, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/ARQ", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/REL", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/MNP", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/LAP-M", 1, 02, 02, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42BIS", 1, 02, 03, 00,84,03,00, 00,00,00,00
+HKR, Responses, "CONNECT 230400/V42b", 1, 02, 03, 00,84,03,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "AUTOSTREAM: LEVEL 1", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 2", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
diff --git a/private/unimodem/inf/mdmzoom.inx b/private/unimodem/inf/mdmzoom.inx
new file mode 100644
index 000000000..e759490bc
--- /dev/null
+++ b/private/unimodem/inf/mdmzoom.inx
@@ -0,0 +1,390 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Zoom Telephonics, Inc.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEMF17C76B0
+ExcludeFromSelect=UNIMODEM78099CF5
+ExcludeFromSelect=UNIMODEM5C047344
+ExcludeFromSelect=UNIMODEMC162740C
+
+[Models]
+%Modem1% = Modem1, ZOOM_Modem1, UNIMODEM959C40CA
+%Modem1% = Modem1, UNIMODEME95168C4
+%Modem1% = Modem1, ZOOM_Modem1, UNIMODEM78099CF5
+%Modem2% = Modem2, UNIMODEM4C7391F9
+%Modem2% = Modem2, UNIMODEM8B8772CA
+%Modem3% = Modem3, UNIMODEM95D3EACB
+%Modem3% = Modem3, UNIMODEME5448F84
+%Modem3% = Modem3, ZOOM_Modem3, UNIMODEMC162740C
+%Modem4% = Modem4, UNIMODEM9324D5D5
+%Modem5% = Modem5, UNIMODEM1E353020
+%Modem5% = Modem5, UNIMODEM375D83F8
+%Modem6% = Modem6, UNIMODEM185D5F4F
+%Modem7% = Modem7, UNIMODEMEAF499D3
+%Modem8% = Modem8, UNIMODEMACDEA9A9
+%Modem9% = Modem9, UNIMODEM53A6E915
+%Modem10% = Modem10, UNIMODEM9E7BA41D
+%Modem10% = Modem10, ZOOM_Modem10, UNIMODEM78099CF5
+%Modem10% = Modem10, UNIMODEMA3B609C9
+%Modem11% = Modem1, UNIMODEMFBA0938F
+%Modem11% = Modem1, UNIMODEM753CA81C
+%Modem12% = Modem10, UNIMODEM99FF8A06
+%Modem12% = Modem10, UNIMODEM3DC89C12
+%Modem13% = Modem1, UNIMODEM2B41F717
+%Modem14% = Modem14, UNIMODEMC1B9FDCD
+%Modem15% = Modem15, UNIMODEM0CCBF371
+%Modem16% = Modem16, UNIMODEM11C530AE
+%Modem16% = Modem16, UNIMODEM6689F803
+%Modem17% = Modem17, UNIMODEM644F938E
+%Modem18% = Modem18, UNIMODEM02A7F902
+%Modem19% = Modem19, UNIMODEMB3C93738
+%Modem20% = Modem20, UNIMODEM58BF97E1
+%Modem21% = Modem21, UNIMODEM894FC955
+%Modem22% = Modem22, ZOOM_Modem22, UNIMODEM733C4E29
+%Modem23% = Modem23, ZOOM_Modem23, UNIMODEMA3EEEF33
+%Modem24% = Modem24, ZOOM_Modem24, UNIMODEMF17C76B0
+%Modem25% = Modem24, UNIMODEMF17C76B0
+%Modem26% = Modem26, UNIMODEMC70560FF
+%Modem27% = Modem1, UNIMODEM78099CF5
+%Modem28% = Modem28, PCMCIA\ZOOM_TELEPHONICS_PCMCIA_9624__-3CA1
+%Modem28% = Modem28, PCMCIA\ZOOM_TELEPHONICS-PCMCIA_LC-5EE9
+%Modem28% = Modem28, ZOOM_Modem28, UNIMODEM9F2BBC58
+%Modem29% = Modem29, PCMCIA\ZOOM_TELEPHONICS-PCMCIA_14.4C-B698
+%Modem29% = Modem29, ZOOM_Modem29, UNIMODEM5C047344
+%Modem30% = Modem30, UNIMODEM5C047344
+%Modem31% = Modem31, ZOOM_Modem31, UNIMODEM535147EF
+%Modem32% = Modem3, ZOOM_Modem32, UNIMODEMC162740C
+%Modem33% = Modem3, UNIMODEMC162740C
+%Modem34% = Modem34, UNIMODEM6C97F65F
+%Modem35% = Modem35, UNIMODEMBAA73236
+
+
+[Modem1]
+AddReg=All, Modem1Reg, EXTERNAL
+
+[Modem2]
+AddReg=All, Modem2Reg, EXTERNAL, Cellular
+
+[Modem3]
+AddReg=All, Modem2Reg, INTERNAL, Cellular
+
+[Modem4]
+AddReg=All, Modem4Reg, EXTERNAL, Cellular
+
+[Modem5]
+AddReg=All, Modem4Reg, INTERNAL, Cellular
+
+[Modem6]
+AddReg=All, Modem6Reg, EXTERNAL, Cellular
+
+[Modem7]
+AddReg=All, Modem6Reg, INTERNAL, Cellular
+
+[Modem8]
+AddReg=All, Modem1Reg, EXTERNAL
+
+[Modem9]
+AddReg=All, Modem1Reg, INTERNAL
+
+[Modem10]
+AddReg=All, Modem1Reg, INTERNAL
+
+[Modem14]
+AddReg=All, Modem14Reg, EXTERNAL
+
+[Modem15]
+AddReg=All, Modem14Reg, INTERNAL
+
+[Modem16]
+AddReg=All, Modem16Reg, EXTERNAL
+
+[Modem17]
+AddReg=All, Modem16Reg, INTERNAL
+
+[Modem18]
+AddReg=All, Modem18Reg, EXTERNAL
+
+[Modem19]
+AddReg=All, Modem18Reg, INTERNAL
+
+[Modem20]
+AddReg=All, Modem20Reg, EXTERNAL
+
+[Modem21]
+AddReg=All, Modem20Reg, INTERNAL
+
+[Modem22]
+AddReg=All, Modem22Reg, INTERNAL
+
+[Modem23]
+AddReg=All, Modem22Reg, EXTERNAL
+
+[Modem24]
+AddReg=All, Modem24Reg, INTERNAL
+
+[Modem26]
+AddReg=All, Modem26Reg, EXTERNAL
+
+[Modem28]
+AddReg=All, Modem28Reg, PCMCIA
+
+[Modem29]
+AddReg=All, Modem29Reg, PCMCIA
+
+[Modem30]
+AddReg=All, Modem30Reg, PCMCIA
+
+[Modem31]
+AddReg=All, Modem31Reg, EXTERNAL
+
+[Modem34]
+AddReg=All, Modem34Reg, INTERNAL
+
+[Modem35]
+AddReg=All, Modem35Reg, EXTERNAL
+
+
+[Modem1Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+
+[Modem2Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+
+[Modem4Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Modem6Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, c0,5d,00,00
+
+[Modem14Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,96,00,00, 80,25,00,00
+
+[Modem16Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0Q0&C1&D2S0=0<cr>"
+
+[Modem18Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Settings, Compression_On,, "S46=138%%C3"
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem20Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 80,25,00,00, 60,09,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+
+[Modem22Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 *H0 -K1 -Q1 :E1 @M0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 *H0 -K1 -Q1 :E1 @M0"
+
+[Modem24Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0&D2&C1<cr>"
+
+[Modem26Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 80,25,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0&D2&C1S0=0<cr>"
+
+[Modem28Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 40,03,00,00, 60,09,00,00, 60,09,00,00
+HKR, Init, 2,, "AT&FE0V0Q0&C1&D2S0=0<cr>"
+
+[Modem29Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 -Q1 *H1 :E0 &Q5"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 -Q1 *H1 :E0 &Q5"
+
+[Modem30Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,01,00, 40,38,00,00
+HKR, Settings, ErrorControl_Cellular,, "\N3 )M1 -K1 -Q1 *H1 :E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "\N2 )M1 -K1 -Q1 *H1 :E0"
+HKR, Init, 2,, "AT&FE0V0Q0&C1&D2S95=47S0=0<cr>"
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+HKR, Settings, Compression_On,, "%%C3"
+HKR, Settings, Compression_Off,, "%%C0"
+
+[Modem31Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem34Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Settings, ErrorControl_On,, "\N3"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N2"
+
+[Modem35Reg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f0,03,00,00, 00,c2,01,00, 40,38,00,00
+
+
+[Strings]
+Mfg = "Zoom Telephonics, Inc."
+Modem1="Zoom VFX V.32bis"
+Modem2="Zoom VFX 28.8"
+Modem3="Zoom VFP 28.8"
+Modem4="Zoom VFX 19.2"
+Modem5="Zoom VFP 19.2"
+Modem6="Zoom VFX 24K"
+Modem7="Zoom VFP 24K"
+Modem8="Zoom VX V.32bis"
+Modem9="Zoom VP V.32bis"
+Modem10="Zoom VFP V.32bis"
+Modem11="Zoom VFX 14.4V"
+Modem12="Zoom VFP 14.4V"
+Modem13="Zoom PKT 14.4"
+Modem14="Zoom VX V.32"
+Modem15="Zoom VP V.32"
+Modem16="Zoom FX 9624"
+Modem17="Zoom FC 9624"
+Modem18="Zoom FX 9624V"
+Modem19="Zoom FC 9624V"
+Modem20="Zoom VFDX"
+Modem21="Zoom VFDI"
+Modem22="Zoom V.34I"
+Modem23="Zoom V.34X"
+Modem24="Zoom HC 2400"
+Modem25="2400 bps Modem"
+Modem26="Zoom 2400 V.42bis"
+Modem27="Zoom VFX or VFP V.32bis"
+Modem28="Zoom PCMCIA LC"
+Modem29="Zoom PCMCIA 14.4C"
+Modem30="14.4 PCMCIA Modem"
+Modem31="Zoom 14.4 PC"
+Modem32="Zoom Model 250 28.8 Data Fax"
+Modem33="Zoom Model 250 or VFP 28.8"
+Modem34="Zoom 14.4 PC Internal"
+Modem35="Zoom 14.4 EX"
+
+[Cellular]
+HKR, Settings, ErrorControl_Cellular,, "&Q5S36=7S48=7)M1\N3"
+HKR, Settings, ErrorControl_Cellular_Forced,, "&Q5S36=4S48=7)M1\N2"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[All]
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "AT&FE0V0Q0W1&C1&D2S95=47S0=0<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S30=<#>"
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&Q6S36=3S48=128\N0"
+HKR, Settings, ErrorControl_On,, "&Q5S36=7S48=7\N3"
+HKR, Settings, ErrorControl_Forced,, "&Q5S36=4S48=7\N2"
+HKR, Settings, Compression_Off,, "S46=136%%C0"
+HKR, Settings, Compression_On,, "S46=138%%C3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK - Command executed
+HKR, Responses, "1<cr>", 1, 02, 00, 2C,01,00,00, 00,00,00,00 ; CONNECT - Connection at 300 bps
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING - Ring signal indicated
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER - Carrier signal not detected, or lost, or inactivity caused hang up
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR - Invalid command, checksum, error in command line or command line too long
+HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200 - Connection at 1200 bps
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE - No dial tone detected
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY - Engaged (busy) signal or number unobtainable signal detected
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER - No silence detected when dialing a system not providing a dial tone
+HKR, Responses, "9<cr>", 1, 02, 00, 58,02,00,00, 00,00,00,00 ; CONNECT 600 - Connection at 600 bps
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ; CONNECT 2400 - Connection at 2400 bps
+HKR, Responses, "11<cr>", 1, 02, 00, C0,12,00,00, 00,00,00,00 ; CONNECT 4800 - Connection at 4800 bps
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ; CONNECT 9600 - Connection at 9600 bps
+HKR, Responses, "13<cr>", 1, 02, 00, 20,1C,00,00, 00,00,00,00 ; CONNECT 7200 - Connection at 7200 bps
+HKR, Responses, "14<cr>", 1, 02, 00, E0,2E,00,00, 00,00,00,00 ; CONNECT 12000 - Connection at 12000 bps
+HKR, Responses, "15<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ; CONNECT 14400 - Connection at 14400 bps
+HKR, Responses, "16<cr>", 1, 02, 00, 00,4B,00,00, 00,00,00,00 ; CONNECT 19200 - Connection at 19200 bps
+HKR, Responses, "17<cr>", 1, 02, 00, 00,96,00,00, 00,00,00,00 ; CONNECT 38400 - Connection at 38400 bps
+HKR, Responses, "18<cr>", 1, 02, 00, 00,E1,00,00, 00,00,00,00 ; CONNECT 57600 - Connection at 57600 bps
+HKR, Responses, "19<cr>", 1, 02, 00, 00,C2,01,00, 00,00,00,00 ; CONNECT 115200 - Connection at 115200 bps
+HKR, Responses, "22<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200/75 - Connection at 1200/75 bps
+HKR, Responses, "23<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 75/1200 - Connection at 75/1200 bps
+HKR, Responses, "24<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DELAYED
+HKR, Responses, "32<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; BLACKLISTED
+HKR, Responses, "33<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; FAX - FAX connection
+HKR, Responses, "35<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; DATA - DATA connection
+HKR, Responses, "40<cr>", 1, 01, 00, 2C,01,00,00, 00,00,00,00 ; CARRIER 300 - Carrier detected at 300 bps
+HKR, Responses, "44<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200/75 - Carrier detected at 1200/75 bps
+HKR, Responses, "45<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 75/1200 - Carrier detected at 75/1200 bps
+HKR, Responses, "46<cr>", 1, 01, 00, B0,04,00,00, 00,00,00,00 ; CARRIER 1200 - Carrier detected at 1200 bps
+HKR, Responses, "47<cr>", 1, 01, 00, 60,09,00,00, 00,00,00,00 ; CARRIER 2400 - Carrier detected at 2400 bps
+HKR, Responses, "48<cr>", 1, 01, 00, C0,12,00,00, 00,00,00,00 ; CARRIER 4800 - Carrier detected at 4800 bps
+HKR, Responses, "49<cr>", 1, 01, 00, 20,1C,00,00, 00,00,00,00 ; CARRIER 7200 - Carrier detected at 7200 bps
+HKR, Responses, "50<cr>", 1, 01, 00, 80,25,00,00, 00,00,00,00 ; CARRIER 9600 - Carrier detected at 9600 bps
+HKR, Responses, "51<cr>", 1, 01, 00, E0,2E,00,00, 00,00,00,00 ; CARRIER 12000 - Carrier detected at 12000 bps
+HKR, Responses, "52<cr>", 1, 01, 00, 40,38,00,00, 00,00,00,00 ; CARRIER 14400 - Carrier detected at 14400 bps
+HKR, Responses, "53<cr>", 1, 01, 00, A0,41,00,00, 00,00,00,00 ; CARRIER 16800 - Carrier detected at 16800 bps
+HKR, Responses, "54<cr>", 1, 01, 00, 00,4B,00,00, 00,00,00,00 ; CARRIER 19200 - Carrier detected at 19200 bps
+HKR, Responses, "55<cr>", 1, 01, 00, 60,54,00,00, 00,00,00,00 ; CARRIER 21600 - Carrier detected at 21600 bps
+HKR, Responses, "56<cr>", 1, 01, 00, C0,5D,00,00, 00,00,00,00 ; CARRIER 24000 - Carrier detected at 24000 bps
+HKR, Responses, "57<cr>", 1, 01, 00, 20,67,00,00, 00,00,00,00 ; CARRIER 26400 - Carrier detected at 26400 bps
+HKR, Responses, "58<cr>", 1, 01, 00, 80,70,00,00, 00,00,00,00 ; CARRIER 28800 - Carrier detected at 28800 bps
+HKR, Responses, "59<cr>", 1, 02, 00, A0,41,00,00, 00,00,00,00 ; CONNECT 16800 - Connection at 16800 bps
+HKR, Responses, "61<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ; CONNECT 21600 - Connection at 21600 bps
+HKR, Responses, "62<cr>", 1, 02, 00, C0,5D,00,00, 00,00,00,00 ; CONNECT 24000 - Connection at 24000 bps
+HKR, Responses, "63<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ; CONNECT 26400 - Connection at 26400 bps
+HKR, Responses, "64<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ; CONNECT 28800 - Connection at 28800 bps
+HKR, Responses, "66<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: CLASS 5 - MNP5 compression negotiated
+HKR, Responses, "67<cr>", 1, 01, 01, 00,00,00,00, 00,00,00,00 ; COMPRESSION: V.42BIS - V.42bis compression negotiated
+HKR, Responses, "69<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; COMPRESSION: NONE - No compression negotiated
+HKR, Responses, "70<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode (found by experimentation)
+HKR, Responses, "76<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ; PROTOCOL: NONE - Asynchronous mode (documented)
+HKR, Responses, "77<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: LAPM - V.42 LAPM error-control negotiated
+HKR, Responses, "80<cr>", 1, 01, 02, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT - Alternative protocol (MNP2-4 compatible) error-control negotiated
+HKR, Responses, "81<cr>", 1, 01, 0a, 00,00,00,00, 00,00,00,00 ; PROTOCOL: ALT-CELLULAR - Alternative protocol MNP10 error-control negotiated
+HKR, Responses, "+F4<cr>",1, 03, 00, 00,00,00,00, 00,00,00,00 ; +FCERROR - Invalid command, checksum, error in command line or command line too long
diff --git a/private/unimodem/inf/mdmzyp.inx b/private/unimodem/inf/mdmzyp.inx
new file mode 100644
index 000000000..03978a273
--- /dev/null
+++ b/private/unimodem/inf/mdmzyp.inx
@@ -0,0 +1,379 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: Zypcom
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+
+%Modem4% = Modem4, UNIMODEM65BEC774 ; Zypcom Z34-SX, external V.34
+%Modem3% = Modem3, UNIMODEM1F3B4265 ; Zypcom Z32b-PX Pocket
+%Modem2% = Modem2, UNIMODEM671FD766 ; Zypcom Z32b-SX
+%Modem1% = Modem1, UNIMODEM9D962D97 ; Zypcom Z32t-SX
+
+[Modem4] ; Zypcom Z34-SX, external V.34
+AddReg=All, MfgAddReg, Modem4.AddReg, External
+
+[Modem3] ; Zypcom Z32b-PX
+AddReg=All, MfgAddReg, Modem3.AddReg, External
+
+[Modem2] ; Zypcom Z32b-SX
+AddReg=All, MfgAddReg, Modem2.AddReg, External
+
+[Modem1] ; Zypcom Z32t-SX
+AddReg=All, MfgAddReg, Modem1.AddReg, External
+
+[Modem4.AddReg] ; Zypcom Z34-SX, external V.34
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 80,70,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 S0=0 &C1 &D2 W2<cr>"
+
+[Modem3.AddReg] ; Zypcom Z32b-PX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 00,00,00,00, 0f,00,00,00, 77,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR, Init, 2,, "AT &F S0=0 E0 V1 &D2 &C1 $X2<cr>"
+HKR, Settings, InactivityTimeout,, "S36=<#>"
+HKR,, InactivityScale, 1, 3c,00,00,00
+HKR, Settings, FlowControl_Off,, "$F5"
+HKR, Settings, FlowControl_Hard,, "$F4"
+HKR, Settings, FlowControl_Soft,, "$F0"
+HKR, Settings, ErrorControl_On,, "$E3"
+HKR, Settings, ErrorControl_Off,, "$E0"
+HKR, Settings, ErrorControl_Forced,, "$E4"
+HKR, Settings, Compression_On,, "$C1"
+HKR, Settings, Compression_Off,, "$C0"
+
+[Modem2.AddReg] ; Zypcom Z32b-SX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Modem1.AddReg] ; Zypcom Z32t-SX
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, f7,03,00,00, 00,c2,01,00, 00,4b,00,00
+
+[Strings]
+Mfg = "Zypcom"
+
+Modem4="Zypcom Z34-SX"
+Modem3="Zypcom Z32b-PX Pocket"
+Modem2="Zypcom Z32b-SX"
+Modem1="Zypcom Z32t-SX"
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[PCMCIA]
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1 \V1 S0=0 &C1 &D2<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ";"
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L2"
+HKR, Settings, SpeakerVolume_High,, "L3"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&K0"
+HKR, Settings, FlowControl_Hard,, "&K3"
+HKR, Settings, FlowControl_Soft,, "&K4"
+HKR, Settings, ErrorControl_On,, "\N7"
+HKR, Settings, ErrorControl_Off,, "\N0"
+HKR, Settings, ErrorControl_Forced,, "\N6"
+HKR, Settings, Compression_On,, "%%C1"
+HKR, Settings, Compression_Off,, "%%C0"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1 "
+HKR, Settings, SpeedNegotiation_Off,, "N0"
+HKR, Settings, SpeedNegotiation_On,, "N1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X4"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S40=<#>"
+
+HKR, Responses, "<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER
+HKR, Responses, "OK", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RING", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO CARRIER", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "ERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIALTONE", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO DIAL TONE",1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BUSY", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "NO ANSWER", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "FAX", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DATA", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "VOICE", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "RINGING", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "DELAYED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "BLACKLISTED", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "+FCERROR", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "CONNECT", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/ARQ", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/REL", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/MNP", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/LAP-M", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42BIS", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT/V42b", 1, 02, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300", 1, 02, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/ARQ", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/REL", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/MNP", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/LAP-M", 1, 02, 02, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42BIS", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 300/V42b", 1, 02, 03, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600", 1, 02, 00, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/ARQ", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/REL", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/MNP", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/LAP-M", 1, 02, 02, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42BIS", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 0600/V42b", 1, 02, 03, 58,02,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200/75/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 1200TX/75RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42BIS", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75/1200/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX", 1, 02, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/ARQ", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/REL", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/MNP", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/LAP-M", 1, 02, 02, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42BIS",1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 75TX/1200RX/V42b", 1, 02, 03, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/ARQ", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/REL", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/MNP", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/LAP-M", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42BIS", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 2400/V42b", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800", 1, 02, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/ARQ", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/REL", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/MNP", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/LAP-M", 1, 02, 02, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42BIS", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 4800/V42b", 1, 02, 03, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200", 1, 02, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/ARQ", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/REL", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/MNP", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/LAP-M", 1, 02, 02, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42BIS", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 7200/V42b", 1, 02, 03, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/ARQ", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/REL", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/MNP", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/LAP-M", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42BIS", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 9600/V42b", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000", 1, 02, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/ARQ", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/REL", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/MNP", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/LAP-M", 1, 02, 02, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42BIS", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 12000/V42b", 1, 02, 03, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/ARQ", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/REL", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/MNP", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/LAP-M", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42BIS", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 14400/V42b", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800", 1, 02, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/ARQ", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/REL", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/MNP", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/LAP-M", 1, 02, 02, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42BIS", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 16800/V42b", 1, 02, 03, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200", 1, 02, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/ARQ", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/REL", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/MNP", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/LAP-M", 1, 02, 02, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42BIS", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 19200/V42b", 1, 02, 03, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/ARQ", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/REL", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/MNP", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/LAP-M", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42BIS", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 21600/V42b", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000", 1, 02, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/ARQ", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/REL", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/MNP", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/LAP-M", 1, 02, 02, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42BIS", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 24000/V42b", 1, 02, 03, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/ARQ", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/REL", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/MNP", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/LAP-M", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42BIS", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 26400/V42b", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/ARQ", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/REL", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/MNP", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/LAP-M", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42BIS", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 28800/V42b", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/ARQ", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/REL", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/MNP", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/LAP-M", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42BIS", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 38400/V42b", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600", 1, 02, 00, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/ARQ", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/REL", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/MNP", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/LAP-M", 1, 02, 02, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42BIS", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 57600/V42b", 1, 02, 03, 00,E1,00,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200", 1, 02, 00, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/ARQ", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/REL", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/MNP", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/LAP-M", 1, 02, 02, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42BIS", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+HKR, Responses, "CONNECT 115,200/V42b", 1, 02, 03, 00,C2,01,00, 00,00,00,00
+
+HKR, Responses, "CARRIER 300", 1, 01, 00, 2C,01,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 1200/75", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 75/1200", 1, 01, 00, B0,04,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 2400", 1, 01, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 4800", 1, 01, 00, C0,12,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 7200", 1, 01, 00, 20,1C,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 9600", 1, 01, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 12000", 1, 01, 00, E0,2E,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 14400", 1, 01, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 16800", 1, 01, 00, A0,41,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 19200", 1, 01, 00, 00,4B,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 21600", 1, 01, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 24000", 1, 01, 00, C0,5D,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 26400", 1, 01, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "CARRIER 28800", 1, 01, 00, 80,70,00,00, 00,00,00,00
+
+HKR, Responses, "COMPRESSION: CLASS 5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: MNP5", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 BIS", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: V.42 bis", 1, 01, 03, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: ADC", 1, 01, 01, 00,00,00,00, 00,00,00,00
+HKR, Responses, "COMPRESSION: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "PROTOCOL: NONE", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ERROR-CONTROL/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: X.25/LAPB/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/HDX", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAPM/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: LAP-M/AFT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: ALT-CELLULAR", 1, 01, 0A, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP2", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP3", 1, 01, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "PROTOCOL: MNP4", 1, 01, 02, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmzyxel.inx b/private/unimodem/inf/mdmzyxel.inx
new file mode 100644
index 000000000..03181460b
--- /dev/null
+++ b/private/unimodem/inf/mdmzyxel.inx
@@ -0,0 +1,173 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ZyXEL
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=UNIMODEM0893644B
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem9% = Modem1, ZYXEL_Modem9 ; U-1496RE
+%Modem8% = Modem1, ZYXEL_Modem8 ; U-1496P
+%Modem7% = Modem6, ZYXEL_Modem7, UNIMODEM0893644B ; U-1496B
+%Modem6% = Modem6, ZYXEL_Modem6, UNIMODEM0893644B ; U-1496B Plus
+%Modem5% = Modem1, ZYXEL_Modem5 ; U-1496RE Plus
+%Modem4% = Modem1, ZYXEL_Modem4, UNIMODEM0893644B ; U-1496E Plus
+%Modem3% = Modem1, UNIMODEM0893644B
+%Modem2% = Modem1, UNIMODEM5403B1C4 ; U-1496E
+%Modem2% = Modem1, UNIMODEM64CA1E7B ; U-1496E
+%Modem2% = Modem1, UNIMODEM5D1E7F65 ; U-1496E
+%Modem2% = Modem1, ZYXEL_Modem2, UNIMODEM0893644B ; U-1496E
+%Modem1% = Modem1, ZYXEL_Modem1, UNIMODEM0893644B ; U-1496 Plus
+
+[Modem1]
+AddReg=All, MfgAddReg, Modem1.AddReg, EXTERNAL
+
+[Modem6]
+AddReg=All, MfgAddReg, Modem1.AddReg, INTERNAL
+
+[Modem1.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 77,03,00,00, 00,c2,01,00, 40,38,00,00
+
+[Strings]
+Mfg = "ZyXEL"
+Modem9="ZyXEL Fax U-1496RE"
+Modem8="ZyXEL Fax U-1496P"
+Modem7="ZyXEL Fax U-1496B"
+Modem6="ZyXEL Fax U-1496B Plus"
+Modem5="ZyXEL Fax U-1496RE Plus"
+Modem4="ZyXEL Fax U-1496E Plus"
+Modem3="ZyXEL Modem"
+Modem2="ZyXEL Fax Voice U-1496E"
+Modem1="ZyXEL Fax Voice U-1496 Plus"
+
+[EXTERNAL]
+HKR,, DeviceType, 1, 01
+
+[INTERNAL]
+HKR,, DeviceType, 1, 02
+
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR,, InactivityScale, 1, 01,00,00,00
+HKR, Init, 2,, "AT &F E0 V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT&F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, "";""
+HKR, Settings, SpeakerVolume_Low,, "L0"
+HKR, Settings, SpeakerVolume_Med,, "L4"
+HKR, Settings, SpeakerVolume_High,, "L7"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0"
+HKR, Settings, FlowControl_Hard,, "&H3"
+HKR, Settings, FlowControl_Soft,, "&H4"
+HKR, Settings, ErrorControl_On,, "&K4"
+HKR, Settings, ErrorControl_Off,, "&K0"
+HKR, Settings, ErrorControl_Forced,, "&K4*E1"
+HKR, Settings, Compression_On,, "&K4"
+HKR, Settings, Compression_Off,, "&K3"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "X7"
+HKR, Settings, Blind_On,, "X3"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 300<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 76800<cr><lf>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 76800/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/V42 <cr><lf>", 1, 02, 02, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42 <cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42 <cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42 <cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42 <cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42 <cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42 <cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42 <cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ/V42 <cr><lf>", 1, 02, 02, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ/V42 <cr><lf>", 1, 02, 02, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 76800/ARQ/V42 <cr><lf>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "<cr><lf>CONNECT 300/ARQ/V42b<cr><lf>", 1, 02, 03, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42b<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42b<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/ARQ/V42b<cr><lf>", 1, 02, 03, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/ARQ/V42b<cr><lf>", 1, 02, 03, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 76800/ARQ/V42b<cr><lf>", 1, 02, 03, 00,00,00,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmzyxld.inx b/private/unimodem/inf/mdmzyxld.inx
new file mode 100644
index 000000000..ad38e58d6
--- /dev/null
+++ b/private/unimodem/inf/mdmzyxld.inx
@@ -0,0 +1,631 @@
+; Windows'95 Modem Setup File
+; Copyright 1994-1996 Microsoft Corp.
+; Manufacturer: ZyXEL Comm. Corp.
+
+[Version]
+LayoutFile=layout.inf
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+%Mfg% = Models
+
+; Modem models
+
+[Models]
+%Modem17% = Modem17, ZYX_U1496SN ; U-1496SN external with LCD, 19k2, Network Management System
+%Modem16% = Modem16, ZYX_U1496RNP ; U-1496RN+ Rack-mounted Card, 19k2, NMS-Version
+%Modem15% = Modem15, ZYX_U1496RN ; U-1496RN Rack-mounted Card, 16k8, NMS-Version
+%Modem14% = Modem14, ZYX_U1496R ; U-1496R Rack-mounted Card, 16k8
+%Modem13% = Modem13, ZYX_U1496RP ; U-1496R+ Rack-mounted Card, 19k2
+%Modem12% = Modem12, ZYX_U1496EG ; U-1496EG external with LEDs, 16k8, German PTT approved
+%Modem11% = Modem11, ZYX_U1496EGP ; U-1496EG+ external with LEDs, 19k2, German PTT approved
+%Modem10% = Modem10, ZYX_U1496EA ; U-1496EA external with LEDs, 16k8, Austrian PTT approved
+%Modem9% = Modem9, ZYX_U1496EAP ; U-1496EA+ external with LEDs, 19k2, Austrian PTT approved
+%Modem8% = Modem8, ZYX_U1496A ; U-1496A external with LCD, 19k2, Austrian PTT approved
+%Modem7% = Modem7, ZYX_U1496P ; U-1496P external pocket modem, 16k8
+%Modem6% = Modem6, ZYX_U1496B ; U-1496B internal PC-Card, 16k8
+%Modem5% = Modem5, ZYX_U1496BP ; U-1496B+ internal PC-Card, 16k8
+%Modem4% = Modem4, ZYX_U1496E ; U-1496E external with LEDs, 16k8
+%Modem3% = Modem3, ZYX_U1496EP ; U-1496E+ external with LEDs, 19k2
+%Modem2% = Modem2, ZYX_U1496S ; U-1496S external with non back-light LCD, 16k8
+%Modem1% = Modem1, ZYX_U1496SP ; U-1496S+ external with back-light LCD, 19k2
+%Modem0% = Modem0, ZYX_Modem0, UNIMODEM5403B1C4 ; U-1496 external (E,E+,S,S+,P), V32b and Fax Class 2
+%Modem0% = Modem0, ZYX_Modem0, UNIMODEM64CA1E7B ; U-1496 external (E,E+,S,S+,P), V32b and Fax Class 2
+%Modem0% = Modem0, ZYX_Modem0, UNIMODEM5D1E7F65 ; U-1496 external (E,E+,S,S+,P), V32b and Fax Class 2
+%Modem0% = Modem0, ZYX_Modem0, UNIMODEM0893644B ; U-1496 external (E,E+,S,S+,P), V32b and Fax Class 2
+
+
+; Installation sections
+
+[Modem17] ; U-1496SN external LCD, 16k8, NMS-Version, Fax + Voice
+AddReg=All, MfgAddReg, Modem2.AddReg, Opt_FaxClass1
+
+[Modem16] ; U-1496RN+ Rack-mounted Card, 19k2, NMS-Version, Fax + Voice
+AddReg=All, MfgAddReg, Modem1.AddReg, Opt_FaxClass1
+
+[Modem15] ; U-1496RN Rack-mounted Card, 16k8, NMS-Version, Fax + Voice
+AddReg=All, MfgAddReg, Modem2.AddReg, Opt_FaxClass1
+
+[Modem14] ; U-1496R Rack-mounted Card, 16k8, Fax + Voice
+AddReg=All, MfgAddReg, Modem2.AddReg, Opt_FaxClass1
+
+[Modem13] ; U-1496R+ Rack-mounted Card, 19k2, Fax + Voice
+AddReg=All, MfgAddReg, Modem1.AddReg, Opt_FaxClass1
+
+[Modem12] ; U-1496EG external with LEDs, 16k8, German PTT approved
+AddReg=All, MfgAddReg, Modem10.AddReg, Opt_FaxClass1, PTT_approved
+
+[Modem11] ; U-1496EG+ external with LEDs, 19k2, German PTT approved
+AddReg=All, MfgAddReg, Modem9.AddReg, Opt_FaxClass1, PTT_approved
+
+[Modem10] ; U-1496EA external with LEDs, 16k8, Austrian PTT approved
+AddReg=All, MfgAddReg, Modem10.AddReg, Opt_FaxClass1, PTT_approved
+
+[Modem9] ; U-1496EA+ external with LEDs, 19k2, Austrian PTT approved
+AddReg=All, MfgAddReg, Modem9.AddReg, Opt_FaxClass1, PTT_approved
+
+[Modem8] ; U-1496A external with LCD, 19k2, Austrian PTT approved
+AddReg=All, MfgAddReg, Modem8.AddReg, Opt_FaxClass1, PTT_approved
+
+[Modem7] ; U-1496P external pocket modem, 16k8
+AddReg=All, MfgAddReg, Modem7.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem6] ; U-1496B internal PC-Card, 16k8
+AddReg=All, MfgAddReg, Modem6.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem5] ; U-1496B+ internal PC-Card, 16k8
+AddReg=All, MfgAddReg, Modem5.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem4] ; U-1496E external with LEDs, 16k8
+AddReg=All, MfgAddReg, Modem4.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem3] ; U-1496E+ external with LEDs, 19k2
+AddReg=All, MfgAddReg, Modem3.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem2] ; U-1496S external with non back-light LCD, 16k8
+AddReg=All, MfgAddReg, Modem2.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem1] ; U-1496S+ external with back-light LCD, 19k2
+AddReg=All, MfgAddReg, Modem1.AddReg, Opt_Cellular, Opt_FaxClass1
+
+[Modem0] ; U-1496 external (E,E+,S,S+), V32b and Fax Class 2 only
+AddReg=All, MfgAddReg, Modem0.AddReg, Opt_FaxClass2
+
+
+; AddReg sections
+
+[Modem10.AddReg] ; U-1496EA external with LEDs, 16k8, Austrian PTT approved
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, a0,41,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[Modem9.AddReg] ; U-1496EA+ external with LEDs, 19k2, Austrian PTT approved
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[Modem8.AddReg] ; U-1496A external with LCD, 19k2, Austrian PTT approved
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, 3c,00,00,00, 3c,00,00,00, 07,00,00,00, 0f,00,00,00, b7,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[Modem7.AddReg] ; U-1496P external pocket modem, 16k8
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, a0,41,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Init, 4,, "AT S49.7=1<cr>"
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+[Modem6.AddReg] ; U-1496B internal PC-Card, 16k8
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, PortDriver,, "serial.vxd"
+HKR,, Contention,, *vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, a0,41,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, ""
+
+[Modem5.AddReg] ; U-1496B+ internal PC-Card, 16k8
+HKR,, DeviceType, 1, 02 ; Internal
+HKR,, PortDriver,, "serial.vxd"
+HKR,, Contention,, *vcd
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, ""
+
+[Modem4.AddReg] ; U-1496E external with LEDs, 16k8
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, a0,41,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+[Modem3.AddReg] ; U-1496E+ external with LEDs, 19k2
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+[Modem2.AddReg] ; U-1496S external with non back-light LCD, 16k8
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, a0,41,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+[Modem1.AddReg] ; U-1496S+ external with back-light LCD, 19k2
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 00,4b,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+[Modem0.AddReg] ; U-1496 external (E,E+,S,S+), V32b and Fax Class 2
+HKR,, DeviceType, 1, 01 ; External
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,e1,00,00, 40,38,00,00
+HKR,, FClass, 1, 49,00,00,00
+HKR, Settings, InactivityTimeout,, ""
+
+; User visible strings
+
+[Strings]
+ClassName = "Modem"
+Mfg = "ZyXEL Comm. Corp."
+
+; Model strings
+Modem17="U-1496SN external LCD, 16k8, NMS-Version, Fax + Voice"
+Modem16="U-1496RN+ Rack-mounted Card, 19k2, NMS-Version, Fax + Voice"
+Modem15="U-1496RN Rack-mounted Card, 16k8, NMS-Version, Fax + Voice"
+Modem14="U-1496R Rack-mounted Card, 16k8, Fax + Voice"
+Modem13="U-1496R+ Rack-mounted Card, 19k2, Fax + Voice"
+Modem12="U-1496EG external with LEDs, 16k8, German PTT approved"
+Modem11="U-1496EG+ external with LEDs, 19k2, German PTT approved"
+Modem10="U-1496EA external with LEDs, 16k8, Austrian PTT approved"
+Modem9= "U-1496EA+ external with LEDs, 19k2, Austrian PTT approved"
+Modem8= "U-1496A external with LCD, 19k2, Austrian PTT approved"
+Modem7= "U-1496P external Pocket, 16k8, Fax + Voice"
+Modem6= "U-1496B internal PC-Card, 16k8, Fax + Voice"
+Modem5= "U-1496B+ internal PC-Card, 19k2, Fax + Voice"
+Modem4= "U-1496E external LED, 16k8, Fax + Voice"
+Modem3= "U-1496E+ external LED, 19k2, Fax + Voice"
+Modem2= "U-1496S external LCD, 16k8, Fax + Voice"
+Modem1= "U-1496S+ external LCD, 19k2, Fax + Voice"
+Modem0= "U-1496xx external (E,E+,S,S+), V32b and Fax Class 2 only"
+
+; --------------------------------------------------------------
+; Common Registry Sections
+
+[Opt_Cellular]
+HKR, Settings, Cellular_On,, "S43.3=0"
+HKR, Settings, Cellular_Off,, "S43.3=1"
+HKR, Settings, ErrorControl_Cellular,, "S43.3=0S57.5=1&K3*E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "S43.3=0S57.5=1&K3*E1"
+
+[Opt_FaxClass1]
+HKR, Fax, ModemFaxClasses,, "14" ; Fax Class: 0,1,2,2.0
+HKR, Fax, FixModemClass,, "1"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "+FLO=0"
+HKR, Fax, Class1FlowHW,, "+FLO=2"
+HKR, Fax, Class1FlowSW,, "+FLO=1"
+HKR, Fax, Cl1FCS,, "0"
+HKR, Fax, Cl1DontSync,, "1"
+
+[Opt_FaxClass2]
+HKR, Fax, ModemFaxClasses,, "4" ; Fax Class: 0,2
+HKR, Fax, FixModemClass,, "2"
+HKR, Fax, Class2FlowOff,, "&H0"
+HKR, Fax, Class2FlowHW,, "&H3"
+HKR, Fax, Class2FlowSW,, "&H4"
+
+
+[PTT_approved]
+HKR, Responses, "<cr><lf>STOP!<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Delayed 5 secs<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Delayed 60 secs<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>Delayed 2 hours<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BLACKLISTED<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>+FCERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "43<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+; The [All] section is installed for all modems.
+;
+[All]
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,PortSubClass,1,02
+HKR,,ConfigDialog,,modemui.dll
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Init, 1,, "AT &FE0X7<cr>"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[MfgAddReg]
+HKR, Init, 2,, "ATS35.1=0S35.7=1<cr>"
+HKR, Init, 3,, "ATS48.2=1S11=90<cr>"
+HKR, Monitor, 1,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR,, Reset,, "AT &F<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L4"
+HKR, Settings, SpeakerVolume_High,, "L7"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0"
+HKR, Settings, FlowControl_Hard,, "&H3"
+HKR, Settings, FlowControl_Soft,, "&H4"
+HKR, Settings, ErrorControl_Off,, "&K0"
+HKR, Settings, ErrorControl_On,, "&K3*E0"
+HKR, Settings, ErrorControl_Forced,, "&K3*E1"
+HKR, Settings, Compression_On,, "&K4"
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, SpeedNegotiation_Off,, "" ; DCE follows DTE => not implemented
+HKR, Settings, SpeedNegotiation_On,, "" ; DCE follows DTE => not implemented
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "S41.4=0"
+HKR, Settings, Blind_On,, "S41.4=1"
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+
+HKR, Fax, AnswerMode,, "2"
+HKR, Fax, DialToneWait,, "30"
+HKR, Fax, HangupDelay,, "60"
+HKR, Fax, CommaDelay,, "2"
+HKR, Fax, NumRings,, "2"
+HKR, Fax, BlindDial,, "2"
+HKR, Fax, Volume,, "2"
+HKR, Fax, SpeakerMode,, "1"
+HKR, Fax, DisableG3ECM,, "1"
+HKR, Fax, DisableMRSend,, "1"
+HKR, Fax, DisableMRRecv,, "1"
+HKR, Fax, CopyQualityCheckLevel,, "1"
+HKR, Fax, DontPurge,, "0"
+HKR, Fax, ModemIdCmd,, "ATI1"
+HKR, Fax, ExitCommand,, ""
+HKR, Fax, PreAnswerCommand,, ""
+HKR, Fax, PreDialCommand,, ""
+HKR, Fax, EnableV17Send,, "1"
+HKR, Fax, EnableV17Recv,, "1"
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, HighestSendSpeed,, "14400"
+HKR, Fax, LowestSendSpeed,, "2400"
+
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "13<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "15<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "16<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "17<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "18<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00
+HKR, Responses, "20<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00
+HKR, Responses, "21<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+;
+HKR, Responses, "30<cr>", 1, 02, 02, 00,00,00,00, 00,00,00,00
+HKR, Responses, "31<cr>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "32<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "33<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "34<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "35<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "36<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "37<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "38<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "39<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42 <cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42 <cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42 <cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42 <cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42 <cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/MNP4<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42 <cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42b<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/MNP4<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42 <cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42 /SREJ<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42b<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V42b/SREJ<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+;
+;
+; CONNECT Responses if S57.5=1
+;
+;
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22 /V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b /V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b /V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32 /V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32 /V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /V42 <cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /V42 /SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32 /V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /V42 <cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /V42 /SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32 /V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /V42 <cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /V42 /SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32 /V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /V42 <cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /V42 /SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b /V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /MNP4<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /V42 <cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /V42 /SREJ<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /V42b<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX /V42b/SREJ<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+;
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /MNP4<cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /V42 <cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /V42 /SREJ<cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /MNP5<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /V42b<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL /V42b/SREJ<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+;
+
diff --git a/private/unimodem/inf/mdmzyxlg.inx b/private/unimodem/inf/mdmzyxlg.inx
new file mode 100644
index 000000000..8bba6337b
--- /dev/null
+++ b/private/unimodem/inf/mdmzyxlg.inx
@@ -0,0 +1,905 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ZyXEL Comm. Corp.
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[ControlFlags]
+ExcludeFromSelect=SERENUM\ZYX0900 ; 0
+ExcludeFromSelect=SERENUM\ZYX09FF ; 255
+ExcludeFromSelect=SERENUM\ZYX09EE ; 238
+ExcludeFromSelect=SERENUM\ZYX09ED ; 237
+ExcludeFromSelect=SERENUM\ZYX09EA ; 234
+ExcludeFromSelect=SERENUM\ZYX0400 ; 0
+ExcludeFromSelect=SERENUM\ZYX04FF ; 255
+ExcludeFromSelect=SERENUM\ZYX04ED ; 237
+ExcludeFromSelect=SERENUM\ZYX04E9 ; 233
+ExcludeFromSelect=SERENUM\ZYX0200 ; 0
+ExcludeFromSelect=SERENUM\ZYX02FF ; 255
+ExcludeFromSelect=SERENUM\ZYX02EE ; 238
+ExcludeFromSelect=SERENUM\ZYX02ED ; 237
+ExcludeFromSelect=SERENUM\ZYX02EA ; 234
+ExcludeFromSelect=SERENUM\ZYX0100 ; 0
+ExcludeFromSelect=SERENUM\ZYX01FF ; 255
+ExcludeFromSelect=SERENUM\ZYX01ED ; 237
+ExcludeFromSelect=SERENUM\ZYX01E9 ; 233
+
+[Modem09.NoResDup]
+UNIMODEM9BD61883,UNIMODEM44C16351,UNIMODEMA256A0A5,UNIMODEM5A549625,UNIMODEM49ED8447
+[Modem04.NoResDup]
+UNIMODEMCBEE6272,UNIMODEM2BE845F2
+[Modem02.NoResDup]
+UNIMODEM690AE48E,UNIMODEMA59A7B1E,UNIMODEM4676FED3,UNIMODEM0180E031,UNIMODEMDF274738,UNIMODEM10CDBC5E,UNIMODEM71C36BA5,UNIMODEMCB468063,UNIMODEM21DC6926,UNIMODEMA37C17F6
+[Modem01.NoResDup]
+UNIMODEM61BEAC5C,UNIMODEMD3D19397
+
+[Manufacturer]
+%Mfg% = Models
+
+[Models]
+%Modem114% = Modem114, ZYX_E2864I_114
+%Modem113% = Modem113, ZYX_E2864I_113
+%Modem112% = Modem112, ZYX_E2864I_112
+%Modem111% = Modem111, ZYX_E2864I_111
+%Modem110% = Modem110, ZYX_E2864I_110
+%Modem109% = Modem109, ZYX_E2864I_109
+%Modem108% = Modem108, ZYX_E2864I_108
+%Modem107% = Modem107, ZYX_E2864I_107
+%Modem106% = Modem106, ZYX_E2864I_106
+%Modem105% = Modem105, ZYX_E2864I_105
+%Modem104% = Modem104, ZYX_E2864I_104
+%Modem103% = Modem103, ZYX_E2864I_103
+%Modem102% = Modem102, ZYX_E2864I_102
+%Modem101% = Modem101, ZYX_E2864I_101
+%Modem100% = Modem100, ZYX_E2864__100
+%Modem09PNP% = Modem09, SERENUM\ZYX0900 ;0
+%Modem09PNP% = Modem09, SERENUM\ZYX09FF ;255
+%Modem09PNP% = Modem09, SERENUM\ZYX09EE ;238
+%Modem09PNP% = Modem09, SERENUM\ZYX09ED ;237
+%Modem09PNP% = Modem09, SERENUM\ZYX09EA ;234
+%Modem04PNP% = Modem04, SERENUM\ZYX0400 ;0
+%Modem04PNP% = Modem04, SERENUM\ZYX04FF ;255
+%Modem04PNP% = Modem04, SERENUM\ZYX04ED ;237
+%Modem04PNP% = Modem04, SERENUM\ZYX04E9 ;233
+%Modem02PNP% = Modem02, SERENUM\ZYX0200 ;0
+%Modem02PNP% = Modem02, SERENUM\ZYX02EE ;238
+%Modem02PNP% = Modem02, SERENUM\ZYX02ED ;237
+%Modem02PNP% = Modem02, SERENUM\ZYX02EA ;234
+%Modem02PNP% = Modem02, SERENUM\ZYX02FF ;255
+%Modem01PNP% = Modem01, SERENUM\ZYX0100 ;0
+%Modem01PNP% = Modem01, SERENUM\ZYX01FF ;255
+%Modem01PNP% = Modem01, SERENUM\ZYX01ED ;237
+%Modem01PNP% = Modem01, SERENUM\ZYX01E9 ;233
+%Modem09% = Modem09, UNIMODEM9BD61883 ;O128IA v0.05
+%Modem09% = Modem09, UNIMODEM44C16351 ;O128IG v0.05
+%Modem09% = Modem09, UNIMODEMA256A0A5 ;O128IE v0.05
+%Modem09% = Modem09, UNIMODEM5A549625 ;O128IT v0.05
+%Modem09% = Modem09, UNIMODEM49ED8447 ;O128IJ v0.05
+%Modem04% = Modem04, UNIMODEMCBEE6272 ;O288S v1.12a
+%Modem04% = Modem04, UNIMODEM2BE845F2 ;O288S v1.12
+%Modem02% = Modem02, UNIMODEM690AE48E ;E2864IA v2.02
+%Modem02% = Modem02, UNIMODEMA59A7B1E ;E2864IG v2.02
+%Modem02% = Modem02, UNIMODEM4676FED3 ;E2864IJ v2.02
+%Modem02% = Modem02, UNIMODEM0180E031 ;E2864IT v2.02
+%Modem02% = Modem02, UNIMODEMDF274738 ;E2864IE v2.02
+%Modem02% = Modem02, UNIMODEMA37C17F6 ;E2864IA v2.01
+%Modem02% = Modem02, UNIMODEM21DC6926 ;E2864IG v2.01
+%Modem02% = Modem02, UNIMODEMCB468063 ;E2864IJ v2.01
+%Modem02% = Modem02, UNIMODEM71C36BA5 ;E2864IT v2.01
+%Modem02% = Modem02, UNIMODEM10CDBC5E ;E2864IE v2.01
+%Modem01% = Modem01, UNIMODEM61BEAC5C ;E2864 v1.12
+%Modem01% = Modem01, UNIMODEMD3D19397 ;E2864 v1.11
+%Modem3% = Modem3, UNIMODEMA310F18E ;E2864IA USA: v1.09g
+%Modem3% = Modem3, UNIMODEM4429A58E ;E2864IA USA: v1.0x
+%Modem3% = Modem3, UNIMODEM7F1D72EB ;E2864IA USA:v1.01
+%Modem2% = Modem2, UNIMODEMB66EB958 ;E2864IG 1TR6: v1.10
+%Modem2% = Modem2, UNIMODEM7F47DF7A ;E2864IG 1TR6: v1.0x
+%Modem2% = Modem2, UNIMODEM4473081F ;E2864IG 1TR6:v1.01
+%Modem2% = Modem2, UNIMODEM5C0B54D9 ;E2864IE Taiwan: v1.10
+%Modem2% = Modem2, UNIMODEM9833A635 ;E2864IE Japan: v1.10
+%Modem2% = Modem2, UNIMODEM062609DE ;E2864IE DSS1: v1.10
+%Modem2% = Modem2, UNIMODEM49C12BCE ;E2864IE DSS1: v1.0x
+%Modem2% = Modem2, UNIMODEM72F5FCAB ;E2864IE DSS1:v1.01
+%Modem1% = Modem1, UNIMODEM950A0C7F ;E2864Ix xxxx:v1.10
+%Modem1% = Modem1, UNIMODEME8BECDAC ;E2864Ix xxxx:v1.0x
+
+; User visible strings
+[Strings]
+ClassName = "Modem"
+Mfg = "ZyXEL Comm. Corp."
+Modem114="ZyXEL FAX to PRINTER (HP DJ-500), Elite 2864I ISDN v2.x"
+Modem113="ZyXEL ISDN V.120 64k0, Elite 2864I ISDN v2.x"
+Modem112="ZyXEL ISDN V.110 57k6 (for Japan only), Elite 2864I ISDN v2.x"
+Modem111="ZyXEL ISDN V.110 38k4, Elite 2864I ISDN v2.x"
+Modem110="ZyXEL ISDN V.110 19k2, Elite 2864I ISDN v2.x"
+Modem109="ZyXEL ISDN X.75 64k0, Elite 2864I ISDN v2.x"
+Modem108="ZyXEL MODEM V.34 28k8, Elite 2864I ISDN v2.x"
+Modem107="ZyXEL SPEECH v2.x connection (over ab-Adapter), Elite 2864I ISDN v2.x"
+Modem106="ZyXEL async SLIP to sync HDLC - 64k0, Elite 2864I ISDN v2.x"
+Modem105="ZyXEL async PPP to sync HDLC - 64k0, Elite 2864I ISDN v2.x"
+Modem104="ZyXEL ISDN X.75 CCB 128k0, Elite 2864I ISDN v2.x"
+Modem103="ZyXEL ISDN X.75 MLP 128k0, Elite 2864I ISDN v2.x"
+Modem102="ZyXEL T-Online Service (for Germany only), Elite 2864I ISDN"
+Modem101="ZyXEL FAX into DRAM, Elite 2864I ISDN v2.x"
+Modem100="ZyXEL FAX into DRAM, Elite 2864 POTS v1.x"
+Modem09PNP="ZyXEL ISDN Omni TA128, Plug and Play"
+Modem04PNP="ZyXEL MODEM Omni 288S, Plug and Play"
+Modem02PNP="ZyXEL ISDN Elite 2864I, Plug and Play"
+Modem01PNP="ZyXEL MODEM Elite 2864, Plug and Play"
+Modem09="ZyXEL ISDN Omni TA128"
+Modem04="ZyXEL MODEM Omni 288S"
+Modem02="ZyXEL ISDN Elite 2864I"
+Modem01="ZyXEL MODEM Elite 2864"
+Modem3="ZyXEL ISDN V.120 64k0, Elite 2864I ISDN v1.x"
+Modem2="ZyXEL ISDN X.75 64k0, Elite 2864I ISDN v1.x"
+Modem1="ZyXEL MODEM V.34 28k8, Elite 2864I ISDN v1.x"
+
+; Installation sections
+[Modem114]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE0, ISDN.Fax.DJ500
+[Modem113]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, V.120
+[Modem112]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, V.110.57
+[Modem111]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, V.110.38
+[Modem110]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, V.110.19
+[Modem109]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, X.75
+[Modem108]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE0, V.34
+[Modem107]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE3, AB.v2
+[Modem106]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, SLIP
+[Modem105]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, PPP
+[Modem104]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, X.75, CCB
+[Modem103]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, X.75, MLP
+[Modem102]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, DTXJ
+[Modem101]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE0, ISDN.Fax.DRAM
+[Modem100]
+AddReg=All, Mfg.AddReg, POTS.AddReg, POTS.Fax.DRAM
+
+[Modem09]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, X.75
+[Modem04]
+AddReg=All, Mfg.AddReg, POTS.AddReg
+[Modem02]
+AddReg=All, Mfg.AddReg, ISDN.DTE0, ISDN.AddReg, V.34
+[Modem01]
+AddReg=All, Mfg.AddReg, POTS.AddReg
+
+[Modem3]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, V.120, ISDN.v1
+[Modem2]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE2, X.75, ISDN.v1
+[Modem1]
+AddReg=All, Mfg.AddReg, ISDN.AddReg, ISDN.DTE0, V.34, ISDN.v1
+
+; AddReg sections
+[ISDN.v1]
+HKR, Init, 5,, "ATS110.4=1<cr>"
+HKR, Settings, Compression_On,, "&K4"
+
+[ISDN.DTE0]
+HKR, Init, 2,, "AT&O0<cr>"
+[ISDN.DTE1]
+HKR, Init, 2,, "AT&O1<cr>"
+[ISDN.DTE2]
+HKR, Init, 2,, "AT&O2<cr>"
+[ISDN.DTE3]
+HKR, Init, 2,, "AT&O3<cr>"
+
+[V.34]
+HKR, Init, 3,, "ATB0<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,01,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 5f,00,00,00
+
+[V.110.19]
+HKR, Init, 3,, "ATB17S119.4=0S80.6=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,4b,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[V.110.38]
+HKR, Init, 3,, "ATB18S119.4=1S80.6=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,96,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[V.110.57]
+HKR, Init, 3,, "ATB19S80.6=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,e1,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[V.120]
+HKR, Init, 3,, "ATB20S80.6=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 03,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[X.75]
+HKR, Init, 3,, "ATB00S80.6=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 03,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[DTXJ]
+HKR, Init, 3,, "ATB04CL125<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[PPP]
+HKR, Init, 3,, "ATB40<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[SLIP]
+HKR, Init, 3,, "ATB41<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 00,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[MLP]
+HKR, Init, 6,, "AT&J3S100=0<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 03,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[CCB]
+HKR, Init, 6,, "AT&J3S100=1<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 00,00,00,00, 00,00,00,00, 03,01,00,00, 00,C2,01,00, 00,F4,01,00
+HKR,, FClass, 1, 01,00,00,00
+
+[AB.v2]
+HKR, Init, 3,, "AT<cr>"
+HKR, Init, 6,, "AT&L0S118.5=1S111.0=1S118.6=0<cr>"
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, 00,00,00,00, 07,00,00,00, 0f,00,00,00, 00,01,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 01,00,00,00
+
+[POTS.Fax.DRAM]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,01,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 08,00,00,00
+HKR, Fax, ResetCommand,, "AT&FE0+FCLASS=Z+FZF=5"
+HKR, Fax, SetupCommand,, "ATS0=4&W0&FE0+FCLASS=2"
+HKR, Fax, ExitCommand,, "AT&FE0"
+HKR, Fax, FixModemClass,,"2"
+HKR, Fax, PreAnswerCommand,, ""
+HKR, Fax, PreDialCommand,, ""
+HKR, Fax, AnswerMode,, "1"
+HKR, Fax, ModemFaxClasses,, "4"
+HKR, Monitor, 1,, "ATZ<cr>"
+HKR, Init, 3,, "AT<cr>"
+
+[ISDN.Fax.DRAM]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,01,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 08,00,00,00
+HKR, Fax, ResetCommand,, "AT&FE0&O0&L1+FCLASS=Z+FZF=5"
+HKR, Fax, SetupCommand,, "ATS0=4&W0&FE0&O0&L1+FCLASS=2"
+HKR, Fax, ExitCommand,, "AT&FE0&O0&L1"
+HKR, Fax, FixModemClass,,"2"
+HKR, Fax, PreAnswerCommand,, ""
+HKR, Fax, PreDialCommand,, ""
+HKR, Fax, AnswerMode,, "1"
+HKR, Fax, ModemFaxClasses,, "4"
+HKR, Fax, ExitCommand,, "ATZ"
+HKR, Monitor, 1,, "ATZ<cr>"
+HKR, Init, 3,, "AT<cr>"
+
+[ISDN.Fax.DJ500]
+HKR,, Properties, 1, 00,00,00,00, 00,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, 7f,01,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 08,00,00,00
+HKR, Fax, ResetCommand,, "AT&FE0&O0&L1+FCLASS=Z+FZF=1"
+HKR, Fax, SetupCommand,, "ATS0=4S72=0S73.3=1S73.5=1S73.6=1&W0&FE0&O0&L1+FCLASS=1"
+HKR, Fax, ExitCommand,, "AT&FE0&O0&L1"
+HKR, Fax, FixModemClass,,"1"
+HKR, Fax, PreAnswerCommand,, ""
+HKR, Fax, PreDialCommand,, ""
+HKR, Fax, AnswerMode,, "1"
+HKR, Fax, ModemFaxClasses,, "4"
+HKR, Fax, ExitCommand,, "ATZ"
+HKR, Monitor, 1,, "ATZ<cr>"
+HKR, Init, 3,, "AT<cr>"
+
+[All]
+HKR,, DeviceType, 1, 01
+HKR,,FriendlyDriver,,unimodem.vxd
+HKR,,DevLoader,,*vcomm
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 00, 2c,01,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RING<cr><lf>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO CARRIER<cr><lf>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>ERROR <cr><lf>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200<cr><lf>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO DIALTONE<cr><lf>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>BUSY<cr><lf>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>NO ANSWER<cr><lf>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>RINGING<cr><lf>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+[POTS.AddReg]
+HKR,, Properties, 1, 80,01,00,00, ff,00,00,00, ff,00,00,00, 07,00,00,00, 0f,00,00,00, ff,03,00,00, 00,C2,01,00, 40,83,00,00
+HKR,, FClass, 1, 5f,00,00,00
+HKR, Init, 2,, "ATS11=90S57.4=1<cr>"
+HKR, Settings, Pulse,, "P"
+HKR, Settings, Tone,, "T"
+HKR, Settings, Blind_Off,, "S41.4=0"
+HKR, Settings, Blind_On,, "S41.4=1"
+HKR, Settings, Modulation_CCITT,, "B0"
+HKR, Settings, Modulation_Bell,, "B1"
+HKR, Settings, Cellular_On,, "S43.3=0"
+HKR, Settings, Cellular_Off,, "S43.3=1"
+HKR, Settings, ErrorControl_Cellular,, "S43.3=0S57.5=1&K3*E0"
+HKR, Settings, ErrorControl_Cellular_Forced,, "S43.3=0S57.5=1&K3*E1"
+HKR, Fax, SetupCommand,, "ATS7=255&D3S57.4=1"
+
+[ISDN.AddReg]
+HKR, Settings, Pulse,, "I"
+HKR, Settings, Tone,, "M"
+HKR, Settings, Blind_Off,, ""
+HKR, Settings, Blind_On,, ""
+HKR, Settings, Modulation_CCITT,, ""
+HKR, Settings, Modulation_Bell,, ""
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, Compression_On,, "&K4&K44"
+HKR, Init, 4,, "AT&L1S43.3=1S48.2=1<cr>"
+HKR, Init, 5,, "ATS84.4=1S104=1S108=2<cr>"
+HKR, Fax, SetupCommand,, "ATS7=255&D3&O0&L1S57.4=1"
+
+[Mfg.AddReg]
+HKR,, InactivityScale, 1, 0a,00,00,00
+HKR,, Reset,, "ATZ<cr>"
+HKR, Init, 1,, "AT&FE0X7<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Hangup, 1,, "ATH0<cr>"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Settings, Terminator,, "<cr>"
+HKR, Settings, DialPrefix,, "D"
+HKR, Settings, DialSuffix,, ""
+HKR, Settings, SpeakerVolume_Low,, "L1"
+HKR, Settings, SpeakerVolume_Med,, "L4"
+HKR, Settings, SpeakerVolume_High,, "L7"
+HKR, Settings, SpeakerMode_Off,, "M0"
+HKR, Settings, SpeakerMode_Dial,, "M1"
+HKR, Settings, SpeakerMode_On,, "M2"
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Settings, FlowControl_Off,, "&H0"
+HKR, Settings, FlowControl_Hard,, "&H3"
+HKR, Settings, FlowControl_Soft,, "&H4"
+HKR, Settings, ErrorControl_Off,, "&K0"
+HKR, Settings, ErrorControl_On,, "&K3*E0"
+HKR, Settings, ErrorControl_Forced,, "&K3*E1"
+HKR, Settings, Compression_On,, "&K4"
+HKR, Settings, Compression_Off,, ""
+HKR, Settings, SpeedNegotiation_Off,, ""
+HKR, Settings, SpeedNegotiation_On,, ""
+HKR, Settings, CallSetupFailTimer,, "S7=<#>"
+HKR, Settings, InactivityTimeout,, "S50=<#>"
+
+HKR, Fax, AnswerMode,, "2"
+HKR, Fax, DialToneWait,, "30"
+HKR, Fax, HangupDelay,, "60"
+HKR, Fax, CommaDelay,, "2"
+HKR, Fax, NumRings,, "2"
+HKR, Fax, BlindDial,, "2"
+HKR, Fax, Volume,, "2"
+HKR, Fax, SpeakerMode,, "1"
+HKR, Fax, DisableG3ECM,, "1"
+HKR, Fax, DisableMRSend,, "1"
+HKR, Fax, DisableMRRecv,, "1"
+HKR, Fax, CopyQualityCheckLevel,, "1"
+HKR, Fax, DontPurge,, "0"
+HKR, Fax, ModemFaxClasses,, "14" ; Fax Class: 0,1,2,2.0
+HKR, Fax, ModemIdCmd,, "ATI1"
+HKR, Fax, ExitCommand,, ""
+HKR, Fax, PreAnswerCommand,, ""
+HKR, Fax, PreDialCommand,, ""
+HKR, Fax, FixModemClass,, "1"
+HKR, Fax, EnableV17Send,, "1"
+HKR, Fax, EnableV17Recv,, "1"
+HKR, Fax, FixSerialSpeed,, "19200"
+HKR, Fax, HighestSendSpeed,, "14400"
+HKR, Fax, LowestSendSpeed,, "2400"
+HKR, Fax, Class1DTESpeed,, "AUTO"
+HKR, Fax, Class1FlowOff,, "+FLO=0"
+HKR, Fax, Class1FlowHW,, "+FLO=2"
+HKR, Fax, Class1FlowSW,, "+FLO=1"
+HKR, Fax, Class2FlowOff,, "+FLO=0"
+HKR, Fax, Class2FlowHW,, "+FLO=2"
+HKR, Fax, Class2FlowSW,, "+FLO=1"
+HKR, Fax, Cl1FCS,, "0"
+HKR, Fax, Cl1DontSync,, "1"
+
+HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "5<cr>", 1, 02, 00, b0,04,00,00, 00,00,00,00
+HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00
+HKR, Responses, "9<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+HKR, Responses, "19<cr>", 1, 02, 00, 00,00,00,00, 00,96,00,00 ;38400
+HKR, Responses, "20<cr>", 1, 02, 00, 00,00,00,00, 00,e1,00,00 ;57600
+HKR, Responses, "21<cr>", 1, 02, 00, 00,00,00,00, 00,2c,01,00 ;76800
+HKR, Responses, "22<cr>", 1, 02, 00, 00,00,00,00, 00,c2,01,00 ;115200
+HKR, Responses, "23<cr>", 1, 02, 00, 00,00,00,00, 00,84,03,00 ;230400
+HKR, Responses, "24<cr>", 1, 02, 00, 00,00,00,00, 00,08,07,00 ;460800
+HKR, Responses, "25<cr>", 1, 02, 00, 00,00,00,00, 00,10,0e,00 ;921600
+HKR, Responses, "26<cr>", 1, 02, 00, 00,00,00,00, 00,b0,04,00 ;307200
+HKR, Responses, "27<cr>", 1, 02, 00, 00,00,00,00, 00,58,02,00 ;153600
+HKR, Responses, "28<cr>", 1, 02, 00, 00,00,00,00, 00,90,01,00 ;102400
+HKR, Responses, "29<cr>", 1, 02, 00, 00,00,00,00, 00,f0,00,00 ;61440
+HKR, Responses, "30<cr>", 1, 02, 00, 00,00,00,00, 00,c8,00,00 ;51200
+HKR, Responses, "31<cr>", 1, 02, 00, 00,00,00,00, 80,85,09,00 ;624000
+HKR, Responses, "32<cr>", 1, 02, 00, 00,00,00,00, 80,e7,01,00 ;124800
+HKR, Responses, "33<cr>", 1, 02, 00, 00,00,00,00, c0,f3,00,00 ;62400
+HKR, Responses, "34<cr>", 1, 02, 00, 00,00,00,00, 80,a2,00,00 ;41600
+HKR, Responses, "36<cr>", 1, 02, 00, 00,00,00,00, 80,61,00,00 ;24960
+HKR, Responses, "37<cr>", 1, 02, 00, 00,00,00,00, 40,51,00,00 ;20800
+
+HKR, Responses, "10<cr>", 1, 02, 00, 60,09,00,00, 00,00,00,00 ;2400
+HKR, Responses, "11<cr>", 1, 02, 00, c0,12,00,00, 00,00,00,00 ;4800
+HKR, Responses, "12<cr>", 1, 02, 00, 80,25,00,00, 00,00,00,00 ;9600
+HKR, Responses, "13<cr>", 1, 01, 00, 00,00,00,00, 00,00,00,00 ;n/a
+HKR, Responses, "14<cr>", 1, 02, 00, 00,4b,00,00, 00,00,00,00 ;19200
+HKR, Responses, "15<cr>", 1, 02, 00, 20,1c,00,00, 00,00,00,00 ;7200
+HKR, Responses, "16<cr>", 1, 02, 00, e0,2e,00,00, 00,00,00,00 ;12000
+HKR, Responses, "17<cr>", 1, 02, 00, 40,38,00,00, 00,00,00,00 ;14400
+HKR, Responses, "18<cr>", 1, 02, 00, a0,41,00,00, 00,00,00,00 ;16800
+HKR, Responses, "35<cr>", 1, 02, 00, e0,79,00,00, 00,00,00,00 ;31200
+HKR, Responses, "38<cr>", 1, 02, 00, 40,83,00,00, 00,00,00,00 ;33600
+HKR, Responses, "39<cr>", 1, 02, 00, 80,70,00,00, 00,00,00,00 ;28800
+HKR, Responses, "40<cr>", 1, 02, 00, 20,67,00,00, 00,00,00,00 ;26400
+HKR, Responses, "41<cr>", 1, 02, 00, c0,5d,00,00, 00,00,00,00 ;24000
+HKR, Responses, "42<cr>", 1, 02, 00, 60,54,00,00, 00,00,00,00 ;21600
+HKR, Responses, "43<cr>", 1, 02, 00, 80,bb,00,00, 00,00,00,00 ;48000
+HKR, Responses, "44<cr>", 1, 02, 00, c0,da,00,00, 00,00,00,00 ;56000
+HKR, Responses, "45<cr>", 1, 02, 00, 00,fa,00,00, 00,00,00,00 ;64000
+HKR, Responses, "46<cr>", 1, 02, 00, 80,b5,01,00, 00,00,00,00 ;112000
+HKR, Responses, "47<cr>", 1, 02, 00, 00,f4,01,00, 00,00,00,00 ;128000
+
+; numeric responses for DCE-rate WITH error control
+HKR, Responses, "50<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00 ;
+HKR, Responses, "51<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00 ;1200
+HKR, Responses, "52<cr>", 1, 02, 02, 60,09,00,00, 00,00,00,00 ;2400
+HKR, Responses, "53<cr>", 1, 02, 02, c0,12,00,00, 00,00,00,00 ;4800
+HKR, Responses, "54<cr>", 1, 02, 02, 20,1c,00,00, 00,00,00,00 ;7200
+HKR, Responses, "55<cr>", 1, 02, 02, 80,25,00,00, 00,00,00,00 ;9600
+HKR, Responses, "56<cr>", 1, 02, 02, e0,2e,00,00, 00,00,00,00 ;12000
+HKR, Responses, "57<cr>", 1, 02, 02, 40,38,00,00, 00,00,00,00 ;14400
+HKR, Responses, "58<cr>", 1, 02, 02, a0,41,00,00, 00,00,00,00 ;16800
+HKR, Responses, "59<cr>", 1, 02, 02, 00,4b,00,00, 00,00,00,00 ;19200
+HKR, Responses, "60<cr>", 1, 02, 02, 60,54,00,00, 00,00,00,00 ;21600
+HKR, Responses, "61<cr>", 1, 02, 02, c0,5d,00,00, 00,00,00,00 ;24000
+HKR, Responses, "62<cr>", 1, 02, 02, 20,67,00,00, 00,00,00,00 ;26400
+HKR, Responses, "63<cr>", 1, 02, 02, 80,70,00,00, 00,00,00,00 ;28800
+HKR, Responses, "64<cr>", 1, 02, 02, e0,79,00,00, 00,00,00,00 ;31200
+HKR, Responses, "65<cr>", 1, 02, 02, 40,83,00,00, 00,00,00,00 ;33600
+HKR, Responses, "66<cr>", 1, 02, 02, 00,96,00,00, 00,00,00,00 ;38400
+HKR, Responses, "67<cr>", 1, 02, 02, 80,bb,00,00, 00,00,00,00 ;48000
+HKR, Responses, "68<cr>", 1, 02, 02, c0,da,00,00, 00,00,00,00 ;56000
+HKR, Responses, "69<cr>", 1, 02, 02, 00,fa,00,00, 00,00,00,00 ;64000
+HKR, Responses, "70<cr>", 1, 02, 02, 80,b5,01,00, 00,00,00,00 ;112000
+HKR, Responses, "71<cr>", 1, 02, 02, 00,f4,01,00, 00,00,00,00 ;128000
+HKR, Responses, "<cr><lf>CONNECT<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/V42<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/V42/SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/V42<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/V42/SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V22b/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/V42/SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V22b/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/V42<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/V42/SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/V42/SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/V42<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/V42/SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32/V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/V42<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/V42/SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32/V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/V42/SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32/V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/V42<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/V42<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/V42<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/V42<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/V42/SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V32b/V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 1200/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, b0,04,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/MNP4<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/V42<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/V42/SREJ<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/V42b<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/ZyX/V42b/SREJ<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600<cr><lf>", 1, 02, 00, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 28,0a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000<cr><lf>", 1, 02, 00, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 5000/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 88,13,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200<cr><lf>", 1, 02, 00, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400<cr><lf>", 1, 02, 00, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, e8,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800<cr><lf>", 1, 02, 00, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 48,26,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000<cr><lf>", 1, 02, 00, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/V42<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200<cr><lf>", 1, 02, 00, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/V42<cr><lf>", 1, 02, 02, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12200/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, a8,2f,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600<cr><lf>", 1, 02, 00, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 08,39,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800<cr><lf>", 1, 02, 00, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 16800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, a0,41,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000<cr><lf>", 1, 02, 00, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 17000/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 68,42,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400<cr><lf>", 1, 02, 00, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, c8,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600<cr><lf>", 1, 02, 00, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 60,54,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800<cr><lf>", 1, 02, 00, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 21800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 28,55,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000<cr><lf>", 1, 02, 00, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/V42<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24000/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, c0,5d,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200<cr><lf>", 1, 02, 00, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 24200/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 88,5e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400<cr><lf>", 1, 02, 00, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 20,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600<cr><lf>", 1, 02, 00, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 26600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, e8,67,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800<cr><lf>", 1, 02, 00, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 28800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 80,70,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000<cr><lf>", 1, 02, 00, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 29000/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 48,71,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200<cr><lf>", 1, 02, 00, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/V42<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31200/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, e0,79,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400<cr><lf>", 1, 02, 00, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/V42<cr><lf>", 1, 02, 02, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 31400/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, a8,7a,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600<cr><lf>", 1, 02, 00, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33600/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 40,83,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800<cr><lf>", 1, 02, 00, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/MNP4<cr><lf>", 1, 02, 02, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/V42<cr><lf>", 1, 02, 02, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/V42/SREJ<cr><lf>", 1, 02, 02, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/MNP5<cr><lf>", 1, 02, 03, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/V42b<cr><lf>", 1, 02, 03, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 33800/ARQ/V.34/V42b/SREJ<cr><lf>", 1, 02, 03, 08,84,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 7200/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, 20,1c,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 12000/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, e0,2e,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/MNP4<cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/V42<cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/V42/SREJ<cr><lf>", 1, 02, 0a, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/MNP5<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/V42b<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/ARQ/CELL/V42b/SREJ<cr><lf>", 1, 02, 0b, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 2400/NONE/V110<cr><lf>", 1, 02, 00, 60,09,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 4800/NONE/V110<cr><lf>", 1, 02, 00, c0,12,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 9600/NONE/V110<cr><lf>", 1, 02, 00, 80,25,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 14400/NONE/V110<cr><lf>", 1, 02, 00, 40,38,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 19200/NONE/V110<cr><lf>", 1, 02, 00, 00,4b,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 38400/NONE/V110<cr><lf>", 1, 02, 00, 00,96,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 57600/NONE/V110<cr><lf>", 1, 02, 00, 00,e1,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/NONE/PPP<cr><lf>", 1, 02, 02, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/NONE/SLIP<cr><lf>", 1, 02, 02, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000<cr><lf>", 1, 02, 02, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/ARQ/X.75/LAPB<cr><lf>", 1, 02, 02, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/ARQ/X.75/LAPB/V42b<cr><lf>", 1, 02, 03, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/ARQ/V120/LAPD<cr><lf>", 1, 02, 02, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 56000/ARQ/V120/LAPD/V42b<cr><lf>", 1, 02, 03, C0,DA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 112K/ARQ/X.75M/LAPB<cr><lf>", 1, 02, 02, 80,B5,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 112K/ARQ/X.75M/LAPB/V42b<cr><lf>", 1, 02, 03, 80,B5,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 112K/ARQ/V120M/LAPD<cr><lf>", 1, 02, 02, 80,B5,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 112K/ARQ/V120M/LAPD/V42b<cr><lf>", 1, 02, 03, 80,B5,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/NONE/PPP<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/NONE/SLIP<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/ARQ/BTX/LAPB<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/ARQ/X.75/LAPB<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/ARQ/X.75/LAPB/V42b<cr><lf>", 1, 02, 03, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/ARQ/V120/LAPD<cr><lf>", 1, 02, 02, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 64000/ARQ/V120/LAPD/V42b<cr><lf>", 1, 02, 03, 00,FA,00,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/X.75M/LAPB<cr><lf>", 1, 02, 02, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/X.75M/LAPB/V42b<cr><lf>", 1, 02, 03, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/V120M/LAPD<cr><lf>", 1, 02, 02, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/V120M/LAPD/V42b<cr><lf>", 1, 02, 03, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/X.75C/LAPB<cr><lf>", 1, 02, 02, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/X.75C/LAPB/V42b<cr><lf>", 1, 02, 03, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/V120C/LAPD<cr><lf>", 1, 02, 02, 00,F4,01,00, 00,00,00,00
+HKR, Responses, "<cr><lf>CONNECT 128K/ARQ/V120C/LAPD/V42b<cr><lf>", 1, 02, 03, 00,F4,01,00, 00,00,00,00
diff --git a/private/unimodem/inf/mdmzyxln.inx b/private/unimodem/inf/mdmzyxln.inx
new file mode 100644
index 000000000..9fb9ecff4
--- /dev/null
+++ b/private/unimodem/inf/mdmzyxln.inx
@@ -0,0 +1,14 @@
+; Windows Modem Setup File
+; Copyright (c) 1993-1996 Microsoft Corporation
+; Manufacturer: ZyXEL Communications Corporation (Nordic)
+
+[Version]
+Signature="$CHICAGO$"
+Class=Modem
+ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider=%Mfg%
+
+[Manufacturer]
+
+[Strings]
+Mfg = "ZyXEL (Nordic)"
diff --git a/private/unimodem/inf/sources b/private/unimodem/inf/sources
new file mode 100644
index 000000000..224da4638
--- /dev/null
+++ b/private/unimodem/inf/sources
@@ -0,0 +1,25 @@
+#
+# This file is designed to be included from 2 levels below
+# (ie, daytona\srv, daytona\wks, cairo\srv, or cairo\wks).
+#
+
+SYNCHRONIZE_BLOCK=1
+
+MAJORCOMP=setup
+MINORCOMP=infs
+
+TARGETNAME=inf
+TARGETPATH=obj
+TARGETTYPE=notarget
+
+#
+# No explicit sources because build doesn't understand .inf files.
+#
+SOURCES=
+
+#
+# Use NTTARGETFILE0 macros to cause the infs to get built during
+# the compile phase. We do this so that we can disable MP build for
+# this directory, using BLOCK and DRAIN.
+#
+NTTARGETFILE0=make_infs
diff --git a/private/unimodem/lights/help.c b/private/unimodem/lights/help.c
new file mode 100644
index 000000000..61d6f022d
--- /dev/null
+++ b/private/unimodem/lights/help.c
@@ -0,0 +1,63 @@
+//****************************************************************************
+//
+// Module: LIGHTS.EXE
+// File: help.c
+// Content: This file contains the context-sensitive help routine/data.
+// History:
+// Sun 03-Jul-1994 15:22:54 -by- Viroon Touranachun [viroont]
+//
+// Copyright (c) Microsoft Corporation 1991-1994
+//
+//****************************************************************************
+
+#include "lights.h"
+#include <help.h>
+
+//****************************************************************************
+// Context-sentive help/control mapping arrays
+//****************************************************************************
+
+char gszHelpFile[] = "windows.hlp"; // help filename
+
+// Modem light dialog
+//
+DWORD gaLights[] = {
+ IDC_MODEM_FRAME, IDH_LIGHTS,
+ IDC_MODEMTIMESTRING, IDH_LIGHTS,
+ IDC_MODEM_TX_FRAME, IDH_LIGHTS,
+ IDC_MODEM_RX_FRAME, IDH_LIGHTS,
+ 0, 0};
+
+/****************************************************************************
+* @doc INTERNAL
+*
+* @func void NEAR PASCAL | ContextHelp | This function handles the context
+* sensitive help user interaction.
+*
+* @rdesc Returns none
+*
+****************************************************************************/
+
+void NEAR PASCAL ContextHelp (LPDWORD aHelp, UINT uMsg,
+ WPARAM wParam,LPARAM lParam)
+{
+ HWND hwnd;
+ UINT uType;
+
+ // Determine the help type
+ //
+ if (uMsg == WM_HELP)
+ {
+ hwnd = ((LPHELPINFO)lParam)->hItemHandle;
+ uType = HELP_WM_HELP;
+ }
+ else
+ {
+ hwnd = (HWND)wParam;
+ uType = HELP_CONTEXTMENU;
+ };
+
+ // Let Help take care of it
+ //
+ WinHelp(hwnd, gszHelpFile, uType, (DWORD)aHelp);
+}
diff --git a/private/unimodem/lights/lights.bmp b/private/unimodem/lights/lights.bmp
new file mode 100644
index 000000000..27d9200f7
--- /dev/null
+++ b/private/unimodem/lights/lights.bmp
Binary files differ
diff --git a/private/unimodem/lights/lights.c b/private/unimodem/lights/lights.c
new file mode 100644
index 000000000..e95507e15
--- /dev/null
+++ b/private/unimodem/lights/lights.c
@@ -0,0 +1,1321 @@
+/*******************************************************************************
+*
+* (C) COPYRIGHT MICROSOFT CORP., 1993-1994
+*
+* TITLE: LIGHTS.C
+*
+* VERSION: 1.0
+*
+* AUTHOR: Nick Manson
+*
+* DATE: 25 May 1994
+*
+********************************************************************************
+*
+* CHANGE LOG:
+*
+* DATE REV DESCRIPTION
+* ----------- --- -------------------------------------------------------------
+* 19 Aug 1994 NRM Added IsDialogMessage processing to message loop.
+* 04 Aug 1994 NRM Removed all TAPI code (ifdefed out) and changed code to rely
+* on VXD connection flag as shutdown event.
+* 14 Jul 1994 NRM Fixed Code Review issues.
+* 29 Jun 1994 NRM Minor Revisions including internationalization issues and
+* addition of code to WM_TIMER to prevent infinite searching
+* for comm port address. Major Revision of TAPI line handling
+* procedures -- all moved to linefunc.c
+* 19 Jun 1994 NRM Minor Revision to remove invalid message sent to dialog
+* after its destruction ( moved event detection to WS_TIMER
+* section ). Also, replaced several LoadDynamicString calls
+* with LoadString calls in order to remove inefficiencies
+* and avoid string bug for single parameter calls of this
+* routine.
+* 25 May 1994 NRM Original implementation.
+*
+*******************************************************************************/
+
+#include "lights.h"
+
+// Global instance handle of this application.
+static HINSTANCE g_hInstance;
+
+// Global handle to the dialog box window.
+static HWND g_hWnd;
+
+// Global status of dialog window ( hidden or unhidden )
+static BOOL g_DlgHidden;
+
+// Global status of timer.
+static BOOL g_fTimerOn = FALSE;
+
+// Global Command line parameters and information.
+static char g_szModemName[MAX_PATH]; // Modem Name string.
+static HANDLE g_hShutDownEvent = NULL; // Modem lights shut down event.
+static HANDLE g_hCommDevice = NULL;
+
+// Modem Tray Icon tip information string.
+static char g_szTipStr[MAXRCSTRING];
+
+// ID of the current icons being displayed on the tray.
+static UINT g_TrayIconID = NUMBER_OF_ICONS;
+static HICON g_hTrayIcon[NUMBER_OF_ICONS] = { NULL, NULL, NULL, NULL };
+
+// ID of the current dialog string being displayed in dialog box.
+static UINT g_ModemTimeStringID = 0;
+static PSTR g_pModemTimeString = NULL;
+
+// ID and storage for current Dialog Lights.
+static UINT g_ModemRXLightID = 0;
+static UINT g_ModemTXLightID = 0;
+static HBITMAP g_hModemLight[NUMBER_OF_LIGHTS];
+
+// storage for modem image.
+static HANDLE g_hModemImage = NULL;
+
+VOID
+PASCAL
+AdjustControlPosition(
+ HWND hWnd
+ );
+
+LRESULT
+PASCAL
+ModemMonitorWndProc(
+ HWND hWnd,
+ UINT Message,
+ WPARAM wParam,
+ LPARAM lParam
+ );
+
+VOID
+PASCAL
+LoadResources(
+ VOID
+ );
+
+VOID
+PASCAL
+UnLoadResources(
+ VOID
+ );
+
+VOID
+PASCAL
+ResetModemBitMap(
+ HWND hWnd
+ );
+
+BOOL
+PASCAL
+ModemMonitor_UpdateModemStatus(
+ HWND hWnd,
+ DWORD NotifyIconMessage,
+ BOOL fForceUpdate
+ );
+
+VOID
+PASCAL
+ModemMonitor_NotifyIcon(
+ HWND hWnd,
+ DWORD Message,
+ HICON hIcon,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ );
+
+BOOL
+WINAPI
+GetSystemModemStatus(
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ );
+
+VOID
+PASCAL
+UpdateTrayIcon(
+ HWND hWnd,
+ DWORD NotifyIconMessage,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ );
+
+VOID
+PASCAL
+UpdateTRXText(
+ HWND hWnd,
+ UINT idc,
+ LPSTR pStr
+ );
+
+VOID
+PASCAL
+UpdateDialogBox(
+ HWND hWnd,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus,
+ BOOL fForceUpdate
+ );
+
+VOID
+PASCAL
+UpdateDialogTimer(
+ HWND hWnd,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus,
+ BOOL fForceUpdate
+ );
+
+PSTR
+NEAR CDECL
+LoadDynamicString(
+ UINT StringID,
+ ...
+ );
+
+VOID
+PASCAL
+CloseExternalResources(
+ HWND hWnd
+ );
+
+LONG atol(const char *s)
+{
+ LONG i, n;
+
+ n = 0;
+ for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
+ {
+ n = 10 * n + (s[i] - '0');
+ }
+ return n;
+}
+
+
+// Wrapper for LocalFree to make the code a little easier to read.
+#define DeleteDynamicString(x) LocalFree((HLOCAL) (x))
+
+int
+PASCAL
+WinMain(
+ HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow
+ )
+{
+ LPSTR lpToken;
+ WNDCLASS WndClass;
+ MSG Msg;
+ DWORD pidSrc;
+ HANDLE hSrc, hSrcProc, hDstProc;
+
+
+ g_hInstance = hInstance;
+
+ // The command line format is:
+ // "tapisrv_process_id Stopevent_handle comm_handle modem_name"
+ //
+ // Get the source process id.
+ if ( lpToken = strtok(lpCmdLine," ") )
+ {
+ pidSrc = atol(lpToken);
+ }
+ else
+ {
+ // Too few parameters ...
+ ASSERT(0);
+ return 0;
+ }
+
+ hSrcProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidSrc);
+ hDstProc = GetCurrentProcess();
+
+ // Get the global shut down event handle.
+ if ( lpToken = strtok(NULL," ") )
+ {
+ hSrc = (HANDLE)atol(lpToken);
+ DuplicateHandle(hSrcProc, hSrc,
+ hDstProc, &g_hShutDownEvent,
+ 0L, FALSE, DUPLICATE_SAME_ACCESS);
+ }
+ else
+ {
+ // Too few parameters ...
+ ASSERT(0);
+ return 0;
+ }
+
+ // Get a copy of the global device handle.
+ if ( lpToken = strtok(NULL," ") )
+ {
+ hSrc = (HANDLE)atol(lpToken);
+ DuplicateHandle(hSrcProc, hSrc,
+ hDstProc, &g_hCommDevice,
+ 0L, FALSE, DUPLICATE_SAME_ACCESS);
+ }
+ else
+ {
+ // Too few parameters ...
+ if (g_hShutDownEvent)
+ {
+ CloseHandle(g_hShutDownEvent);
+ g_hShutDownEvent = NULL;
+ }
+ ASSERT(0);
+ return 0;
+ }
+
+ // Get the name of the modem device.
+ if ( lpToken = strtok(NULL,"") )
+ {
+ // Get modem name ...
+ strcpy( g_szModemName, lpToken );
+ }
+ else
+ {
+ // Too few parameters ...
+ if (g_hShutDownEvent)
+ {
+ CloseHandle(g_hShutDownEvent);
+ g_hShutDownEvent = NULL;
+ }
+ if (g_hCommDevice)
+ {
+ CloseHandle(g_hCommDevice);
+ g_hCommDevice = NULL;
+ }
+ ASSERT(0);
+ return 0;
+ }
+
+ CloseHandle(hSrcProc);
+
+ //
+ // Register a window class for the Modem Monitor. This is done so that
+ // the power control panel applet has the ability to detect us and turn us
+ // off if we're running.
+ //
+
+ WndClass.style = CS_GLOBALCLASS;
+ WndClass.lpfnWndProc = ModemMonitorWndProc;
+ WndClass.cbClsExtra = 0;
+ WndClass.cbWndExtra = DLGWINDOWEXTRA;
+ WndClass.hInstance = hInstance;
+ WndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CD));
+ WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
+ WndClass.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
+ WndClass.lpszMenuName = NULL;
+ WndClass.lpszClassName = MODEMMONITOR_CLASSNAME;
+
+ if (RegisterClass(&WndClass))
+ {
+
+ g_hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_MODEMMONITOR), NULL, NULL);
+
+ if ( g_hWnd )
+ {
+ SendMessage(g_hWnd, MMWM_INITDIALOG, 0, 0);
+
+ while (GetMessage(&Msg, NULL, 0, 0))
+ {
+ if ( !IsDialogMessage( g_hWnd, &Msg ) )
+ {
+ TranslateMessage(&Msg);
+ DispatchMessage(&Msg);
+ }
+ }
+ }
+ UnregisterClass(WndClass.lpszClassName, WndClass.hInstance);
+ }
+
+ if (g_hShutDownEvent)
+ {
+ CloseHandle(g_hShutDownEvent);
+ g_hShutDownEvent = NULL;
+ }
+ if (g_hCommDevice)
+ {
+ CloseHandle(g_hCommDevice);
+ g_hCommDevice = NULL;
+ }
+ return 0;
+
+}
+
+/*******************************************************************************
+*
+* AdjustControlPosition
+*
+* DESCRIPTION:
+* Adjust all the control positions based on the dialog resolution
+*
+* PARAMETERS:
+* hWnd, handle of ModemMonitor window.
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+AdjustControlPosition(
+ HWND hWnd
+ )
+{
+ HWND hwndImage, hCtrl;
+ RECT rect;
+ POINT ptOrg;
+ char szText[MAX_PATH+1];
+
+ // Find the anchor point of the image
+ // The modem image is centered
+ //
+ hwndImage = GetDlgItem(hWnd, IDC_MODEM_FRAME);
+ GetWindowRect(hwndImage, &rect);
+ ptOrg.x = (rect.left+rect.right-MODEM_BITMAP_WIDTH)/2;
+ ptOrg.y = (rect.top+rect.bottom-MODEM_BITMAP_HEIGHT)/2;
+ ScreenToClient(hWnd, &ptOrg);
+
+ // Adjust the lights
+ SetWindowPos(GetDlgItem(hWnd, IDC_MODEM_TX_FRAME), hwndImage,
+ ptOrg.x+TXL_X_OFFSET, ptOrg.y+TXL_Y_OFFSET,
+ 0, 0, SWP_NOSIZE);
+ SetWindowPos(GetDlgItem(hWnd, IDC_MODEM_RX_FRAME), hwndImage,
+ ptOrg.x+RXL_X_OFFSET, ptOrg.y+RXL_Y_OFFSET,
+ 0, 0, SWP_NOSIZE);
+
+ // Adjust the TRX text
+ hCtrl = GetDlgItem(hWnd, IDC_MODEMTXSTRING);
+ ptOrg.x -= (rect.right-rect.left-MODEM_BITMAP_WIDTH)/2;
+ GetWindowRect(hCtrl, &rect);
+ SetWindowPos(hCtrl, hwndImage, ptOrg.x+TXT_X_OFFSET,
+ ptOrg.y+TXT_Y_OFFSET-(rect.bottom-rect.top),
+ 0, 0, SWP_NOSIZE);
+ GetWindowText(hCtrl, szText, sizeof(szText));
+ ASSERT(*szText != '\0');
+ UpdateTRXText(hWnd, IDC_MODEMTXSTRING, szText);
+
+ hCtrl = GetDlgItem(hWnd, IDC_MODEMRXSTRING);
+ SetWindowPos(hCtrl, hwndImage,
+ ptOrg.x+RXT_X_OFFSET, ptOrg.y+RXT_Y_OFFSET,
+ 0, 0, SWP_NOSIZE);
+ GetWindowText(hCtrl, szText, sizeof(szText));
+ ASSERT(*szText != '\0');
+ UpdateTRXText(hWnd, IDC_MODEMRXSTRING, szText);
+}
+
+/*******************************************************************************
+*
+* ModemMonitorWndProc
+*
+* DESCRIPTION:
+* Callback procedure for the ModemMonitor window.
+*
+* PARAMETERS:
+* hWnd, handle of ModemMonitor window.
+* Message,
+* wParam,
+* lParam,
+* (returns),
+*
+*******************************************************************************/
+
+LRESULT
+PASCAL
+ModemMonitorWndProc(
+ HWND hWnd,
+ UINT Message,
+ WPARAM wParam,
+ LPARAM lParam
+ )
+{
+
+ switch (Message) {
+
+ case MMWM_INITDIALOG:
+
+ // Mark the dialog box as currently being hidden.
+ g_DlgHidden = TRUE;
+
+ // Load the tip string and icons for the modem monitor icon
+ if ( !LoadString(g_hInstance, IDS_MODEMTIP, g_szTipStr, MAXRCSTRING) )
+ lstrcpy( g_szTipStr, "" );
+
+ // Load modem icons
+ LoadResources();
+
+ // Update the modem's status.
+ if ( ModemMonitor_UpdateModemStatus(hWnd, NIM_ADD, FALSE) )
+ {
+ if (g_hShutDownEvent)
+ {
+ CloseHandle(g_hShutDownEvent);
+ g_hShutDownEvent = NULL;
+ }
+ if (g_hCommDevice)
+ {
+ CloseHandle(g_hCommDevice);
+ g_hCommDevice = NULL;
+ }
+ UnLoadResources();
+ DestroyWindow(hWnd);
+ break;
+ }
+
+ // Change window title.
+ SetWindowText(hWnd, g_szModemName);
+
+ // Set timer for minimum period between updates of modem status.
+ g_fTimerOn = SetTimer( hWnd, MDMSTATUS_UPDATE_TIMER_ID,
+ MDMSTATUS_UPDATE_TIMER_TIMEOUT, NULL);
+
+ // Load modem bitmap
+ ResetModemBitMap(hWnd);
+
+ // Adjust control position
+ AdjustControlPosition(hWnd);
+ break;
+
+ case WM_COMMAND:
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+
+ case IDOK:
+ g_DlgHidden = TRUE;
+ ShowWindow(hWnd, SW_HIDE);
+ break;
+
+ }
+ break;
+
+ case MMWM_NOTIFYICON:
+ switch (lParam)
+ {
+
+ case WM_LBUTTONDBLCLK:
+ g_DlgHidden = FALSE;
+ if ( ModemMonitor_UpdateModemStatus(hWnd, NIM_MODIFY, TRUE) )
+ {
+ CloseExternalResources(hWnd);
+ DestroyWindow(hWnd);
+ break;
+ }
+ SetForegroundWindow(hWnd);
+ ShowWindow(hWnd, SW_SHOWNORMAL);
+ break;
+ }
+ break;
+
+ case WM_TIMER:
+ // Update the modem status
+ if ( ModemMonitor_UpdateModemStatus(hWnd, NIM_MODIFY, FALSE) )
+ {
+ CloseExternalResources(hWnd);
+ DestroyWindow(hWnd);
+ }
+ break;
+
+ case WM_SYSCOLORCHANGE:
+ ResetModemBitMap(hWnd);
+ break;
+
+ case WM_CLOSE:
+ g_DlgHidden = TRUE;
+ ShowWindow(hWnd, SW_HIDE);
+ break;
+
+ case WM_DESTROY:
+ // Kill notification event
+ if (g_hShutDownEvent)
+ {
+ CloseHandle(g_hShutDownEvent);
+ g_hShutDownEvent = NULL;
+ }
+ if (g_hCommDevice)
+ {
+ CloseHandle(g_hCommDevice);
+ g_hCommDevice = NULL;
+ }
+
+ // Clean up modem bitmap.
+ if ( g_hModemImage )
+ DestroyIcon( g_hModemImage );
+
+ // Unload Icons
+ UnLoadResources();
+
+ PostQuitMessage(0);
+ break;
+
+#ifdef HELP_WORKS
+ case WM_HELP:
+ case WM_CONTEXTMENU:
+ ContextHelp(gaLights, Message, wParam, lParam);
+ break;
+#endif // HELP_WORKS
+
+ default:
+ return DefWindowProc(hWnd, Message, wParam, lParam);
+
+ }
+
+ return 0;
+
+}
+
+VOID
+PASCAL
+LoadResources(
+ VOID
+ )
+{
+ // BUG BUG - Put this in loop when you remove the USETAPI ifdefs ...
+
+ // Load tray icons.
+ g_hTrayIcon[0] = LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_CD),
+ IMAGE_ICON, 16, 16, 0);
+ g_hTrayIcon[1] = LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_TX),
+ IMAGE_ICON, 16, 16, 0);
+ g_hTrayIcon[2] = LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_RX),
+ IMAGE_ICON, 16, 16, 0);
+ g_hTrayIcon[3] = LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_RXTX),
+ IMAGE_ICON, 16, 16, 0);
+
+ // Load Modem light bitmaps.
+ g_hModemLight[0] = LoadBitmap( g_hInstance, MAKEINTRESOURCE(IDB_OFF));
+ g_hModemLight[1] = LoadBitmap( g_hInstance, MAKEINTRESOURCE(IDB_ON));
+}
+
+
+VOID
+PASCAL
+UnLoadResources(
+ VOID
+ )
+{
+ UINT i;
+
+ // Unload tray icons.
+ for ( i = 0; i < NUMBER_OF_ICONS; i++ )
+ {
+ if ( g_hTrayIcon[i] )
+ DestroyIcon(g_hTrayIcon[i]);
+ }
+
+ // Unload modem light bitmaps.
+ for ( i = 0; i < NUMBER_OF_LIGHTS; i++ )
+ {
+ if ( g_hModemLight[i] )
+ DeleteObject(g_hModemLight[i]);
+ }
+}
+
+
+VOID
+PASCAL
+ResetModemBitMap(
+ HWND hWnd
+ )
+{
+ // Clean up any old bitmaps.
+ if ( g_hModemImage )
+ DestroyIcon( g_hModemImage );
+
+ // Load the window bitmap.
+ g_hModemImage = LoadImage( g_hInstance, MAKEINTRESOURCE(IDI_LIGHTS),
+ IMAGE_ICON, 0, 0,
+ LR_DEFAULTCOLOR);
+
+ if ( g_hModemImage )
+ {
+ // Set the window bitmap.
+ SendDlgItemMessage( hWnd, IDC_MODEM_FRAME, STM_SETIMAGE,
+ (WPARAM)IMAGE_ICON, (LPARAM)g_hModemImage );
+
+ // Set the current lights.
+ SendDlgItemMessage( hWnd, IDC_MODEM_RX_FRAME, STM_SETIMAGE,
+ (WPARAM)IMAGE_BITMAP,
+ (LPARAM)g_hModemLight[g_ModemRXLightID] );
+
+ SendDlgItemMessage( hWnd, IDC_MODEM_TX_FRAME, STM_SETIMAGE,
+ (WPARAM)IMAGE_BITMAP,
+ (LPARAM)g_hModemLight[g_ModemTXLightID] );
+ };
+}
+
+
+/*******************************************************************************
+*
+* ModemMonitor_UpdateControls
+*
+* DESCRIPTION:
+*
+* This procedure updates the tray icon and all dialog box strings.
+*
+* PARAMETERS:
+* hWnd, handle of ModemMonitor window.
+* NotifyIconMessage, either NIM_ADD or NIM_MODIFY depending on whether the
+* tray icon needs to be added to the tray or modified in the tray.
+*
+*******************************************************************************/
+
+BOOL
+PASCAL
+ModemMonitor_UpdateModemStatus(
+ HWND hWnd,
+ DWORD NotifyIconMessage,
+ BOOL fForceUpdate
+ )
+{
+ SYSTEM_MODEM_STATUS SystemModemStatus;
+ BOOL fClosed = FALSE;
+
+ // Get the system modem status.
+ fClosed = GetSystemModemStatus(&SystemModemStatus);
+
+ if ( !fClosed )
+ {
+ // Display appropriate ICON in tray based on statistics received.
+ UpdateTrayIcon(hWnd, NotifyIconMessage, &SystemModemStatus);
+
+ // If the dialog box is not currently hidden, update the dialog box
+ // text strings and bitmaps.
+ if ( (!g_DlgHidden) | fForceUpdate )
+ UpdateDialogBox(hWnd, &SystemModemStatus, fForceUpdate);
+
+ // Update the dialog box time string.
+ UpdateDialogTimer(hWnd, &SystemModemStatus, fForceUpdate);
+ }
+
+ return fClosed;
+}
+
+
+/*******************************************************************************
+*
+* ModemMonitor_NotifyIcon
+*
+* DESCRIPTION:
+*
+* Modified from source found in BATMETER.C.
+*
+* This routine is a wrapper for Shell_NotifyIcon with has been modified to
+* use a global string (g_pTipStr) for its Tip window.
+*
+* PARAMETERS:
+* hWnd, handle of ModemMonitor window.
+* Message,
+* hIcon
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+ModemMonitor_NotifyIcon(
+ HWND hWnd,
+ DWORD Message,
+ HICON hIcon,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ )
+{
+
+ NOTIFYICONDATA NotifyIconData;
+
+ NotifyIconData.cbSize = sizeof(NOTIFYICONDATA);
+ NotifyIconData.uID = 0;
+ NotifyIconData.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
+ NotifyIconData.uCallbackMessage = MMWM_NOTIFYICON;
+
+ NotifyIconData.hWnd = hWnd;
+ NotifyIconData.hIcon = hIcon;
+
+ if (lpSystemModemStatus)
+ wsprintf(NotifyIconData.szTip, g_szTipStr, lpSystemModemStatus->dwPerfRead,
+ lpSystemModemStatus->dwPerfWrite);
+ else
+ lstrcpy(NotifyIconData.szTip, "");
+
+ Shell_NotifyIcon(Message, &NotifyIconData);
+
+}
+
+
+
+/*******************************************************************************
+*
+* GetSystemModemStatus
+*
+* DESCRIPTION:
+*
+* This procedure consists of three stages.
+*
+* The first stage attempts to obtain a valid device handle for the modem.
+*
+* The second stage involves setting default modem status values for the case
+* where the modem is not connected.
+*
+* The third stage only executes if a valid device handle which can be acted
+* upon is obtained. This stage involves placing a DeviceIOControl to
+* UNIMODEM and interpretting the statistics returned by the VXD.
+*
+* PARAMETERS:
+*
+* lpSystemModemStatus - A pointer to a modem statistics buffer.
+*
+*******************************************************************************/
+
+#define COMMCONFIG_AND_MODEMSETTINGS_LEN (60*2)
+
+BOOL
+WINAPI
+GetSystemModemStatus(
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ )
+{
+ static DWORD dwPerfRead = 0;
+ static DWORD dwPerfWrite = 0;
+ DWORD dwRet;
+ BYTE byteTmp[COMMCONFIG_AND_MODEMSETTINGS_LEN];
+ LPCOMMCONFIG lpCC = (LPCOMMCONFIG)byteTmp;
+ DWORD dwSize;
+ static OVERLAPPED ov = {0,0,0,0,0};
+
+ if (ov.hEvent == 0)
+ {
+ // BUGBUG: This event will not be cleaned up by us. We are relying
+ // BUGBUG: on the process cleanup to do the job.
+ if ((ov.hEvent = CreateEvent(NULL,
+ FALSE,
+ FALSE,
+ NULL)) == NULL)
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+
+ // Make it so it doesn't hit unimdm.tsp's completion port.
+ //
+ ov.hEvent = (HANDLE)((DWORD)ov.hEvent | 1);
+ }
+
+ //
+ // Initialize Modem statistics to show no connection (the default case).
+ //
+
+ lpSystemModemStatus->DCERate = 0;
+ lpSystemModemStatus->Connected = FALSE;
+ lpSystemModemStatus->Reading = FALSE;
+ lpSystemModemStatus->Writing = FALSE;
+ lpSystemModemStatus->dwPerfRead = 0;
+ lpSystemModemStatus->dwPerfWrite = 0;
+
+ // Check the shut down event
+ if ( WaitForSingleObject( g_hShutDownEvent, 0 ) != WAIT_TIMEOUT )
+ {
+ return TRUE;
+ }
+
+ if (g_hCommDevice != NULL)
+ {
+ DWORD dwPassthroughState;
+ SERIALPERF_STATS serialstats;
+ DWORD dwWaitResult;
+
+ if (!DeviceIoControl(g_hCommDevice,
+ IOCTL_MODEM_GET_PASSTHROUGH,
+ &dwPassthroughState,
+ sizeof(dwPassthroughState),
+ &dwPassthroughState,
+ sizeof(dwPassthroughState),
+ &dwRet,
+ &ov))
+ {
+ if (ERROR_IO_PENDING != GetLastError())
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+
+ if (!GetOverlappedResult(g_hCommDevice,
+ &ov,
+ &dwRet,
+ TRUE))
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+ }
+
+ switch (dwPassthroughState)
+ {
+ case MODEM_PASSTHROUGH:
+ case MODEM_DCDSNIFF:
+ lpSystemModemStatus->Connected = TRUE;
+ break;
+
+ case MODEM_NOPASSTHROUGH:
+ default:
+ lpSystemModemStatus->Connected = FALSE;
+ return TRUE;
+ }
+
+ if (!DeviceIoControl(g_hCommDevice,
+ IOCTL_SERIAL_GET_STATS,
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &dwRet,
+ &ov))
+ {
+ if (ERROR_IO_PENDING != GetLastError())
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+
+ if (!GetOverlappedResult(g_hCommDevice,
+ &ov,
+ &dwRet,
+ TRUE))
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+ }
+
+ // Set Modem connection rate, connection, data transmission and
+ // data reception flags.
+ lpSystemModemStatus->Reading = ( serialstats.ReceivedCount != dwPerfRead );
+ lpSystemModemStatus->Writing = ( serialstats.TransmittedCount != dwPerfWrite );
+
+ // Update bytes read and written history values for the next call
+ // call to this function.
+ dwPerfRead = serialstats.ReceivedCount;
+ dwPerfWrite = serialstats.TransmittedCount;
+
+ lpSystemModemStatus->dwPerfRead = serialstats.ReceivedCount;
+ lpSystemModemStatus->dwPerfWrite = serialstats.TransmittedCount;
+
+ dwSize = sizeof(byteTmp);
+ if (GetCommConfig(g_hCommDevice,
+ lpCC,
+ &dwSize))
+ {
+ lpSystemModemStatus->DCERate =
+ ((PMODEMSETTINGS)&lpCC->wcProviderData[0])->dwNegotiatedDCERate;
+ }
+ else
+ {
+ ASSERT(0);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+/*******************************************************************************
+*
+* UpdateTrayIcon
+*
+* DESCRIPTION:
+*
+* This procedure reads the modem status structure and updates the Modem
+* Monitor tray icon. This is done by comparing the new status (NewIconID)
+* with the old status (a global variable - g_TrayIconID) and updating the
+* icon using ModemMonitor_NotifyIcon only if there has been a change.
+*
+* PARAMETERS:
+* hWnd, handle to the modem monitor dialog box
+* NotifyIconMessage, passed through from caller to ModemMonitor_NotifyIcon
+* lpSystemModemStatus, modem status structure.
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+UpdateTrayIcon(
+ HWND hWnd,
+ DWORD NotifyIconMessage,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus
+ )
+{
+ UINT NewIconID;
+
+ NewIconID = 0;
+ if ( lpSystemModemStatus->Reading )
+ NewIconID += ICON_RX_ON;
+ if ( lpSystemModemStatus->Writing )
+ NewIconID += ICON_TX_ON;
+
+ if ( g_TrayIconID != NewIconID )
+ {
+ // Update the tray by setting its icon appropriately and notifying
+ // the system to update the display.
+
+ g_TrayIconID = NewIconID;
+
+ ModemMonitor_NotifyIcon(hWnd, NotifyIconMessage,
+ g_hTrayIcon[g_TrayIconID],
+ lpSystemModemStatus);
+ }
+}
+
+
+/*******************************************************************************
+*
+* UpdateTRXText
+*
+* DESCRIPTION:
+*
+* This procedure adjusts the Tx/Rx text width
+*
+* PARAMETERS:
+* hWnd, handle to the dialog window.
+* idc, Resource ID of Tx or Rx text control
+* pStr, new text
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+UpdateTRXText(
+ HWND hWnd,
+ UINT idc,
+ LPSTR pStr
+ )
+{
+ HDC hDC;
+ HFONT hFont;
+ HWND hwndCtrl;
+ SIZE size;
+ RECT rect;
+ POINT ptOrg;
+
+ // Find the exact dimension of the TRX text which will appear
+ // on the screen
+ //
+ hwndCtrl = GetDlgItem(hWnd, idc);
+ GetWindowRect(hwndCtrl, &rect);
+ hDC = GetDC(hwndCtrl);
+ hFont = SelectObject(hDC, (HFONT)SendMessage(hwndCtrl, WM_GETFONT, 0, 0));
+ GetTextExtentPoint32 (hDC, pStr, lstrlen(pStr), &size);
+ SelectObject(hDC, hFont);
+ ReleaseDC(hwndCtrl, hDC);
+
+ // If it is the transmitted line, align the bottom with the
+ // current position
+ //
+ if (idc == IDC_MODEMTXSTRING)
+ rect.top = rect.bottom-size.cy;
+
+ // Adjust the text control to exactly fit the displayed text
+ //
+ ptOrg = *(POINT *)((RECT *)&rect);
+ ScreenToClient(hWnd, &ptOrg);
+ SetWindowPos(hwndCtrl, GetDlgItem(hWnd, IDC_MODEM_FRAME),
+ ptOrg.x, ptOrg.y, size.cx, size.cy, 0);
+ SetWindowText(hwndCtrl, pStr);
+}
+
+/*******************************************************************************
+*
+* UpdateDialogBox
+*
+* DESCRIPTION:
+*
+* This procedure reads the modem status structure and updates the Modem
+* Monitor Dialog box.
+*
+* PARAMETERS:
+* hWnd, handle to the dialog window.
+* lpSystemModemStatus, pointer to modem status structure.
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+UpdateDialogBox(
+ HWND hWnd,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus,
+ BOOL fForceUpdate
+ )
+{
+ UINT NewModemRXLightID = 0;
+ UINT NewModemTXLightID = 0;
+ PSTR pRxTx;
+
+ // Obtain resource id numbers for the RX and TX lights.
+ if ( lpSystemModemStatus->Reading )
+ NewModemRXLightID += LIGHT_ON;
+
+ if ( lpSystemModemStatus->Writing )
+ NewModemTXLightID += LIGHT_ON;
+
+ // Update the modem lights if necessary.
+
+ if (( g_ModemRXLightID != NewModemRXLightID ) || fForceUpdate)
+ {
+ g_ModemRXLightID = NewModemRXLightID;
+
+ if ( g_hModemImage )
+ {
+ SendDlgItemMessage( hWnd, IDC_MODEM_RX_FRAME, STM_SETIMAGE,
+ (WPARAM)IMAGE_BITMAP,
+ (LPARAM)g_hModemLight[g_ModemRXLightID] );
+ };
+ }
+
+ if (( g_ModemTXLightID != NewModemTXLightID ) || fForceUpdate)
+ {
+ g_ModemTXLightID = NewModemTXLightID;
+
+ if ( g_hModemImage )
+ {
+ SendDlgItemMessage( hWnd, IDC_MODEM_TX_FRAME, STM_SETIMAGE,
+ (WPARAM)IMAGE_BITMAP,
+ (LPARAM)g_hModemLight[g_ModemTXLightID] );
+ };
+ }
+
+ if ( lpSystemModemStatus->Reading || fForceUpdate )
+ {
+ // Display the new byte-received count
+ //
+ pRxTx = LoadDynamicString(IDS_RXSTRING,
+ lpSystemModemStatus->dwPerfRead);
+ UpdateTRXText(hWnd, IDC_MODEMRXSTRING, pRxTx);
+ DeleteDynamicString(pRxTx);
+ }
+
+ if ( lpSystemModemStatus->Writing || fForceUpdate )
+ {
+ // Display the new byte-sent count
+ //
+ pRxTx = LoadDynamicString(IDS_TXSTRING,
+ lpSystemModemStatus->dwPerfWrite);
+ UpdateTRXText(hWnd, IDC_MODEMTXSTRING, pRxTx);
+ DeleteDynamicString(pRxTx);
+ }
+
+}
+
+
+
+
+/*******************************************************************************
+*
+* UpdateDialogTimer
+*
+* DESCRIPTION:
+*
+* This procedure sets the modem time since connection string.
+* The string will change under any one of the three following conditions:
+* i) The modem's connection status has changed.
+* ii) A forced update was indicated.
+* iii) The timer count for update has expired.
+*
+* PARAMETERS:
+* hWnd, handle to the dialog window.
+* lpSystemModemStatus, pointer to modem status structure.
+* fForceUpdate, boolean for whether window update is necessary.
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+UpdateDialogTimer(
+ HWND hWnd,
+ LPSYSTEM_MODEM_STATUS lpSystemModemStatus,
+ BOOL fForceUpdate
+ )
+{
+ static BOOL ModemConnected = FALSE;
+ static DWORD cTimer = 0;
+ static DWORD ConnectionStart = 0;
+ static DWORD dwPrevTime = 0;
+ DWORD dwTime;
+ UINT uHr, uMin;
+ PSTR pStr, pSubStr1, pSubStr2;
+ UINT NewStringID;
+ BOOL fBuildString;
+
+ fBuildString = FALSE;
+
+ if ( fForceUpdate )
+ fBuildString = TRUE;
+
+ if ( (lpSystemModemStatus->Connected) != (ModemConnected) )
+ {
+ fBuildString = TRUE;
+ ModemConnected = lpSystemModemStatus->Connected;
+ ConnectionStart = GetTickCount();
+ cTimer = 0;
+ }
+
+ if ( cTimer >= MDMSTATUS_UPDATE_TIMER_COUNT )
+ {
+ fBuildString = TRUE;
+ cTimer = 0;
+ }
+
+ // Build the string if necessary.
+ if ( fBuildString )
+ {
+ dwTime = (GetTickCount()-ConnectionStart)/1000L;
+ dwTime /= 60;
+
+ // If the time value has changed by at least one minute
+ if ( ( dwTime != dwPrevTime ) || ( dwPrevTime == 0 ) )
+ {
+
+ dwPrevTime = dwTime;
+ uMin = (UINT)(dwTime % 60);
+ uHr = (UINT)(dwTime / 60);
+
+ pSubStr1 = LoadDynamicString(IDS_CD, lpSystemModemStatus->DCERate);
+ pSubStr2 = NULL;
+
+ // BUG BUG - Figure out a way to get rid of if-else structure
+ // (replace it with something cheaper)
+ // BUG BUG - Why don't we use local time format?
+
+ if ( uHr || uMin )
+ {
+ if ( uMin )
+ {
+ if ( uHr )
+ {
+ if ( uHr > 1 )
+ {
+ // Hours and at least one minute
+ if ( uMin > 1 )
+ NewStringID = IDS_HOURSMINS;
+ else
+ NewStringID = IDS_HOURSMIN;
+ }
+ else
+ {
+ // One hour and at least one minute
+ if ( uMin > 1 )
+ NewStringID = IDS_HOURMINS;
+ else
+ NewStringID = IDS_HOURMIN;
+ }
+ }
+ else
+ {
+ // Minutes only
+ if ( uMin > 1 )
+ NewStringID = IDS_MINS;
+ else
+ NewStringID = IDS_MIN;
+ }
+ }
+ else
+ {
+ // Hours only
+ if ( uHr > 1 )
+ NewStringID = IDS_HOURS;
+ else
+ NewStringID = IDS_HOUR;
+ }
+
+ pSubStr2 = LoadDynamicString(NewStringID, uHr, uMin);
+ pStr = LoadDynamicString(IDS_TIMESTRING, pSubStr1, pSubStr2);
+ }
+ else
+ {
+ pStr = LoadDynamicString(IDS_TIMESTRING, pSubStr1, "");
+ }
+
+ if ( pSubStr1 )
+ DeleteDynamicString(pSubStr1);
+
+ if ( pSubStr2 )
+ DeleteDynamicString(pSubStr2);
+
+ SetDlgItemText(hWnd, IDC_MODEMTIMESTRING, pStr);
+
+ if (g_pModemTimeString)
+ DeleteDynamicString(g_pModemTimeString);
+ g_pModemTimeString = pStr;
+
+ } // endif - time has changed by at least one minute.
+
+ }
+
+ // Increment the global timer string interval counter.
+ cTimer++;
+}
+
+
+/*******************************************************************************
+*
+* LoadDynamicString
+*
+* DESCRIPTION:
+*
+* From source found in BATMETER.C
+*
+* Wrapper for the FormatMessage function that loads a string from our
+* resource table into a dynamically allocated buffer, optionally filling
+* it with the variable arguments passed.
+*
+* BE CAREFUL in 16-bit code to pass 32-bit quantities for the variable
+* arguments.
+*
+* PARAMETERS:
+* StringID, resource identifier of the string to use.
+* (optional), parameters to use to format the string message.
+*
+*******************************************************************************/
+
+PSTR
+NEAR CDECL
+LoadDynamicString(
+ UINT StringID,
+ ...
+ )
+{
+ char Buffer[256];
+ PSTR pStr;
+ va_list Marker;
+
+ va_start(Marker, StringID);
+
+ LoadString(g_hInstance, StringID, Buffer, sizeof(Buffer));
+
+ FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ (LPVOID) (LPSTR) Buffer, 0, 0, (LPSTR) (PSTR FAR *) &pStr, 0, &Marker);
+
+ return pStr;
+
+}
+
+/*******************************************************************************
+*
+* CloseExternalResources
+*
+* DESCRIPTION:
+*
+* This routine kills the timer and removes the tray icon associated
+* with this application. This is done here (as opposed to in the
+* WM_TIMER message) in order to meet the criterion that no calls using
+* the window's handle may be made in the WM_DESTROY message handler
+* excepting those involving memory de-allocation.
+*
+* PARAMETERS: none.
+*
+*******************************************************************************/
+
+VOID
+PASCAL
+CloseExternalResources( HWND hWnd )
+{
+ // Kill the timer
+ if ( g_fTimerOn )
+ {
+ KillTimer(hWnd, MDMSTATUS_UPDATE_TIMER_ID);
+ g_fTimerOn = FALSE;
+ }
+
+ // Remove ICON from tray.
+ ModemMonitor_NotifyIcon(hWnd, NIM_DELETE, g_hTrayIcon[g_TrayIconID], NULL);
+
+}
diff --git a/private/unimodem/lights/lights.def b/private/unimodem/lights/lights.def
new file mode 100644
index 000000000..24b9e5b19
--- /dev/null
+++ b/private/unimodem/lights/lights.def
@@ -0,0 +1,11 @@
+NAME LIGHTS.EXE
+DESCRIPTION 'Modem Management -- Modem Activity Monitor Tray Applet'
+EXETYPE WINDOWS
+
+STUB 'WINSTUB.EXE'
+
+CODE PRELOAD MOVEABLE DISCARDABLE
+DATA PRELOAD MOVEABLE MULTIPLE
+
+STACKSIZE 8192
+HEAPSIZE 1024
diff --git a/private/unimodem/lights/lights.h b/private/unimodem/lights/lights.h
new file mode 100644
index 000000000..c3305afd7
--- /dev/null
+++ b/private/unimodem/lights/lights.h
@@ -0,0 +1,130 @@
+/*******************************************************************************
+*
+* (C) COPYRIGHT MICROSOFT CORP., 1993-1994
+*
+* TITLE: LIGHTS.H
+*
+* VERSION: 1.0
+*
+* AUTHOR: Nick Manson
+*
+* DATE: 25 May 1994
+*
+* Internal header information for LIGHTS.C
+*
+********************************************************************************
+*
+* CHANGE LOG:
+*
+* DATE REV DESCRIPTION
+* ----------- --- -------------------------------------------------------------
+* 29 Jun 1994 NRM Added MMWM_NOTIFYCALL message and sub-messages. Split off
+* TAPI related info to linefunc.h
+* 19 Jun 1994 NRM Removed MMWM_DESTROY message (redundant) and added
+* MAXRCSTRING (length of labels from RC file)
+* 25 May 1994 NRM Original implementation.
+*
+*******************************************************************************/
+#ifndef _INC_LIGHTS
+#define _INC_LIGHTS
+
+//--------------------------------------------------------------------------
+// Include files
+
+#define _INC_OLE // REVIEW: don't include ole.h in windows.h
+#include <windows.h>
+#include <windowsx.h>
+#include <shellapi.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <devioctl.h>
+#include <ntddser.h>
+#include <ntddmodm.h>
+#include "resource.h"
+#include "lightsid.h"
+
+//--------------------------------------------------------------------------
+// Debug Macros
+
+#ifdef DEBUG
+ #define DPRINTF(sz) OutputDebugString("LIGHTS.EXE: "sz"\r\n");
+ #define ASSERT(exp) if (!(exp)) {DPRINTF("Assert failure\n");DebugBreak();}
+#else //ifdef DEBUG
+ #define DPRINTF(sz)
+ #define ASSERT(exp)
+#endif //ifdef DEBUG
+
+//--------------------------------------------------------------------------
+// Internal Constant definitions.
+
+#define MODEMMONITOR_CLASSNAME "ModemMonitor_Main"
+
+// Initialize the contents of the ModemMeter window.
+#define MMWM_INITDIALOG (WM_USER + 100)
+
+// Private tray icon notification message sent to the ModemMeter window.
+#define MMWM_NOTIFYICON (WM_USER + 101)
+
+// Timer ID and frequencies.
+#define MDMSTATUS_UPDATE_TIMER_ID 1
+#define MDMSTATUS_UPDATE_TIMER_TIMEOUT 250
+#define MDMSTATUS_UPDATE_TIMER_COUNT 20 // 20 * 250 millisec.
+#define MDMSTATUS_STALE_TIMER_COUNT 1000 // 1000 * 250 millisec.
+
+// Maximum size of a resource string table string.
+#define MAXRCSTRING 64
+
+// The number of tray icons used.
+#define NUMBER_OF_ICONS 4
+
+// The number of lights states.
+#define NUMBER_OF_LIGHTS 2
+
+// The number of text time strings.
+#define NUMBER_OF_STRINGS 9
+#define MODEM_TIME_STRING_SIZE 35
+
+// Modem Bitmap size information
+#define MODEM_BITMAP_WIDTH 260
+#define MODEM_BITMAP_HEIGHT 97
+
+// Image-relative position of the controls
+#define TXL_X_OFFSET 130
+#define TXL_Y_OFFSET 51
+#define RXL_X_OFFSET 146
+#define RXL_Y_OFFSET 59
+#define TXT_X_OFFSET 0
+#define TXT_Y_OFFSET 79
+#define RXT_X_OFFSET 0
+#define RXT_Y_OFFSET 83
+
+//--------------------------------------------------------------------------
+// Unimodem Device IOCTL interface definitions
+
+// Unimodem VXD DeviceIOControl identification numbers.
+#define UNIMODEM_IOCTL_GET_STATISTICS 0x0000A007
+
+// Unimodem VXD DeviceIOControl data structure.
+typedef struct _ApiStats {
+ VOID * hPort; // was MODEMINFORMATION * hPort;
+ DWORD fConnected;
+ DWORD DCERate;
+ DWORD dwPerfRead;
+ DWORD dwPerfWrite;
+} APISTATS;
+
+// Modem Connection Information Management structure
+typedef struct _SYSTEM_MODEM_STATUS {
+ BOOL Connected;
+ BOOL Reading;
+ BOOL Writing;
+ DWORD DCERate;
+ DWORD dwPerfRead;
+ DWORD dwPerfWrite;
+} SYSTEM_MODEM_STATUS, *LPSYSTEM_MODEM_STATUS;
+
+// Context sensitive help array used by the WinHelp engine.
+extern DWORD gaLights[];
+void NEAR PASCAL ContextHelp (LPDWORD, UINT, WPARAM, LPARAM);
+
+#endif // _INC_LIGHTS
diff --git a/private/unimodem/lights/lights.ico b/private/unimodem/lights/lights.ico
new file mode 100644
index 000000000..2596493e1
--- /dev/null
+++ b/private/unimodem/lights/lights.ico
Binary files differ
diff --git a/private/unimodem/lights/lights.rc b/private/unimodem/lights/lights.rc
new file mode 100644
index 000000000..4fb25796c
--- /dev/null
+++ b/private/unimodem/lights/lights.rc
@@ -0,0 +1,120 @@
+//{{NO_DEPENDENCIES}}
+//Microsoft App Studio generated resource script.
+//
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include <windows.h>
+#include <commctrl.h>
+#undef APSTUDIO_HIDDEN_SYMBOLS
+
+#ifndef APSTUDIO_INVOKED
+#include "lights.rcv"
+#endif //APSTUDIO_INVOKED
+
+#include "lightsid.h"
+
+/////////////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+IDI_LIGHTS ICON DISCARDABLE "LIGHTS.ICO"
+IDI_CD ICON DISCARDABLE "MODEM01.ICO"
+IDI_TX ICON DISCARDABLE "MODEM02.ICO"
+IDI_RX ICON DISCARDABLE "MODEM03.ICO"
+IDI_RXTX ICON DISCARDABLE "MODEM04.ICO"
+#ifdef APSTUDIO_INVOKED
+//////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_OFF BITMAP DISCARDABLE "OFF.BMP"
+IDB_ON BITMAP DISCARDABLE "ON.BMP"
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_MODEMMONITOR DIALOG DISCARDABLE 0, 0, 195, 119
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_CAPTION | WS_SYSMENU| 0x800 |
+ DS_CONTEXTHELP
+CLASS "ModemMonitor_Main"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "",IDC_MODEM_FRAME,"Static",SS_ICON | SS_CENTERIMAGE,
+ 11,5,178,60
+ LTEXT "",IDC_MODEMTIMESTRING,11,75,178,13
+ DEFPUSHBUTTON "OK",IDOK,140,100,50,14
+ CONTROL "",IDC_MODEM_TX_FRAME,"Static",SS_BITMAP | SS_CENTERIMAGE,
+ 97,35,3,3
+ CONTROL "",IDC_MODEM_RX_FRAME,"Static",SS_BITMAP | SS_CENTERIMAGE,
+ 108,40,3,3
+ LTEXT "0 byte sent ",IDC_MODEMTXSTRING,11,44,80,8
+ LTEXT "0 byte received ",IDC_MODEMRXSTRING,11,56,80,8
+END
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MODEMTIP "%d bytes received %d bytes sent"
+ IDS_NOCD "Not connected"
+ IDS_CD "Connected at %1!d! bps"
+ IDS_MIN " for 1 minute"
+ IDS_MINS " for %2!d! minutes"
+ IDS_HOUR " for 1 hour"
+ IDS_HOURS " for %1!d! hours"
+ IDS_HOURMIN " for 1 hour and 1 minute"
+ IDS_HOURSMIN " for %1!d! hours and 1 minute"
+ IDS_HOURMINS " for %1!d! hour and %2!d! minutes"
+ IDS_HOURSMINS " for %1!d! hours and %2!d! minutes"
+ IDS_TIMESTRING "%1!s!%2!s!."
+ IDS_RXSTRING "%1!d! bytes received "
+ IDS_TXSTRING "%1!d! bytes sent "
+END
+
+
+#ifndef APSTUDIO_INVOKED
+////////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/private/unimodem/lights/lights.rcv b/private/unimodem/lights/lights.rcv
new file mode 100644
index 000000000..8230f5278
--- /dev/null
+++ b/private/unimodem/lights/lights.rcv
@@ -0,0 +1,39 @@
+/*******************************************************************************
+*
+* (C) COPYRIGHT MICROSOFT CORP., 1993-1994
+*
+* TITLE: LIGHTS.RCV
+*
+* VERSION: 1.0
+*
+* AUTHOR: Nick Manson
+*
+* DATE: 25 May 1994
+*
+* Version information resource file.
+*
+********************************************************************************
+*
+* CHANGE LOG:
+*
+* DATE REV DESCRIPTION
+* ----------- --- -------------------------------------------------------------
+* 25 May 1994 NRM Original implementation.
+*
+*******************************************************************************/
+
+#ifdef WINNT
+#include <winver.h>
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+#define VER_FILETYPE VFT_APP
+#define VER_FILESUBTYPE VFT2_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Modem Monitor Applet\0"
+#define VER_INTERNALNAME_STR "LIGHTS\0"
+#define VER_LEGALCOPYRIGHT_YEARS "1993-1995"
+#define VER_ORIGINALFILENAME_STR "LIGHTS.EXE"
+
+#include <common.ver>
diff --git a/private/unimodem/lights/lightsid.h b/private/unimodem/lights/lightsid.h
new file mode 100644
index 000000000..fcd5e7fa6
--- /dev/null
+++ b/private/unimodem/lights/lightsid.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+*
+* (C) COPYRIGHT MICROSOFT CORP., 1993-1994
+*
+* TITLE: LIGHTSID.H
+*
+* VERSION: 1.0
+*
+* AUTHOR: Nick Manson
+*
+* DATE: 14 May 1994
+*
+* Resource identifiers for the modem monitor.
+*
+********************************************************************************
+*
+* CHANGE LOG:
+*
+* DATE REV DESCRIPTION
+* ----------- --- -------------------------------------------------------------
+* 14 May 1994 NRM Original implementation. Seperated from RESOURCE.H so that
+* some documentation could be added without AppStudio screwing
+* it up later.
+*
+*******************************************************************************/
+
+#ifndef _INC_LIGHTSID
+#define _INC_LIGHTSID
+
+#define ICON_TX_ON 1
+#define ICON_RX_ON 2
+#define IDI_LIGHTS 99
+#define IDI_CD 200
+#define IDI_TX 201
+#define IDI_RX 202
+#define IDI_RXTX 203
+
+#define IDD_MODEMMONITOR 1000
+#define IDC_MODEM_FRAME 1001
+#define IDC_MODEMTIMESTRING 1002
+#define IDC_MODEM_TX_FRAME 1003
+#define IDC_MODEM_RX_FRAME 1004
+#define IDC_MODEMRXSTRING 1005
+#define IDC_MODEMTXSTRING 1006
+
+#define LIGHT_ON 1
+#define IDB_OFF 1101
+#define IDB_ON 1102
+
+#define IDS_MODEMTIP 1201
+#define IDS_NOCD 1202
+#define IDS_CD 1203
+#define IDS_MIN 1204
+#define IDS_MINS 1205
+#define IDS_HOUR 1206
+#define IDS_HOURS 1207
+#define IDS_HOURMIN 1208
+#define IDS_HOURSMIN 1209
+#define IDS_HOURMINS 1210
+#define IDS_HOURSMINS 1211
+#define IDS_TIMESTRING 1212
+#define IDS_RXSTRING 1213
+#define IDS_TXSTRING 1214
+
+#endif // _INC_LIGHTSID
diff --git a/private/unimodem/lights/makefile b/private/unimodem/lights/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/lights/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/lights/modem01.ico b/private/unimodem/lights/modem01.ico
new file mode 100644
index 000000000..487943461
--- /dev/null
+++ b/private/unimodem/lights/modem01.ico
Binary files differ
diff --git a/private/unimodem/lights/modem02.ico b/private/unimodem/lights/modem02.ico
new file mode 100644
index 000000000..13542c847
--- /dev/null
+++ b/private/unimodem/lights/modem02.ico
Binary files differ
diff --git a/private/unimodem/lights/modem03.ico b/private/unimodem/lights/modem03.ico
new file mode 100644
index 000000000..d70a00ead
--- /dev/null
+++ b/private/unimodem/lights/modem03.ico
Binary files differ
diff --git a/private/unimodem/lights/modem04.ico b/private/unimodem/lights/modem04.ico
new file mode 100644
index 000000000..321a141b5
--- /dev/null
+++ b/private/unimodem/lights/modem04.ico
Binary files differ
diff --git a/private/unimodem/lights/modemdis.ico b/private/unimodem/lights/modemdis.ico
new file mode 100644
index 000000000..ac1144451
--- /dev/null
+++ b/private/unimodem/lights/modemdis.ico
Binary files differ
diff --git a/private/unimodem/lights/off.bmp b/private/unimodem/lights/off.bmp
new file mode 100644
index 000000000..dc66ca4f6
--- /dev/null
+++ b/private/unimodem/lights/off.bmp
Binary files differ
diff --git a/private/unimodem/lights/on.bmp b/private/unimodem/lights/on.bmp
new file mode 100644
index 000000000..ab5fbbdbf
--- /dev/null
+++ b/private/unimodem/lights/on.bmp
Binary files differ
diff --git a/private/unimodem/lights/resource.h b/private/unimodem/lights/resource.h
new file mode 100644
index 000000000..8355de873
--- /dev/null
+++ b/private/unimodem/lights/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// App Studio generated include file.
+// Used by D:\MOBYWIN\ROVER\RNA\UNIMODEM\LIGHTS\MESSAGES\USA\TEMPLATE.RC
+//
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 119
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1002
+#define _APS_NEXT_SYMED_VALUE 104
+#endif
+#endif
diff --git a/private/unimodem/lights/sources b/private/unimodem/lights/sources
new file mode 100644
index 000000000..6e6c722d6
--- /dev/null
+++ b/private/unimodem/lights/sources
@@ -0,0 +1,56 @@
+!IF 0
+
+Copyright (c) 1989-1993 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+Author:
+
+ John Rogers (JohnRo) 25-Oct-1991
+
+NOTE: Commented description of this file is in \nt\public\oak\bin\sources.tpl
+
+Revision History:
+
+!ENDIF
+
+ROOT=..\..
+MAJORCOMP=net
+MINORCOMP=tapi
+
+TARGETNAME=lights
+TARGETPATH=obj
+TARGETTYPE=PROGRAM
+
+TARGETLIBS=$(_NTDRIVE)\nt\public\sdk\lib\*\kernel32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\gdi32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\user32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\shell32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\comctl32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\advapi32.lib \
+
+INCLUDES=.;..\inc
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+USE_CRTDLL=0
+
+SOURCES=lights.c \
+ lights.rc
+
+UMTYPE=windows
+
+UMENTRY=winmain
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/mdmdbg/debug.h b/private/unimodem/mdmdbg/debug.h
new file mode 100644
index 000000000..49517c2e9
--- /dev/null
+++ b/private/unimodem/mdmdbg/debug.h
@@ -0,0 +1,126 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: debug.h
+// Content: This file contains the declaration for debug macros
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// History:
+//
+//****************************************************************************
+
+// Defines for rovcomm.h
+
+#define NORTL
+#define NOMEM
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NODIALOGHELPER
+#define NOMESSAGESTRING
+#define NOSTRING
+#define NOPATH
+#define NOSYNC
+#define NODI
+
+#define SZ_MODULEA "MDMDBG"
+#define SZ_MODULEW L##"MDMDBG"
+#define SZ_DEBUGSECTION L##"UNIMDM"
+#define SZ_DEBUGINI L##"unimdm.ini"
+
+#include <rovcomm.h>
+
+// Trace flags
+#define TF_DWDEVICEID 0x00010000
+#define TF_HDLINE 0x00020000
+#define TF_HDCALL 0x00040000
+#define TF_PLINEDEV 0x00080000
+#define TF_PMODEMINFO 0x00100000
+
+// Traditional DPRINTF defines
+
+
+#define DPRINTF(sz) TRACE_MSG(TF_GENERAL, sz)
+#define DPRINTF1(sz,x) TRACE_MSG(TF_GENERAL, sz, x)
+#define DPRINTF2(sz,x,y) TRACE_MSG(TF_GENERAL, sz, x, y)
+#define DPRINTF3(sz,x,y,z) TRACE_MSG(TF_GENERAL, sz, x, y, z)
+#define DPRINTF4(sz,w,x,y,z) TRACE_MSG(TF_GENERAL, sz, w, x, y, z)
+#define DPRINTF5(sz,w,x,y,z,a) TRACE_MSG(TF_GENERAL, sz, w, x, y, z, a)
+#define DPRINTF6(sz,w,x,y,z,a,b) TRACE_MSG(TF_GENERAL, sz, w, x, y, z, a, b)
+
+#define DPRINTFA(sz) TRACE_MSGA(TF_GENERAL, sz)
+#define DPRINTFA1(sz,x) TRACE_MSGA(TF_GENERAL, sz, x)
+#define DPRINTFA2(sz,x,y) TRACE_MSGA(TF_GENERAL, sz, x, y)
+#define DPRINTFA3(sz,x,y,z) TRACE_MSGA(TF_GENERAL, sz, x, y, z)
+#define DPRINTFA4(sz,w,x,y,z) TRACE_MSGA(TF_GENERAL, sz, w, x, y, z)
+
+#define SPTrace(x) DBG_ENTER(x)
+
+// Supplementary debug print macros
+
+#define DBG_DDI_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_DWDEVICEID, \
+ ">" fn "(dwDeviceID = %#08lx)", \
+ (ULONG)(dwDeviceID))
+
+#define DBG_HDL_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_HDLINE, \
+ ">" fn "(hdLine = %#08lx)", \
+ (ULONG)(hdLine))
+
+#define DBG_HDC_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_HDCALL, \
+ ">" fn "(hdCall = %#08lx)", \
+ (ULONG)(hdCall))
+
+#define DBG_PLD_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_PLINEDEV, \
+ ">" fn "(pLineDev = %#08lx)", \
+ (ULONG)(pLineDev))
+
+#define DBG_PMI_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_PMODEMINFO, \
+ ">" fn "(pModemInfo = %#08lx)", \
+ (ULONG)(pModemInfo))
+
+#define DBG_DDI_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_DWDEVICEID, \
+ "<" fn "(dwDeviceID = %#08lx) with %#08lx", \
+ (ULONG)(dwDeviceID), (ULONG)(ul))
+
+#define DBG_HDL_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_HDLINE, \
+ "<" fn "(hdLine = %#08lx) with %#08lx", \
+ (ULONG)(hdLine), (ULONG)(ul))
+
+#define DBG_HDC_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_HDCALL, \
+ "<" fn "(hdCall = %#08lx) with %#08lx", \
+ (ULONG)(hdCall), (ULONG)(ul))
+
+#define DBG_PLD_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_PLINEDEV, \
+ "<" fn "(pLineDev = %#08lx) with %#08lx", \
+ (ULONG)(pLineDev), (ULONG)(ul))
+
+#define DBG_PMI_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_PMODEMINFO, \
+ "<" fn "(pModemInfo = %#08lx) with %#08lx", \
+ (ULONG)(pModemInfo), (ULONG)(ul))
+
+// Debug Messages
+//
+#ifdef DEBUG
+
+#define D_TRACE(_x) {_x}
+
+
+#else
+
+#define D_TRACE(_x)
+
+
+#endif //ifdef DEBUG
diff --git a/private/unimodem/mdmdbg/makefile b/private/unimodem/mdmdbg/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/mdmdbg/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/mdmdbg/mdmdbg.c b/private/unimodem/mdmdbg/mdmdbg.c
new file mode 100644
index 000000000..14135381e
--- /dev/null
+++ b/private/unimodem/mdmdbg/mdmdbg.c
@@ -0,0 +1,613 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: mdmdbg.c
+//
+// This file contains the library entry points
+//
+// History:
+// 03-31-96 JosephJ Created
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h"
+#include <tspi.h>
+#include "..\tapisp\tracing.h"
+#include <rovdbg.h>
+
+BOOL WINAPI MdmDbgInit(DWORD dwMyVersion, LPDWORD lpdwNegotiatedVersion);
+void WINAPI MdmDbgDeinit(void);
+void WINAPI MdmDbgNotify(PNOTIFICATION_FRAME pnf);
+
+void iDoLogPrinf(DWORD dwDeviceID, PVOID *pAddr);
+void iDoLogString(DWORD dwDeviceID, PVOID *pAddr);
+void iDoTSPFN_Enter(DWORD dwFromWhere, PVOID pvParam);
+
+
+struct
+{
+ HINSTANCE hInst;
+ HINSTANCE hTspInst;
+} gMdmDbg;
+
+/*----------------------------------------------------------
+Purpose: Attach a process to this DLL
+Returns: --
+Cond: --
+*/
+BOOL Dll_ProcessAttach(HINSTANCE hDll)
+{
+ BOOL fRet = TRUE;
+
+ RovComm_ProcessIniFile();
+ TRACE_MSG(TF_GENERAL, "Process Attach (hDll = %lx)", hDll);
+ gMdmDbg.hInst=hDll;
+ return fRet;
+}
+
+
+/*----------------------------------------------------------
+Purpose: Detach a process from the DLL
+Returns: --
+Cond: --
+*/
+BOOL Dll_ProcessDetach(HINSTANCE hDll)
+{
+ BOOL fRet = TRUE;
+
+ return fRet;
+}
+
+
+/*----------------------------------------------------------
+Purpose: Win32 Libmain
+Returns: --
+Cond: --
+*/
+BOOL APIENTRY LibMain(
+ HANDLE hDll,
+ DWORD dwReason,
+ LPVOID lpReserved)
+{
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ Dll_ProcessAttach(hDll);
+ break;
+
+ case DLL_PROCESS_DETACH:
+ Dll_ProcessDetach(hDll);
+ break;
+
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+
+BOOL WINAPI MdmDbgInit(DWORD dwVersion, LPDWORD lpdwNegotiatedVersion)
+{
+ BOOL fRet=FALSE;
+
+ DPRINTF("MdmDbgInit: Called\n");
+
+ if (dwVersion != dwMDMDBG_CURRENT_VERSION)
+ {
+ DPRINTF2("ERROR: MdmDbgInit: Version conflict."
+ "Supplied=0x%lx; Local=0x%lx.\n",
+ dwVersion,
+ dwMDMDBG_CURRENT_VERSION
+ );
+ goto end;
+ }
+ *lpdwNegotiatedVersion=dwMDMDBG_CURRENT_VERSION;
+ gMdmDbg.hTspInst = GetModuleHandle(TEXT("unimdm.tsp"));
+ DPRINTF1("Tsp handle = 0x%08lx", gMdmDbg.hTspInst);
+ fRet=TRUE;
+
+end:
+ return fRet;
+}
+
+void WINAPI MdmDbgDeinit(void)
+{
+ DPRINTF("MdmDbgDeinit: Called\n");
+ //ASSERT(FALSE);
+}
+
+void WINAPI MdmDbgNotify(PNOTIFICATION_FRAME pnf)
+{
+ DPRINTF("MdmDbgNotify: Called\n");
+ //ASSERT(FALSE);
+}
+
+
+void WINAPI MdmDbgRegisterObject(
+ PVOID pv, // Pointer to the object
+ PGUID pg, // GUID uniquely defining the object
+ DWORD dwVersion, // Implementation version of the object
+ DWORD dwFlags, // Unused, currently zero
+ DWORD dwParam // Unused, currently zero
+)
+{
+ DPRINTF2("RegisterObject: obj 0x%lx, type 0x%lx\n",
+ (DWORD) pv, (DWORD) pg);
+}
+
+void WINAPI MdmDbgUnRegisterObject(
+ PVOID pv, // Pointer to a previously-registered object.
+ DWORD dwFlags, // Unused, currently zero
+ DWORD dwParam // Unused, currently zero
+)
+{
+ DPRINTF1("UnRegiserObject: obj 0x%lx\n", (DWORD) pv);
+}
+
+
+void WINAPI MdmDbgTrace1(
+ DWORD dwWhat
+)
+{
+ DPRINTF1("Trace1 (0x%lx)\n", dwWhat);
+}
+
+
+void WINAPI MdmDbgTrace2(
+ DWORD dwWhat,
+ DWORD dw0
+)
+{
+ DPRINTF2("Trace2 (0x%lx,0x%lx)\n", dwWhat, dw0);
+}
+
+
+void WINAPI MdmDbgTrace3(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1
+)
+{
+ DPRINTF3("Trace3 (0x%lx,0x%lx,0x%lx)\n", dwWhat, dw0, dw1);
+
+ switch(dwWhat)
+ {
+ case IDEVENT_LOG_PRINTF: // dwDeviceID, &FormatString
+ iDoLogPrinf(dw0, (PVOID) dw1);
+ break;
+
+ case IDEVENT_LOG_STRING: // dwDeviceID, &StringID
+ iDoLogString(dw0, (PVOID) dw1);
+ break;
+
+ case IDEVENT_TSPFN_ENTER:
+ iDoTSPFN_Enter(dw0, (PVOID) dw1);
+ break;
+
+ }
+}
+
+#define CP_NEW_TICKCOUNT() \
+ (GetTickCount()& 0x0FFFFFFF)
+
+#define CP_OLD_TICKCOUNT(_cbTransferred) \
+ ((_cbTransferred)>>4)
+
+#define MAX_CP_WAIT 1000
+
+void WINAPI MdmDbgTrace4(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2
+)
+{
+ DPRINTF4("Trace4 (0x%lx,0x%lx,0x%lx,0x%lx)\n", dwWhat, dw0, dw1, dw2);
+
+ switch(dwWhat)
+ {
+ case IDEVENT_CP_GET:
+ if (!dw2) { // NULL overlapped structure...
+
+ static struct
+ {
+ BOOL fInited;
+ DWORD tcStart;
+ DWORD dwMax;
+ DWORD dwCount;
+ DWORD dwSum;
+ } Stats;
+
+ DWORD tcNow = CP_NEW_TICKCOUNT();
+ DWORD tcPost = CP_OLD_TICKCOUNT(dw0);
+ DWORD dwDelta = tcNow-tcPost;
+
+ if (!Stats.fInited)
+ {
+ Stats.tcStart = CP_NEW_TICKCOUNT();
+ Stats.fInited = TRUE;
+ }
+
+ // Update stats.
+ {
+ Stats.dwCount++;
+ Stats.dwSum+=dwDelta;
+ if (dwDelta>Stats.dwMax)
+ {
+ Stats.dwMax=dwDelta;
+ }
+ }
+
+#define DISPLAY_INTERVAL 10000
+
+ if ((tcNow-Stats.tcStart)>= DISPLAY_INTERVAL)
+ {
+ // Display stats
+ if (Stats.dwMax > MAX_CP_WAIT)
+ {
+ TCHAR tchBuf[256];
+ SYSTEMTIME st;
+ GetSystemTime(&st);
+ wsprintf(tchBuf,
+TEXT("MDMDBG: %02lu:%02lu:%02lu CP Latency = (max=%05lu;avg=%05lu;cnt=%03lu;dur=%05lu)[%lu,%lu]\r\n" ),
+ (unsigned long) st.wHour,
+ (unsigned long) st.wMinute,
+ (unsigned long) st.wSecond,
+
+ (unsigned long) Stats.dwMax,
+ (unsigned long) Stats.dwSum/Stats.dwCount,
+ (unsigned long) Stats.dwCount,
+ (unsigned long) (tcNow-Stats.tcStart),
+ (unsigned long) tcPost,
+ (unsigned long) tcNow
+ );
+ OutputDebugString(tchBuf);
+ }
+
+ // Reset.
+ Stats.dwMax=0;
+ Stats.dwCount=0;
+ Stats.dwSum=0;
+ Stats.tcStart = tcNow;
+ }
+
+ }
+ break;
+
+ default:
+ break;
+
+ }
+}
+
+
+void WINAPI MdmDbgTrace5(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3
+)
+{
+ DPRINTF5("Trace5 (0x%lx,0x%lx,0x%lx,0x%lx,0x%lx)\n",
+ dwWhat, dw0, dw1, dw2, dw3);
+}
+
+
+
+void WINAPI MdmDbgTrace6(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3,
+ DWORD dw4
+)
+{
+ DPRINTF6("Trace6 (0x%lx,0x%lx,0x%lx,0x%lx,0x%lx,0x%lx)\n",
+ dwWhat, dw0, dw1, dw2, dw3, dw4);
+}
+
+
+
+void WINAPI MdmDbgTrace7(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3,
+ DWORD dw4,
+ DWORD dw5
+)
+{
+ DPRINTF6("Trace7 (0x%lx,0x%lx,0x%lx,0x%lx,0x%lx,0x%lx, ...)\n",
+ dwWhat, dw0, dw1, dw2, dw3, dw4);
+}
+
+void WINAPI MdmDbgTrace8(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3,
+ DWORD dw4,
+ DWORD dw5,
+ DWORD dw6
+)
+{
+ DPRINTF6("Trace8 (0x%lx,0x%lx,0x%lx,0x%lx,0x%lx,0x%lx, ...)\n",
+ dwWhat, dw0, dw1, dw2, dw3, dw4);
+}
+
+
+void iDoLogPrinf(DWORD dwDeviceID, PVOID *pAddr)
+{
+ DWORD BytesWritten;
+ BOOL Result;
+ va_list VarArg;
+ SYSTEMTIME SysTime;
+ char OutBuffer[1024];
+
+#define FORMAT_STRING (*pAddr)
+
+ va_start(VarArg,FORMAT_STRING);
+
+ GetLocalTime(
+ &SysTime
+ );
+
+ wsprintfA(
+ OutBuffer,
+ "%02d-%02d-%04d %02d:%02d:%02d.%03d - ",
+ SysTime.wMonth,
+ SysTime.wDay,
+ SysTime.wYear,
+ SysTime.wHour,
+ SysTime.wMinute,
+ SysTime.wSecond,
+ SysTime.wMilliseconds
+ );
+
+
+ wvsprintfA(
+ OutBuffer+lstrlenA(OutBuffer),
+ FORMAT_STRING,
+ VarArg
+ );
+
+ OutputDebugStringA(OutBuffer);
+
+ return;
+}
+
+
+void iDoLogString(DWORD dwDeviceID, PVOID *pAddr)
+{
+ DWORD BytesWritten;
+ BOOL Result;
+ va_list VarArg;
+ SYSTEMTIME SysTime;
+ char OutBuffer[1024];
+ char FormatString[256];
+ int Length;
+
+#define STRING_ID (*(LPDWORD)pAddr)
+
+ if (!gMdmDbg.hTspInst) goto end;
+
+ Length=LoadStringA(
+ gMdmDbg.hTspInst,
+ STRING_ID,
+ FormatString,
+ sizeof(FormatString)
+ );
+
+ if (Length == 0) {
+
+#ifdef DEBUG
+ lstrcpyA(FormatString,"Bad String resource");
+#else
+ return;
+#endif
+
+ }
+
+
+
+ va_start(VarArg,STRING_ID);
+
+ GetLocalTime(
+ &SysTime
+ );
+
+ wsprintfA(
+ OutBuffer,
+ "%02d-%02d-%04d %02d:%02d:%02d.%03d - ",
+ SysTime.wMonth,
+ SysTime.wDay,
+ SysTime.wYear,
+ SysTime.wHour,
+ SysTime.wMinute,
+ SysTime.wSecond,
+ SysTime.wMilliseconds
+ );
+
+
+ wvsprintfA(
+ OutBuffer+lstrlenA(OutBuffer),
+ FormatString,
+ VarArg
+ );
+
+ OutputDebugStringA(OutBuffer);
+
+end:
+ return;
+}
+
+
+void iDoTSPFN_Enter(DWORD dwFromWhere, PVOID pvParam)
+{
+ LPTSTR lptsz = TEXT(">???UNKNOWN TSP FN???\n");
+
+ switch(dwFromWhere)
+ {
+ case IDFROM_TSPI_lineAccept:
+ lptsz = TEXT(">TSPI_lineAccept\n");
+ break;
+
+ case IDFROM_TSPI_lineAnswer:
+ lptsz = TEXT(">TSPI_lineAnswer\n");
+ break;
+
+ case IDFROM_TSPI_lineClose:
+ lptsz = TEXT(">TSPI_lineClose\n");
+ break;
+
+ case IDFROM_TSPI_lineCloseCall:
+ lptsz = TEXT(">TSPI_lineCloseCall\n");
+ break;
+
+ case IDFROM_TSPI_lineConditionalMediaDetection:
+ lptsz = TEXT(">TSPI_lineConditionalMediaDetection\n");
+ break;
+
+ case IDFROM_TSPI_lineDial:
+ lptsz = TEXT(">TSPI_lineDial\n");
+ break;
+
+ case IDFROM_TSPI_lineDrop:
+ lptsz = TEXT(">TSPI_lineDrop\n");
+ break;
+
+ case IDFROM_TSPI_lineDropOnClose:
+ lptsz = TEXT(">TSPI_lineDropOnClose\n");
+ break;
+
+ case IDFROM_TSPI_lineGetAddressCaps:
+ lptsz = TEXT(">TSPI_lineGetAddressCaps\n");
+ break;
+
+ case IDFROM_TSPI_lineGetAddressStatus:
+ lptsz = TEXT(">TSPI_lineGetAddressStatus\n");
+ break;
+
+ case IDFROM_TSPI_lineGetCallAddressID:
+ lptsz = TEXT(">TSPI_lineGetCallAddressID\n");
+ break;
+
+ case IDFROM_TSPI_lineGetCallInfo:
+ lptsz = TEXT(">TSPI_lineGetCallInfo\n");
+ break;
+
+ case IDFROM_TSPI_lineGetCallStatus:
+ lptsz = TEXT(">TSPI_lineGetCallStatus\n");
+ break;
+
+ case IDFROM_TSPI_lineGetDevCaps:
+ lptsz = TEXT(">TSPI_lineGetDevCaps\n");
+ break;
+
+ case IDFROM_TSPI_lineGetDevConfig:
+ lptsz = TEXT(">TSPI_lineGetDevConfig\n");
+ break;
+
+ case IDFROM_TSPI_lineGetIcon:
+ lptsz = TEXT(">TSPI_lineGetIcon\n");
+ break;
+
+ case IDFROM_TSPI_lineGetID:
+ lptsz = TEXT(">TSPI_lineGetID\n");
+ break;
+
+ case IDFROM_TSPI_lineGetLineDevStatus:
+ lptsz = TEXT(">TSPI_lineGetLineDevStatus\n");
+ break;
+
+ case IDFROM_TSPI_lineGetNumAddressIDs:
+ lptsz = TEXT(">TSPI_lineGetNumAddressIDs\n");
+ break;
+
+ case IDFROM_TSPI_lineMakeCall:
+ lptsz = TEXT(">TSPI_lineMakeCall\n");
+ break;
+
+ case IDFROM_TSPI_lineNegotiateTSPIVersion:
+ lptsz = TEXT(">TSPI_lineNegotiateTSPIVersion\n");
+ break;
+
+ case IDFROM_TSPI_lineOpen:
+ lptsz = TEXT(">TSPI_lineOpen\n");
+ break;
+
+ case IDFROM_TSPI_lineSetAppSpecific:
+ lptsz = TEXT(">TSPI_lineSetAppSpecific\n");
+ break;
+
+ case IDFROM_TSPI_lineSetCallParams:
+ lptsz = TEXT(">TSPI_lineSetCallParams\n");
+ break;
+
+ case IDFROM_TSPI_lineSetDefaultMediaDetection:
+ lptsz = TEXT(">TSPI_lineSetDefaultMediaDetection\n");
+ break;
+
+ case IDFROM_TSPI_lineSetDevConfig:
+ lptsz = TEXT(">TSPI_lineSetDevConfig\n");
+ break;
+
+ case IDFROM_TSPI_lineSetMediaMode:
+ lptsz = TEXT(">TSPI_lineSetMediaMode\n");
+ break;
+
+ case IDFROM_TSPI_lineSetStatusMessages:
+ lptsz = TEXT(">TSPI_lineSetStatusMessages\n");
+ break;
+
+ case IDFROM_TSPI_providerConfig:
+ lptsz = TEXT(">TSPI_providerConfig\n");
+ break;
+
+ case IDFROM_TSPI_providerCreateLineDevice:
+ lptsz = TEXT(">TSPI_providerCreateLineDevice\n");
+ break;
+
+ case IDFROM_TSPI_providerEnumDevices:
+ lptsz = TEXT(">TSPI_providerEnumDevices\n");
+ break;
+
+ case IDFROM_TSPI_providerFreeDialogInstance:
+ lptsz = TEXT(">TSPI_providerFreeDialogInstance\n");
+ break;
+
+ case IDFROM_TSPI_providerGenericDialogData:
+ lptsz = TEXT(">TSPI_providerGenericDialogData\n");
+ break;
+
+ case IDFROM_TSPI_providerInit:
+ lptsz = TEXT(">TSPI_providerInit\n");
+ break;
+
+ case IDFROM_TSPI_providerInstall:
+ lptsz = TEXT(">TSPI_providerInstall\n");
+ break;
+
+ case IDFROM_TSPI_providerRemove:
+ lptsz = TEXT(">TSPI_providerRemove\n");
+ break;
+
+ case IDFROM_TSPI_providerShutdown:
+ lptsz = TEXT(">TSPI_providerShutdown\n");
+ break;
+
+ case IDFROM_TSPI_providerUIIdentify:
+ lptsz = TEXT(">TSPI_providerUIIdentify\n");
+ break;
+ }
+
+ OutputDebugString(lptsz);
+
+}
diff --git a/private/unimodem/mdmdbg/mdmdbg.def b/private/unimodem/mdmdbg/mdmdbg.def
new file mode 100644
index 000000000..3c2b01a80
--- /dev/null
+++ b/private/unimodem/mdmdbg/mdmdbg.def
@@ -0,0 +1,29 @@
+LIBRARY MODEMUI
+EXETYPE WINDOWS
+PROTMODE
+
+DESCRIPTION 'Windows Modem Diagnostics'
+
+CODE MOVEABLE DISCARDABLE PRELOAD
+DATA MOVEABLE PRELOAD SINGLE
+
+HEAPSIZE 1024
+
+EXPORTS
+
+ MdmDbgInit @100
+ MdmDbgDeinit @101
+
+ MdmDbgRegisterObject @110
+ MdmDbgUnRegisterObject @111
+
+ MdmDbgNotify @120
+
+ MdmDbgTrace1 @130
+ MdmDbgTrace2 @131
+ MdmDbgTrace3 @132
+ MdmDbgTrace4 @133
+ MdmDbgTrace5 @134
+ MdmDbgTrace6 @135
+ MdmDbgTrace7 @136
+ MdmDbgTrace8 @137
diff --git a/private/unimodem/mdmdbg/mdmdbg.rc b/private/unimodem/mdmdbg/mdmdbg.rc
new file mode 100644
index 000000000..d98981000
--- /dev/null
+++ b/private/unimodem/mdmdbg/mdmdbg.rc
@@ -0,0 +1,24 @@
+#include "rcids.h"
+
+#include <windows.h>
+
+/* Version stamping */
+#include "mdmdbg.rcv"
+
+/* Dialog resource */
+//#include "mdmdbg.dlg"
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_CAP_GENERAL "Modem"
+ IDS_CAP_SETTINGS "Modem Settings"
+ IDS_CAP_RING "Modem Address"
+END
+
+
+
diff --git a/private/unimodem/mdmdbg/mdmdbg.rcv b/private/unimodem/mdmdbg/mdmdbg.rcv
new file mode 100644
index 000000000..a05831f5e
--- /dev/null
+++ b/private/unimodem/mdmdbg/mdmdbg.rcv
@@ -0,0 +1,20 @@
+/********************************************************************/
+/* MODEMUI.RCV */
+/********************************************************************/
+#ifdef WINNT
+#include <winver.h>
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Unimodem Diagnostics"
+#define VER_INTERNALNAME_STR "MDMDBG"
+#define VER_LEGALCOPYRIGHT_YEARS "1993-1996"
+#define VER_ORIGINALFILENAME_STR "MDMDBG.DLL"
+
+
+#include <common.ver>
+
diff --git a/private/unimodem/mdmdbg/proj.h b/private/unimodem/mdmdbg/proj.h
new file mode 100644
index 000000000..d0e8b4d04
--- /dev/null
+++ b/private/unimodem/mdmdbg/proj.h
@@ -0,0 +1,15 @@
+//
+// proj.h: Includes all files that are to be part of the precompiled
+// header.
+//
+
+#ifndef __PROJ_H__
+#define __PROJ_H__
+
+#define UNICODE
+
+#include <windows.h>
+#include "debug.h"
+
+#endif //!__PROJ_H__
+
diff --git a/private/unimodem/mdmdbg/rcids.h b/private/unimodem/mdmdbg/rcids.h
new file mode 100644
index 000000000..590d71dfa
--- /dev/null
+++ b/private/unimodem/mdmdbg/rcids.h
@@ -0,0 +1,3 @@
+#define IDS_CAP_GENERAL 101
+#define IDS_CAP_SETTINGS 102
+#define IDS_CAP_RING 103
diff --git a/private/unimodem/mdmdbg/sources b/private/unimodem/mdmdbg/sources
new file mode 100644
index 000000000..5c713be69
--- /dev/null
+++ b/private/unimodem/mdmdbg/sources
@@ -0,0 +1,29 @@
+MAJORCOMP=net
+MINORCOMP=unimodem
+
+TARGETNAME=mdmdbg
+TARGETPATH=obj
+TARGETTYPE=DYNLINK
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib \
+ ..\lib\*\rovcomm.lib
+
+INCLUDES=$(BASEDIR)\public\sdk\inc;..\inc;.
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+DLLENTRY=LibMain
+
+SOURCES=mdmdbg.c\
+ tspobj.c
+
+UMTYPE=windows
+
+DLLBASE=0x68100000
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/mdmdbg/tspobj.c b/private/unimodem/mdmdbg/tspobj.c
new file mode 100644
index 000000000..c991cc095
--- /dev/null
+++ b/private/unimodem/mdmdbg/tspobj.c
@@ -0,0 +1,20 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: mdmdbg.c
+//
+// This file contains implementation-specific knowledge of TSP objects.
+//
+// History:
+// 03-31-96 JosephJ Created
+//
+//---------------------------------------------------------------------------
+
+#include "proj.h"
+//#include "..\tapisp\unimdm.h"
+//#include "..\tapisp\umdmspi.h"
+
+
+// FOR MODEMLIST and TIMERLIST
+//#include "..\tapisp\
diff --git a/private/unimodem/modemui/advsett.c b/private/unimodem/modemui/advsett.c
new file mode 100644
index 000000000..c63c897a0
--- /dev/null
+++ b/private/unimodem/modemui/advsett.c
@@ -0,0 +1,558 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: advsett.c
+//
+// This files contains the dialog code for the Advanced Connection Settings
+// dialog.
+//
+// History:
+// 3-08-94 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+///////////////////////////////////////////////////// INCLUDES
+
+#include "proj.h" // common headers
+
+#ifdef WIN95
+#include "..\..\..\..\win\core\inc\help.h"
+#endif
+
+///////////////////////////////////////////////////// CONTROLLING DEFINES
+
+///////////////////////////////////////////////////// TYPEDEFS
+
+typedef struct tagADVSETT
+ {
+ HWND hdlg; // dialog handle
+ HWND hwndErrCtl;
+ HWND hwndCompress;
+ HWND hwndRequired;
+ HWND hwndUseCell;
+ HWND hwndUseFlowCtl;
+ HWND hwndHard;
+ HWND hwndSoft;
+ HWND hwndModulations;
+ HWND hwndUserInitED;
+
+ LPMODEMINFO pmi; // modeminfo struct passed into dialog
+
+ BOOL bSupportsCompression;
+ BOOL bSupportsForcedEC;
+ BOOL bSupportsCellular;
+ BOOL bSaveCompression;
+ BOOL bSaveForcedEC;
+ BOOL bSaveCellular;
+
+ UINT idBtnSaveFlowCtl;
+
+ } ADVSETT, FAR * PADVSETT;
+
+
+#define AdvSett_GetPtr(hwnd) (PADVSETT)GetWindowLong(hwnd, DWL_USER)
+#define AdvSett_SetPtr(hwnd, lp) (PADVSETT)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+
+//-----------------------------------------------------------------------------------
+// Advanced Settings dialog code
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE AdvSett_OnInitDialog(
+ PADVSETT this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ HWND hwnd = this->hdlg;
+ WIN32DCB FAR * pdcb;
+ DWORD dwOptions;
+ DWORD dwCapOptions;
+ BOOL bFlowCtlEnabled;
+ MODEMSETTINGS msT;
+ TCHAR sz[MAXMEDLEN];
+
+ ASSERT((LPTSTR)lParam);
+
+ this->pmi = (LPMODEMINFO)lParam;
+ pdcb = &this->pmi->dcb;
+ dwOptions = this->pmi->ms.dwPreferredModemOptions;
+ dwCapOptions = this->pmi->devcaps.dwModemOptions;
+
+ // Save away the window handles
+ this->hwndErrCtl = GetDlgItem(hwnd, IDC_AM_ERRCTL);
+ this->hwndCompress = GetDlgItem(hwnd, IDC_AM_COMPRESS);
+ this->hwndRequired = GetDlgItem(hwnd, IDC_AM_REQUIRED);
+ this->hwndUseCell = GetDlgItem(hwnd, IDC_AM_USECELL);
+ this->hwndUseFlowCtl = GetDlgItem(hwnd, IDC_AM_USEFLOWCTL);
+ this->hwndHard = GetDlgItem(hwnd, IDC_AM_HW);
+ this->hwndSoft = GetDlgItem(hwnd, IDC_AM_SW);
+ this->hwndModulations = GetDlgItem(hwnd, IDC_AM_MODULATION_LIST);
+ this->hwndUserInitED = GetDlgItem(hwnd, IDC_AM_EXTRA_ED);
+
+ Edit_LimitText(this->hwndUserInitED, LINE_LEN-1);
+
+ // Enable controls according to the device capabilities
+ Button_Enable(this->hwndErrCtl, IsFlagSet(dwCapOptions, MDM_ERROR_CONTROL));
+
+ this->bSupportsCompression = IsFlagSet(dwCapOptions, MDM_COMPRESSION);
+ Button_Enable(this->hwndCompress, this->bSupportsCompression);
+
+ this->bSupportsForcedEC = IsFlagSet(dwCapOptions, MDM_FORCED_EC);
+ Button_Enable(this->hwndRequired, this->bSupportsForcedEC);
+
+ this->bSupportsCellular = IsFlagSet(dwCapOptions, MDM_CELLULAR);
+ Button_Enable(this->hwndUseCell, this->bSupportsCellular);
+
+ // Build modulation list _and_ set it.
+ if (IsFlagSet(dwCapOptions, MDM_CCITT_OVERRIDE))
+ {
+ int n;
+ int idSet = -1;
+ int idDef;
+
+ SetWindowRedraw(this->hwndModulations, FALSE);
+ ComboBox_ResetContent(this->hwndModulations);
+
+ // add Bell
+ n = ComboBox_AddString(this->hwndModulations, SzFromIDS(g_hinst, IDS_BELL, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(this->hwndModulations, n, 0);
+ idDef = n;
+ if (IsFlagClear(dwOptions, MDM_CCITT_OVERRIDE))
+ {
+ idSet = n;
+ }
+
+ // add CCITT
+ n = ComboBox_AddString(this->hwndModulations, SzFromIDS(g_hinst, IDS_CCITT_V21V22, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(this->hwndModulations, n, MDM_CCITT_OVERRIDE);
+ if (IsFlagSet(dwOptions, MDM_CCITT_OVERRIDE))
+ {
+ idSet = n;
+ }
+
+ // add V.23, if present
+ if (IsFlagSet(dwCapOptions, MDM_V23_OVERRIDE))
+ {
+ n = ComboBox_AddString(this->hwndModulations, SzFromIDS(g_hinst, IDS_CCITT_V23, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(this->hwndModulations, n, MDM_CCITT_OVERRIDE | MDM_V23_OVERRIDE);
+ if (IsFlagSet(dwOptions, MDM_CCITT_OVERRIDE) && IsFlagSet(dwOptions, MDM_V23_OVERRIDE))
+ {
+ idSet = n;
+ }
+ }
+
+ // set current selection
+ if (-1 == idSet)
+ {
+ idSet = idDef;
+ }
+ ComboBox_SetCurSel(this->hwndModulations, idSet);
+ SetWindowRedraw(this->hwndModulations, TRUE);
+ }
+ else
+ {
+ ComboBox_Enable(this->hwndModulations, FALSE);
+ EnableWindow(GetDlgItem(hwnd, IDC_AM_MODULATION), FALSE);
+ }
+
+ // Set the controls according to the modemsettings
+ Button_SetCheck(this->hwndErrCtl, IsFlagSet(dwCapOptions, MDM_ERROR_CONTROL) &&
+ IsFlagSet(dwOptions, MDM_ERROR_CONTROL));
+ Button_SetCheck(this->hwndCompress, this->bSupportsCompression &&
+ IsFlagSet(dwOptions, MDM_COMPRESSION));
+ Button_SetCheck(this->hwndRequired, this->bSupportsForcedEC &&
+ IsFlagSet(dwOptions, MDM_FORCED_EC));
+ Button_SetCheck(this->hwndUseCell, this->bSupportsCellular &&
+ IsFlagSet(dwOptions, MDM_CELLULAR));
+
+ // Default compression settings should be on when the user
+ // enables error control (when it is initially turned off)
+ if (this->bSupportsCompression && IsFlagClear(dwOptions, MDM_COMPRESSION))
+ this->bSaveCompression = TRUE;
+
+ // Base the flow control on the DCB setting
+ ConvertFlowCtl(pdcb, &msT, CFC_DCBTOMS | CFC_HW_CAPABLE | CFC_SW_CAPABLE);
+ bFlowCtlEnabled = IsFlagSet(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_HARD) ||
+ IsFlagSet(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT);
+ Button_SetCheck(this->hwndUseFlowCtl, bFlowCtlEnabled);
+
+ // Is the flow control enabled?
+ if (bFlowCtlEnabled)
+ {
+ // Yes; use the preferred settings
+ this->idBtnSaveFlowCtl = IsFlagSet(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_HARD) ?
+ IDC_AM_HW : IDC_AM_SW;
+ CheckRadioButton(this->hdlg, IDC_AM_HW, IDC_AM_SW, this->idBtnSaveFlowCtl);
+ }
+ else
+ {
+ // No; default to hardware if the user ever enables it
+ this->idBtnSaveFlowCtl = IDC_AM_HW;
+ CheckRadioButton(this->hdlg, IDC_AM_HW, IDC_AM_SW, -1);
+ }
+
+ // Enable buttons based upon setting of "owner" control
+ if (FALSE == Button_GetCheck(this->hwndErrCtl))
+ {
+ Button_Enable(this->hwndCompress, FALSE);
+ Button_Enable(this->hwndRequired, FALSE);
+ Button_Enable(this->hwndUseCell, FALSE);
+ }
+ if (FALSE == Button_GetCheck(this->hwndUseFlowCtl))
+ {
+ Button_Enable(this->hwndHard, FALSE);
+ Button_Enable(this->hwndSoft, FALSE);
+ }
+
+ // Other settings
+
+ Edit_SetText(this->hwndUserInitED, this->pmi->szUserInit);
+
+ Button_SetCheck(GetDlgItem(hwnd, IDC_LOGGING), IsFlagSet(this->pmi->uFlags, MIF_ENABLE_LOGGING));
+
+ return TRUE; // let USER set the initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE AdvSett_OnApply(
+ PADVSETT this)
+ {
+ LPDWORD pdw = &this->pmi->ms.dwPreferredModemOptions;
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+ TCHAR szBuf[LINE_LEN];
+ BOOL bCheck;
+ MODEMSETTINGS msT;
+ UINT uFlags;
+ int iSel;
+
+ // Determine error control settings
+ if (Button_GetCheck(this->hwndErrCtl))
+ SetFlag(*pdw, MDM_ERROR_CONTROL);
+ else
+ ClearFlag(*pdw, MDM_ERROR_CONTROL);
+
+ if (Button_GetCheck(this->hwndCompress))
+ SetFlag(*pdw, MDM_COMPRESSION);
+ else
+ ClearFlag(*pdw, MDM_COMPRESSION);
+
+ if (Button_GetCheck(this->hwndRequired))
+ SetFlag(*pdw, MDM_FORCED_EC);
+ else
+ ClearFlag(*pdw, MDM_FORCED_EC);
+
+ if (Button_GetCheck(this->hwndUseCell))
+ SetFlag(*pdw, MDM_CELLULAR);
+ else
+ ClearFlag(*pdw, MDM_CELLULAR);
+
+ // (We use a temporary modemsettings struct to centralize the conversion
+ // logic.)
+ // Determine flow control settings; enable flow control?
+ msT.dwPreferredModemOptions = 0;
+ if (Button_GetCheck(this->hwndUseFlowCtl))
+ {
+ // Yes; is hardware flow control selected?
+ if (IsDlgButtonChecked(this->hdlg, IDC_AM_HW))
+ {
+ // Yes
+ SetFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_HARD);
+ ClearFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT);
+ }
+ else
+ {
+ // No
+ ClearFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_HARD);
+ SetFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT);
+ }
+ }
+ else
+ {
+ // No
+ ClearFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_HARD);
+ ClearFlag(msT.dwPreferredModemOptions, MDM_FLOWCONTROL_SOFT);
+ }
+ // Always set the DCB according to the control settings.
+ ConvertFlowCtl(pdcb, &msT, CFC_MSTODCB);
+
+ // Set the modemsettings according to the DCB.
+ uFlags = 0;
+ if (IsFlagSet(this->pmi->devcaps.dwModemOptions, MDM_FLOWCONTROL_HARD))
+ {
+ SetFlag(uFlags, CFC_HW_CAPABLE);
+ }
+ if (IsFlagSet(this->pmi->devcaps.dwModemOptions, MDM_FLOWCONTROL_SOFT))
+ {
+ SetFlag(uFlags, CFC_SW_CAPABLE);
+ }
+ ConvertFlowCtl(pdcb, &this->pmi->ms, CFC_DCBTOMS | uFlags);
+
+ // Set the modulation settings
+ *pdw &= ~(MDM_CCITT_OVERRIDE | MDM_V23_OVERRIDE);
+ if (IsFlagSet(this->pmi->devcaps.dwModemOptions, MDM_CCITT_OVERRIDE))
+ {
+ iSel = ComboBox_GetCurSel(this->hwndModulations);
+ *pdw |= ComboBox_GetItemData(this->hwndModulations, iSel);
+ }
+
+ // Get the user-defined init string
+ Edit_GetText(this->hwndUserInitED, szBuf, ARRAYSIZE(szBuf));
+ if (!IsSzEqual(szBuf, this->pmi->szUserInit))
+ {
+ SetFlag(this->pmi->uFlags, MIF_USERINIT_CHANGED);
+ lstrcpyn(this->pmi->szUserInit, szBuf, ARRAYSIZE(this->pmi->szUserInit));
+ }
+
+ // Get logging setting
+ bCheck = Button_GetCheck(GetDlgItem(this->hdlg, IDC_LOGGING));
+ if (bCheck != IsFlagSet(this->pmi->uFlags, MIF_ENABLE_LOGGING))
+ {
+ SetFlag(this->pmi->uFlags, MIF_LOGGING_CHANGED);
+ if (bCheck)
+ SetFlag(this->pmi->uFlags, MIF_ENABLE_LOGGING);
+ else
+ ClearFlag(this->pmi->uFlags, MIF_ENABLE_LOGGING);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE AdvSett_OnCommand(
+ PADVSETT this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ HWND hwnd = this->hdlg;
+ BOOL bCheck;
+
+ switch (id)
+ {
+ case IDC_AM_ERRCTL:
+ bCheck = Button_GetCheck(hwndCtl);
+ Button_Enable(this->hwndCompress, bCheck && this->bSupportsCompression);
+ Button_Enable(this->hwndRequired, bCheck && this->bSupportsForcedEC);
+ Button_Enable(this->hwndUseCell, bCheck && this->bSupportsCellular);
+
+ // Is the user unchecking this box?
+ if (FALSE == bCheck)
+ {
+ // Yes; uncheck the boxes inside, too
+ this->bSaveCompression = Button_GetCheck(this->hwndCompress);
+ this->bSaveForcedEC = Button_GetCheck(this->hwndRequired);
+ this->bSaveCellular = Button_GetCheck(this->hwndUseCell);
+
+ Button_SetCheck(this->hwndCompress, FALSE);
+ Button_SetCheck(this->hwndRequired, FALSE);
+ Button_SetCheck(this->hwndUseCell, FALSE);
+ }
+ else
+ {
+ // No
+ Button_SetCheck(this->hwndCompress, this->bSaveCompression);
+ Button_SetCheck(this->hwndRequired, this->bSaveForcedEC);
+ Button_SetCheck(this->hwndUseCell, this->bSaveCellular);
+ }
+ break;
+
+ case IDC_AM_USEFLOWCTL: {
+ UINT idBtn;
+
+ bCheck = Button_GetCheck(hwndCtl);
+ Button_Enable(this->hwndHard, bCheck);
+ Button_Enable(this->hwndSoft, bCheck);
+
+ // Is the user unchecking this box?
+ if (FALSE == bCheck)
+ {
+ // Yes; uncheck the radio buttons
+ if (IsDlgButtonChecked(this->hdlg, IDC_AM_HW))
+ this->idBtnSaveFlowCtl = IDC_AM_HW;
+ else
+ this->idBtnSaveFlowCtl = IDC_AM_SW;
+ idBtn = (UINT)-1;
+ }
+ else
+ {
+ // No
+ idBtn = this->idBtnSaveFlowCtl;
+ }
+ CheckRadioButton(this->hdlg, IDC_AM_HW, IDC_AM_SW, idBtn);
+ }
+ break;
+
+ case IDOK:
+ AdvSett_OnApply(this);
+ // Fall thru
+ // | |
+ // v v
+ case IDCANCEL:
+ EndDialog(this->hdlg, id);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DESTROY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE AdvSett_OnDestroy(
+ PADVSETT this)
+ {
+ }
+
+
+///////////////////////////////////////////////////// EXPORTED FUNCTIONS
+
+static BOOL s_bAdvSettRecurse = FALSE;
+
+LRESULT INLINE AdvSett_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bAdvSettRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT AdvSett_DlgProc(
+ PADVSETT this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_AM_ERRCTL, IDH_UNI_CON_ADV_ERROR,
+ IDC_AM_REQUIRED, IDH_UNI_CON_ADV_REQUIRED,
+ IDC_AM_COMPRESS, IDH_UNI_CON_ADV_COMPRESS,
+ IDC_AM_USECELL, IDH_UNI_CON_ADV_CELLULAR,
+ IDC_AM_USEFLOWCTL, IDH_UNI_CON_ADV_FLOW,
+ IDC_AM_HW, IDH_UNI_CON_ADV_FLOW,
+ IDC_AM_SW, IDH_UNI_CON_ADV_FLOW,
+ IDC_AM_MODULATION, IDH_UNI_CON_ADV_MODULATION,
+ IDC_AM_MODULATION_LIST, IDH_UNI_CON_ADV_MODULATION,
+ IDC_AM_EXTRA, IDH_UNI_CON_ADV_EXTRA,
+ IDC_AM_EXTRA_ED, IDH_UNI_CON_ADV_EXTRA,
+ IDC_LOGGING, IDH_UNI_CON_ADV_AUDIT,
+ 0, 0 };
+#pragma data_seg()
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, AdvSett_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, AdvSett_OnCommand);
+ HANDLE_MSG(this, WM_DESTROY, AdvSett_OnDestroy);
+
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szWinHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szWinHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ default:
+ return AdvSett_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK AdvSett_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PADVSETT this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bAdvSettRecurse)
+ {
+ s_bAdvSettRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = AdvSett_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ if (message == WM_INITDIALOG)
+ {
+ this = (PADVSETT)LocalAlloc(LPTR, sizeof(ADVSETT));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_SETTINGS),
+ MAKEINTRESOURCE(IDS_CAP_SETTINGS),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)AdvSett_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ AdvSett_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)AdvSett_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ AdvSett_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ AdvSett_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, AdvSett_DlgProc(this, message, wParam, lParam));
+ }
+
diff --git a/private/unimodem/modemui/cstrings.c b/private/unimodem/modemui/cstrings.c
new file mode 100644
index 000000000..29782a4b3
--- /dev/null
+++ b/private/unimodem/modemui/cstrings.c
@@ -0,0 +1,52 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: cstrings.c
+//
+// This file contains read-only string constants
+//
+// History:
+// 12-23-93 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+#include "proj.h"
+
+#pragma data_seg(DATASEG_READONLY)
+
+TCHAR const FAR c_szNULL[] = TEXT("");
+TCHAR const FAR c_szDelim[] = TEXT(" \t,");
+TCHAR const FAR c_szBackslash[] = TEXT("\\");
+
+TCHAR const FAR c_szWinHelpFile[] = TEXT("windows.hlp");
+
+// Registry key names
+
+TCHAR const FAR c_szClass[] = REGSTR_KEY_CLASS;
+TCHAR const FAR c_szPortClass[] = TEXT("ports");
+TCHAR const FAR c_szModemClass[] = TEXT("Modem");
+TCHAR const FAR c_szEnumPropPages[] = REGSTR_VAL_ENUMPROPPAGES;
+TCHAR const FAR c_szPortName[] = TEXT("PortName");
+TCHAR const FAR c_szPortSubclass[] = TEXT("PortSubClass");
+TCHAR const FAR c_szConfigDialog[] = TEXT("ConfigDialog");
+TCHAR const FAR c_szAttachedTo[] = TEXT("AttachedTo");
+TCHAR const FAR c_szDeviceType[] = TEXT("DeviceType");
+TCHAR const FAR c_szDeviceDesc[] = TEXT("DeviceDesc");
+TCHAR const FAR c_szDeviceCaps[] = REGSTR_VAL_PROPERTIES;
+TCHAR const FAR c_szDefault[] = REGSTR_KEY_DEFAULT;
+TCHAR const FAR c_szFriendlyName[] = REGSTR_VAL_FRIENDLYNAME;
+TCHAR const FAR c_szDCB[] = TEXT("DCB");
+TCHAR const FAR c_szUserInit[] = TEXT("UserInit");
+TCHAR const FAR c_szLogging[] = TEXT("Logging");
+TCHAR const FAR c_szLoggingPath[] = TEXT("LoggingPath");
+TCHAR const FAR c_szPathEnum[] = REGSTR_PATH_ENUM;
+TCHAR const FAR c_szPathRoot[] = REGSTR_PATH_ROOT;
+TCHAR const FAR c_szInactivityScale[] = TEXT("InactivityScale");
+
+TCHAR const FAR c_szVoice[] = TEXT("VoiceSwitchFeatures");
+TCHAR const FAR c_szVoiceProfile[] = TEXT("VoiceProfile");
+
+TCHAR const FAR c_szSerialUI[] = TEXT("SERIALUI.DLL");
+
+#pragma data_seg()
diff --git a/private/unimodem/modemui/cstrings.h b/private/unimodem/modemui/cstrings.h
new file mode 100644
index 000000000..213122a7b
--- /dev/null
+++ b/private/unimodem/modemui/cstrings.h
@@ -0,0 +1,47 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: cstrings.h
+//
+//---------------------------------------------------------------------------
+
+#ifndef _CSTRINGS_H_
+#define _CSTRINGS_H_
+
+extern TCHAR const FAR c_szNULL[];
+extern TCHAR const FAR c_szDelim[];
+extern TCHAR const FAR c_szBackslash[];
+
+extern TCHAR const FAR c_szWinHelpFile[];
+
+// Registry key names
+
+extern TCHAR const FAR c_szClass[];
+extern TCHAR const FAR c_szPortClass[];
+extern TCHAR const FAR c_szModemClass[];
+extern TCHAR const FAR c_szEnumPropPages[];
+extern TCHAR const FAR c_szPortName[];
+extern TCHAR const FAR c_szPortSubclass[];
+extern TCHAR const FAR c_szConfigDialog[];
+extern TCHAR const FAR c_szDeviceDesc[];
+extern TCHAR const FAR c_szAttachedTo[];
+extern TCHAR const FAR c_szDeviceType[];
+extern TCHAR const FAR c_szDeviceCaps[];
+extern TCHAR const FAR c_szFriendlyName[];
+extern TCHAR const FAR c_szDefault[];
+extern TCHAR const FAR c_szDCB[];
+extern TCHAR const FAR c_szUserInit[];
+extern TCHAR const FAR c_szLogging[];
+extern TCHAR const FAR c_szLoggingPath[];
+extern TCHAR const FAR c_szPathEnum[];
+extern TCHAR const FAR c_szPathRoot[];
+extern TCHAR const FAR c_szInactivityScale[];
+
+extern TCHAR const FAR c_szVoice[];
+extern TCHAR const FAR c_szVoiceProfile[];
+
+extern TCHAR const FAR c_szSerialUI[];
+
+#endif // _CSTRINGS_H_
+
diff --git a/private/unimodem/modemui/dlgids.h b/private/unimodem/modemui/dlgids.h
new file mode 100644
index 000000000..602abec07
--- /dev/null
+++ b/private/unimodem/modemui/dlgids.h
@@ -0,0 +1,114 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by template.rc
+//
+#define IDD_ADV_MODEM 102
+#define IDB_PATTERNS 103
+#define IDD_GENERAL 117
+#define IDD_MDMSETTINGS 118
+#define IDD_PORTSETTINGS 119
+#define IDD_RING 119
+#define IDD_CALLFWD 120
+#define IDD_CHEAPRING 121
+#define IDC_AM_ERRCTL 1000
+#define IDC_STRICTSPEED 1000
+#define IDC_LOUD 1001
+#define IDC_WAITFORDIALTONE 1003
+#define IDC_AM_COMPRESS 1005
+#define IDC_AM_REQUIRED 1006
+#define IDC_AM_USECELL 1007
+#define IDC_AM_FLOWCTL_GRP 1008
+#define IDC_AM_USEFLOWCTL 1009
+#define IDC_AM_HW 1010
+#define IDC_AM_SW 1011
+#define IDC_ED_FRIENDLYNAME 1011
+#define IDC_AM_MODULATION 1012
+#define IDC_BREAK 1012
+#define IDC_AM_MODULATION_LIST 1013
+#define IDC_AM_EXTRA 1015
+#define IDC_AM_EXTRA_ED 1016
+#define IDC_LBL_PORT 1018
+#define IDC_LOGGING 1020
+#define IDC_CB_PORT 1020
+#define IDC_ST_PORT 1021
+#define IDC_PB_CONFIGURE 1022
+#define IDC_ED_PORT 1022
+#define IDC_CONN_PREF 1023
+#define IDC_LBL_DATABITS 1024
+#define IDC_DATABITS 1025
+#define IDC_LBL_PARITY 1026
+#define IDC_PB_ADVANCED 1027
+#define IDC_PARITY 1028
+#define IDC_SPEAKER 1029
+#define IDC_LBL_STOPBITS 1029
+#define IDC_STOPBITS 1030
+#define IDC_SPEED 1031
+#define IDC_VOLUME 1032
+#define IDC_CB_SPEED 1036
+#define IDC_CH_DIALTIMER 1039
+#define IDC_ED_DIALTIMER 1040
+#define IDC_SECONDS 1041
+#define IDC_CH_IDLETIMER 1042
+#define IDC_ED_IDLETIMER 1043
+#define IDC_MINUTES 1044
+#define IDC_LBL_OFF 1045
+#define IDC_PS_PORT 1046
+#define IDC_PS_LBL_BAUDRATE 1047
+#define IDC_PS_BAUDRATE 1048
+#define IDC_PS_LBL_DATABITS 1049
+#define IDC_PS_DATABITS 1050
+#define IDC_PS_LBL_PARITY 1051
+#define IDC_PS_PARITY 1052
+#define IDC_PS_LBL_STOPBITS 1053
+#define IDC_PS_STOPBITS 1054
+#define IDC_PS_LBL_FLOWCTL 1055
+#define IDC_PS_FLOWCTL 1056
+#define IDC_PS_PB_ADVANCED 1057
+#define IDC_PS_PB_RESTORE 1058
+#define IDC_GE_ICON 1059
+#define IDC_CALL_PREF 1060
+#define IDC_FWD_GROUP 1061
+#define IDC_FWD_CHECK 1062
+#define IDC_FWD_ACT 1063
+#define IDC_FWD_DEACT 1064
+#define IDC_DEACT 1067
+#define IDC_ACT 1068
+#define IDC_RING_GROUP 1068
+#define IDC_RING_CHECK 1069
+#define IDC_LBL_ADDR_PRI 1070
+#define IDC_LBL_ADDR1 1071
+#define IDC_LBL_ADDR2 1072
+#define IDC_ADDR_PRI 1073
+#define IDC_ADDR1 1074
+#define IDC_ADDR2 1075
+#define IDC_LBL_ADDR3 1076
+#define IDC_ADDR3 1077
+#define IDC_LBL_PRI_CALLERS 1078
+#define IDC_PRI_CALLERS 1079
+#define IDC_LBL_CALLBACK 1080
+#define IDC_CALLBACK 1081
+#define IDC_TYPE_ADDR_PRI 1082
+#define IDC_TYPE_ADDR1 1083
+#define IDC_TYPE_ADDR2 1084
+#define IDC_TYPE_ADDR3 1085
+#define IDC_TYPE_PRI_CALLERS 1086
+#define IDC_TYPE_CALLBACK 1087
+#define IDC_LBL_RING1 1088
+#define IDC_LBL_RING2 1089
+#define IDC_LBL_RING3 1090
+#define IDC_TYPE_RING1 1091
+#define IDC_TYPE_RING2 1092
+#define IDC_TYPE_RING3 1093
+#define IDC_AM_ERRCTL_GRP -1
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 122
+#define _APS_NEXT_COMMAND_VALUE 101
+#define _APS_NEXT_CONTROL_VALUE 1094
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/private/unimodem/modemui/dll.c b/private/unimodem/modemui/dll.c
new file mode 100644
index 000000000..8f6d47b36
--- /dev/null
+++ b/private/unimodem/modemui/dll.c
@@ -0,0 +1,312 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// File: dll.c
+//
+// This file contains the library entry points
+//
+// History:
+// 12-23-93 ScottH Created
+// 9-22-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h"
+#include <rovdbg.h> // debug assertion code
+
+// Global data
+//
+int g_cProcesses = 0;
+BOOL g_bAdminUser;
+
+
+#ifdef WIN32
+
+CRITICAL_SECTION g_csDll = { 0 };
+
+#endif // WIN32
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the DLL
+Returns:
+Cond: --
+*/
+BOOL PRIVATE Dll_Initialize(void)
+ {
+ BOOL bRet = TRUE;
+
+ InitCommonControls();
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Register window classes per process
+Returns:
+Cond: --
+*/
+BOOL PRIVATE InitWindowClasses(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Terminate DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_Terminate(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Unregister window classes per process
+Returns:
+Cond: --
+*/
+void PRIVATE TermWindowClasses(
+ HINSTANCE hinst)
+ {
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Attach a process to this DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessAttach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+#ifdef WIN32
+
+ if (g_cProcesses == 0)
+ {
+ InitializeCriticalSection(&g_csDll);
+#ifndef WIN95
+ g_bAdminUser = IsAdminUser();
+#endif // WIN95
+ }
+
+#endif // WIN32
+
+ if (bSuccess)
+ {
+ g_hinst = hDll;
+
+#ifdef DEBUG
+
+ // We do this simply to load the debug .ini flags
+ //
+ RovComm_ProcessIniFile();
+
+ TRACE_MSG(TF_GENERAL, "Process Attach [%d] (hDll = %lx)", g_cProcesses, hDll);
+ DEBUG_BREAK(BF_ONPROCESSATT);
+
+#endif
+
+ if (g_cProcesses++ == 0)
+ {
+ bSuccess = Dll_Initialize();
+ }
+
+ if (bSuccess)
+ {
+ // (Only do this if we succeeded above)
+ //
+ // Register the window classes again (they are per-process)
+ //
+ bSuccess = InitWindowClasses(hDll);
+ }
+ }
+
+ return bSuccess;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Detach a process from the DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessDetach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+ ASSERT(hDll == g_hinst);
+
+ DEBUG_CODE( TRACE_MSG(TF_GENERAL, "Process Detach [%d] (hDll = %lx)",
+ g_cProcesses-1, hDll); )
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONPROCESSDET); )
+
+ if (--g_cProcesses == 0)
+ {
+ bSuccess = Dll_Terminate(g_hinst);
+ }
+
+#ifdef WIN32
+
+ if (g_cProcesses == 0)
+ {
+ DeleteCriticalSection(&g_csDll);
+ }
+
+#endif // WIN32
+
+ TermWindowClasses(hDll);
+
+ return bSuccess;
+ }
+
+
+//
+// Per-instance data
+//
+#pragma data_seg(DATASEG_PERINSTANCE)
+
+HINSTANCE g_hinst = 0;
+
+#pragma data_seg()
+
+
+// **************************************************************************
+// WIN32 specific code
+// **************************************************************************
+
+#ifdef WIN32
+
+#ifdef DEBUG
+BOOL g_bExclusive=FALSE;
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Enter an exclusive section
+Returns: --
+Cond: --
+*/
+void PUBLIC Dll_EnterExclusive(void)
+ {
+ EnterCriticalSection(&g_csDll);
+
+#ifdef DEBUG
+ g_bExclusive = TRUE;
+#endif
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Leave an exclusive section
+Returns: --
+Cond: --
+*/
+void PUBLIC Dll_LeaveExclusive(void)
+ {
+#ifdef DEBUG
+ g_bExclusive = FALSE;
+#endif
+
+ LeaveCriticalSection(&g_csDll);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Win32 Libmain
+Returns: --
+Cond: --
+*/
+BOOL APIENTRY LibMain(
+ HANDLE hDll,
+ DWORD dwReason,
+ LPVOID lpReserved)
+ {
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ Dll_ProcessAttach(hDll);
+ break;
+
+ case DLL_PROCESS_DETACH:
+ Dll_ProcessDetach(hDll);
+ break;
+
+ case DLL_THREAD_ATTACH:
+
+#ifdef DEBUG
+
+ ENTER_X()
+ {
+ // We do this simply to load the debug .ini flags
+ //
+ RovComm_ProcessIniFile();
+
+ TRACE_MSG(TF_GENERAL, "Thread Attach [%d] (hDll = %lx)",
+ g_cProcesses, hDll);
+ }
+ LEAVE_X()
+
+ DEBUG_BREAK(BF_ONTHREADATT);
+
+#endif
+
+ break;
+
+ case DLL_THREAD_DETACH:
+
+#ifdef DEBUG
+
+ ENTER_X()
+ {
+ TRACE_MSG(TF_GENERAL, "Thread Detach [%d] (hDll = %lx)",
+ g_cProcesses, hDll);
+ }
+ LEAVE_X()
+
+ DEBUG_BREAK(BF_ONTHREADDET);
+
+#endif
+
+ break;
+
+ default:
+ break;
+ }
+
+ return TRUE;
+ }
+
+
+#else // WIN32
+
+
+// **************************************************************************
+// WIN16 specific code
+// **************************************************************************
+
+
+BOOL CALLBACK LibMain(HINSTANCE hinst, UINT wDS, DWORD unused)
+ {
+ return Dll_ProcessAttach(hinst);
+ }
+
+BOOL CALLBACK WEP(BOOL fSystemExit)
+ {
+ return Dll_ProcessDetach(g_hinst);
+ }
+
+#endif // WIN32
+
+
+
+
diff --git a/private/unimodem/modemui/dll.h b/private/unimodem/modemui/dll.h
new file mode 100644
index 000000000..132abe43e
--- /dev/null
+++ b/private/unimodem/modemui/dll.h
@@ -0,0 +1,48 @@
+//
+// dll.h
+//
+
+#ifndef __DLL_H__
+#define __DLL_H__
+
+extern HINSTANCE g_hinst;
+
+#ifdef WIN32
+
+// Notes:
+// 1. Never "return" from the critical section.
+// 2. Never "SendMessage" or "Yield" from the critical section.
+// 3. Never call USER API which may yield.
+// 4. Always make the critical section as small as possible.
+// 5. Critical sections in Win95 block across processes. In NT
+// they are per-process only, so use mutexes instead.
+//
+
+#define WIN32_CODE(x) x
+
+void PUBLIC Dll_EnterExclusive(void);
+void PUBLIC Dll_LeaveExclusive(void);
+
+#ifdef WIN95
+#define USER_IS_ADMIN() TRUE
+#else // !WIN95
+extern BOOL g_bAdminUser;
+#define USER_IS_ADMIN() (g_bAdminUser)
+#endif // !WIN95
+
+#define ENTER_X() Dll_EnterExclusive();
+#define LEAVE_X() Dll_LeaveExclusive();
+#define ASSERT_X() ASSERT(g_bExclusive)
+
+#else // WIN32
+
+#define WIN32_CODE(x)
+
+#define ENTER_X()
+#define LEAVE_X()
+#define ASSERT_X()
+
+#endif // WIN32
+
+#endif //!__DLL_H__
+
diff --git a/private/unimodem/modemui/gen.c b/private/unimodem/modemui/gen.c
new file mode 100644
index 000000000..3899f97b9
--- /dev/null
+++ b/private/unimodem/modemui/gen.c
@@ -0,0 +1,836 @@
+//---------------------------------------------------------------------------
+//
+// Copyrght (c) Microsoft Corporation 1993-1994
+//
+// File: gen.c
+//
+// This files contains the dialog code for the General property page.
+//
+// History:
+// 1-14-94 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+///////////////////////////////////////////////////// INCLUDES
+
+#include "proj.h" // common headers
+
+#ifdef WIN95
+#include "..\..\..\..\win\core\inc\help.h"
+#endif
+
+///////////////////////////////////////////////////// CONTROLLING DEFINES
+
+///////////////////////////////////////////////////// TYPEDEFS
+
+#define SUBCLASS_PARALLEL 0
+#define SUBCLASS_SERIAL 1
+#define SUBCLASS_MODEM 2
+
+#define MAX_NUM_VOLUME_TICS 4
+
+typedef struct tagGEN
+ {
+ HWND hdlg; // dialog handle
+ HWND hwndPort;
+
+ LPMODEMINFO pmi; // modeminfo struct passed in to dialog
+ HPORTMAP hportmap;
+ int ticVolume;
+ int iSelOriginal;
+
+ int ticVolumeMax;
+ struct { // volume tic mapping info
+ DWORD dwVolume;
+ DWORD dwMode;
+ } tics[MAX_NUM_VOLUME_TICS];
+
+ } GEN, FAR * PGEN;
+
+///////////////////////////////////////////////////// DEFINES
+
+///////////////////////////////////////////////////// MACROS
+
+#define Gen_GetPtr(hwnd) (PGEN)GetWindowLong(hwnd, DWL_USER)
+#define Gen_SetPtr(hwnd, lp) (PGEN)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+///////////////////////////////////////////////////// MODULE DATA
+
+#pragma data_seg(DATASEG_READONLY)
+
+// This is the structure that is used to fill the
+// max speed listbox
+struct _Bauds
+ {
+ DWORD dwDTERate;
+ int ids;
+ } const c_rgbauds[] = {
+ // These numbers must increase monotonically
+ { 110L, IDS_BAUD_110 },
+ { 300L, IDS_BAUD_300 },
+ { 1200L, IDS_BAUD_1200 },
+ { 2400L, IDS_BAUD_2400 },
+ { 4800L, IDS_BAUD_4800 },
+ { 9600L, IDS_BAUD_9600 },
+ { 19200, IDS_BAUD_19200 },
+ { 38400, IDS_BAUD_38400 },
+ { 57600, IDS_BAUD_57600 },
+ { 115200, IDS_BAUD_115200 },
+ { 230400, IDS_BAUD_230400 },
+ { 460800, IDS_BAUD_460800 },
+ { 921600, IDS_BAUD_921600 },
+ };
+
+// Map driver type values to icon resource IDs
+struct
+ {
+ BYTE nDeviceType; // DT_ value
+ UINT idi; // icon resource ID
+ UINT ids; // string resource ID
+ } const c_rgmapdt[] = {
+ { DT_NULL_MODEM, IDI_NULL_MODEM, IDS_NULL_MODEM },
+ { DT_EXTERNAL_MODEM, IDI_EXTERNAL_MODEM, IDS_EXTERNAL_MODEM },
+ { DT_INTERNAL_MODEM, IDI_INTERNAL_MODEM, IDS_INTERNAL_MODEM },
+ { DT_PCMCIA_MODEM, IDI_PCMCIA_MODEM, IDS_PCMCIA_MODEM },
+ { DT_PARALLEL_PORT, IDI_NULL_MODEM, IDS_PARALLEL_PORT },
+ { DT_PARALLEL_MODEM, IDI_EXTERNAL_MODEM, IDS_PARALLEL_MODEM } };
+
+#pragma data_seg()
+
+
+/*----------------------------------------------------------
+Purpose: Returns the appropriate icon ID given the device
+ type.
+
+Returns: icon resource ID in pidi
+ string resource ID in pids
+Cond: --
+*/
+void PRIVATE GetTypeIDs(
+ BYTE nDeviceType,
+ LPUINT pidi,
+ LPUINT pids)
+ {
+ int i;
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgmapdt); i++)
+ {
+ if (nDeviceType == c_rgmapdt[i].nDeviceType)
+ {
+ *pidi = c_rgmapdt[i].idi;
+ *pids = c_rgmapdt[i].ids;
+ return;
+ }
+ }
+ ASSERT(0); // We should never get here
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Returns FALSE if the given port is not compatible with
+ the device type.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PRIVATE
+IsCompatiblePort(
+ IN DWORD nSubclass,
+ IN BYTE nDeviceType)
+ {
+ BOOL bRet = TRUE;
+
+ // Is the port subclass appropriate for this modem type?
+ // (Don't list lpt ports when it is a serial modem.)
+ switch (nSubclass)
+ {
+ case PORT_SUBCLASS_SERIAL:
+ if (DT_PARALLEL_PORT == nDeviceType ||
+ DT_PARALLEL_MODEM == nDeviceType)
+ {
+ bRet = FALSE;
+ }
+ break;
+
+ case PORT_SUBCLASS_PARALLEL:
+ if (DT_PARALLEL_PORT != nDeviceType &&
+ DT_PARALLEL_MODEM != nDeviceType)
+ {
+ bRet = FALSE;
+ }
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fill the port box with the available ports
+
+Returns: TRUE to continue enumeration
+Cond: --
+*/
+BOOL WINAPI Gen_AddToPortBox(
+ HPORTDATA hportdata,
+ LPARAM lParam)
+ {
+ BOOL bRet;
+ PORTDATA pd;
+
+ pd.cbSize = sizeof(pd);
+ bRet = PortData_GetProperties(hportdata, &pd);
+ if (bRet)
+ {
+ PGEN this = (PGEN)lParam;
+
+ if (IsCompatiblePort(pd.nSubclass, this->pmi->nDeviceType))
+ {
+ // Add the port to the list
+ HWND hwndCB = this->hwndPort;
+ int index = ComboBox_AddString(hwndCB, pd.szFriendly);
+
+ if (IsSzEqual(pd.szPort, this->pmi->szPortName))
+ ComboBox_SetCurSel(hwndCB, index);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Return the tic corresponding to bit flag value
+Returns: tic index
+Cond: --
+*/
+int PRIVATE MapVolumeToTic(
+ PGEN this)
+ {
+ DWORD dwVolume = this->pmi->ms.dwSpeakerVolume;
+ DWORD dwMode = this->pmi->ms.dwSpeakerMode;
+ int i;
+
+ ASSERT(ARRAY_ELEMENTS(this->tics) > this->ticVolumeMax);
+ for (i = 0; i <= this->ticVolumeMax; i++)
+ {
+ if (this->tics[i].dwVolume == dwVolume &&
+ this->tics[i].dwMode == dwMode)
+ {
+ return i;
+ }
+ }
+
+ return 0;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the volume control
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_SetVolume(
+ PGEN this)
+ {
+ HWND hwndVol = GetDlgItem(this->hdlg, IDC_VOLUME);
+ DWORD dwMode = this->pmi->devcaps.dwSpeakerMode;
+ DWORD dwVolume = this->pmi->devcaps.dwSpeakerVolume;
+ TCHAR sz[MAXSHORTLEN];
+ int i;
+ int iTicCount;
+ static struct {
+ DWORD dwVolBit;
+ DWORD dwVolSetting;
+ } rgvolumes[] = {
+ { MDMVOLFLAG_LOW, MDMVOL_LOW},
+ { MDMVOLFLAG_MEDIUM, MDMVOL_MEDIUM},
+ { MDMVOLFLAG_HIGH, MDMVOL_HIGH} };
+
+ // Does the modem support volume control?
+ if (0 == dwVolume && IsFlagSet(dwMode, MDMSPKRFLAG_OFF) &&
+ (IsFlagSet(dwMode, MDMSPKRFLAG_ON) || IsFlagSet(dwMode, MDMSPKRFLAG_DIAL)))
+ {
+ // Set up the volume tic table.
+ iTicCount = 2;
+ this->tics[0].dwVolume = 0; // doesn't matter because Volume isn't supported
+ this->tics[0].dwMode = MDMSPKR_OFF;
+ this->tics[1].dwVolume = 0; // doesn't matter because Volume isn't supported
+ this->tics[1].dwMode = IsFlagSet(dwMode, MDMSPKRFLAG_DIAL) ? MDMSPKR_DIAL : MDMSPKR_ON;
+
+ // No Loud. So change it to On.
+ Static_SetText(GetDlgItem(this->hdlg, IDC_LOUD), SzFromIDS(g_hinst, IDS_ON, sz, SIZECHARS(sz)));
+ }
+ else
+ {
+ DWORD dwOnMode = IsFlagSet(dwMode, MDMSPKRFLAG_DIAL)
+ ? MDMSPKR_DIAL
+ : IsFlagSet(dwMode, MDMSPKRFLAG_ON)
+ ? MDMSPKR_ON
+ : 0;
+
+ // Init tic count
+ iTicCount = 0;
+
+ // MDMSPKR_OFF?
+ if (IsFlagSet(dwMode, MDMSPKRFLAG_OFF))
+ {
+ for (i = 0; i < ARRAY_ELEMENTS(rgvolumes); i++)
+ {
+ if (IsFlagSet(dwVolume, rgvolumes[i].dwVolBit))
+ {
+ this->tics[iTicCount].dwVolume = rgvolumes[i].dwVolSetting;
+ break;
+ }
+ }
+ this->tics[iTicCount].dwMode = MDMSPKR_OFF;
+ iTicCount++;
+ }
+ else
+ {
+ // No Off. So change it to Soft.
+ Static_SetText(GetDlgItem(this->hdlg, IDC_LBL_OFF), SzFromIDS(g_hinst, IDS_SOFT, sz, SIZECHARS(sz)));
+ }
+
+ // MDMVOL_xxx?
+ for (i = 0; i < ARRAY_ELEMENTS(rgvolumes); i++)
+ {
+ if (IsFlagSet(dwVolume, rgvolumes[i].dwVolBit))
+ {
+ this->tics[iTicCount].dwVolume = rgvolumes[i].dwVolSetting;
+ this->tics[iTicCount].dwMode = dwOnMode;
+ iTicCount++;
+ }
+ }
+ }
+
+ // Set up the control.
+ if (iTicCount > 0)
+ {
+ this->ticVolumeMax = iTicCount - 1;
+
+ // Set the range
+ SendMessage(hwndVol, TBM_SETRANGE, TRUE, MAKELPARAM(0, this->ticVolumeMax));
+
+ // Set the volume to the current setting
+ this->ticVolume = MapVolumeToTic(this);
+ SendMessage(hwndVol, TBM_SETPOS, TRUE, MAKELPARAM(this->ticVolume, 0));
+ }
+ else
+ {
+ // No; disable the control
+ EnableWindow(GetDlgItem(this->hdlg, IDC_SPEAKER), FALSE);
+ EnableWindow(hwndVol, FALSE);
+ EnableWindow(GetDlgItem(this->hdlg, IDC_LBL_OFF), FALSE);
+ EnableWindow(GetDlgItem(this->hdlg, IDC_LOUD), FALSE);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the speed controls
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_SetSpeed(
+ PGEN this)
+ {
+ HWND hwndCB = GetDlgItem(this->hdlg, IDC_CB_SPEED);
+ HWND hwndCH = GetDlgItem(this->hdlg, IDC_STRICTSPEED);
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+ DWORD dwDTEMax = this->pmi->devcaps.dwMaxDTERate;
+ int i;
+ int n;
+ int iMatch = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ SetWindowRedraw(hwndCB, FALSE);
+ ComboBox_ResetContent(hwndCB);
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgbauds); i++)
+ {
+ // Only fill up to the max DTE speed of the modem
+ if (c_rgbauds[i].dwDTERate <= dwDTEMax)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, c_rgbauds[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, c_rgbauds[i].dwDTERate);
+
+ // Keep our eyes peeled for important values
+ if (pdcb->BaudRate == c_rgbauds[i].dwDTERate)
+ {
+ iMatch = n;
+ }
+ }
+ else
+ break;
+ }
+
+ // Is the DCB baudrate >= the maximum possible DTE rate?
+ if (pdcb->BaudRate >= dwDTEMax || -1 == iMatch)
+ {
+ // Yes; choose the highest possible (last) entry
+ this->iSelOriginal = ComboBox_GetCount(hwndCB) - 1;
+ }
+ else
+ {
+ // No; choose the matched value
+ ASSERT(-1 != iMatch);
+ this->iSelOriginal = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, this->iSelOriginal);
+ SetWindowRedraw(hwndCB, TRUE);
+
+ // Can this modem adjust speed?
+ if (IsFlagClear(this->pmi->devcaps.dwModemOptions, MDM_SPEED_ADJUST))
+ {
+ // No; disable the checkbox and check it
+ Button_Enable(hwndCH, FALSE);
+ Button_SetCheck(hwndCH, FALSE);
+ }
+ else
+ {
+ // Yes; enable the checkbox
+ Button_Enable(hwndCH, TRUE);
+ Button_SetCheck(hwndCH, IsFlagClear(this->pmi->ms.dwPreferredModemOptions, MDM_SPEED_ADJUST));
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE Gen_OnInitDialog(
+ PGEN this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hdlg = this->hdlg;
+ HWND hwndIcon;
+ UINT idi;
+ UINT ids;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pmi = (LPMODEMINFO)lppsp->lParam;
+
+ if (!PortMap_Create(&this->hportmap))
+ {
+ // Failure
+ EndDialog(hdlg, -1);
+ }
+
+#ifdef WIN95
+ // disable the static text control added for NT
+ ShowWindow(GetDlgItem(hdlg, IDC_ST_PORT), SW_HIDE);
+
+ // Does this modem have a fixed port?
+ if (IsFlagSet(this->pmi->uFlags, MIF_PORT_IS_FIXED))
+ {
+ // Yes; the port name cannot be changed, so display it in a
+ // read-only edit control.
+ // Don't try to find the friendly name, because no friendly
+ // name exists for a devnode with a fixed port.
+ this->hwndPort = GetDlgItem(hdlg, IDC_ED_PORT);
+ Edit_SetText(this->hwndPort, this->pmi->szPortName);
+ }
+ else
+ {
+ // No; enumerate the ports and list them in a dropdown
+ this->hwndPort = GetDlgItem(hdlg, IDC_CB_PORT);
+
+ // Fill the Port combobox
+ EnumeratePorts(Gen_AddToPortBox, (LPARAM)this);
+ }
+
+ // For whatever control we selected for the port, enable it and show it
+ Edit_Enable(this->hwndPort, TRUE);
+ ShowWindow(this->hwndPort, SW_SHOW);
+#else
+// Don't allow port to be changed in NT 4.0 - not fully implemented
+ this->hwndPort = GetDlgItem(hdlg, IDC_ST_PORT);
+ Edit_SetText(this->hwndPort, this->pmi->szPortName);
+#endif
+
+ // Set the icon
+ hwndIcon = GetDlgItem(hdlg, IDC_GE_ICON);
+ GetTypeIDs(this->pmi->nDeviceType, &idi, &ids);
+ Static_SetIcon(hwndIcon, LoadIcon(g_hinst, MAKEINTRESOURCE(idi)));
+
+ // Set the friendly name
+ Edit_SetText(GetDlgItem(hdlg, IDC_ED_FRIENDLYNAME), this->pmi->szFriendlyName);
+
+ Gen_SetVolume(this);
+ // Speed is set in Gen_OnSetActive
+
+ // Is this a parallel port?
+ if (DT_PARALLEL_PORT == this->pmi->nDeviceType)
+ {
+ // Yes; hide the speed controls
+ ShowWindow(GetDlgItem(hdlg, IDC_SPEED), SW_HIDE);
+ EnableWindow(GetDlgItem(hdlg, IDC_SPEED), FALSE);
+
+ ShowWindow(GetDlgItem(hdlg, IDC_CB_SPEED), SW_HIDE);
+ EnableWindow(GetDlgItem(hdlg, IDC_CB_SPEED), FALSE);
+
+ ShowWindow(GetDlgItem(hdlg, IDC_STRICTSPEED), SW_HIDE);
+ EnableWindow(GetDlgItem(hdlg, IDC_STRICTSPEED), FALSE);
+ }
+
+ return TRUE; // default initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_HSCROLL handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_OnHScroll(
+ PGEN this,
+ HWND hwndCtl,
+ UINT code,
+ int pos)
+ {
+ // Handle for the volume control
+ if (hwndCtl == GetDlgItem(this->hdlg, IDC_VOLUME))
+ {
+ int tic = this->ticVolume;
+
+ switch (code)
+ {
+ case TB_LINEUP:
+ tic--;
+ break;
+
+ case TB_LINEDOWN:
+ tic++;
+ break;
+
+ case TB_PAGEUP:
+ tic--;
+ break;
+
+ case TB_PAGEDOWN:
+ tic++;
+ break;
+
+ case TB_THUMBPOSITION:
+ case TB_THUMBTRACK:
+ tic = pos;
+ break;
+
+ case TB_TOP:
+ tic = 0;
+ break;
+
+ case TB_BOTTOM:
+ tic = this->ticVolumeMax;
+ break;
+
+ case TB_ENDTRACK:
+ return;
+ }
+
+ // Boundary check
+ if (tic < 0)
+ tic = 0;
+ else if (tic > (this->ticVolumeMax))
+ tic = this->ticVolumeMax;
+
+ if (tic != this->ticVolume)
+ {
+ SendMessage(hwndCtl, TBM_SETPOS, TRUE, MAKELPARAM(tic, 0));
+ }
+ this->ticVolume = tic;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_OnApply(
+ PGEN this)
+ {
+ HWND hwndCB = GetDlgItem(this->hdlg, IDC_CB_SPEED);
+ LPMODEMSETTINGS pms = &this->pmi->ms;
+ int iSel;
+ DWORD baudSel;
+
+ // (The port name is saved in PSN_KILLACTIVE processing)
+
+ // Determine new volume settings
+ this->pmi->ms.dwSpeakerMode = this->tics[this->ticVolume].dwMode;
+ this->pmi->ms.dwSpeakerVolume = this->tics[this->ticVolume].dwVolume;
+
+ // Determine new speed settings
+ iSel = ComboBox_GetCurSel(hwndCB);
+ baudSel = ComboBox_GetItemData(hwndCB, iSel);
+
+ // Has the user changed the speed?
+ if (iSel != this->iSelOriginal)
+ {
+ this->pmi->dcb.BaudRate = baudSel; // yes
+ }
+
+ // Set the speed adjust
+ if (Button_GetCheck(GetDlgItem(this->hdlg, IDC_STRICTSPEED)))
+ ClearFlag(pms->dwPreferredModemOptions, MDM_SPEED_ADJUST);
+ else
+ SetFlag(pms->dwPreferredModemOptions, MDM_SPEED_ADJUST);
+
+ this->pmi->idRet = IDOK;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_KILLACTIVE handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_OnSetActive(
+ PGEN this)
+ {
+ // Set the speed listbox selection; find DCB rate in the listbox
+ // (The speed can change in the Connection page thru the Port Settings
+ // property dialog.)
+ Gen_SetSpeed(this);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_KILLACTIVE handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_OnKillActive(
+ PGEN this)
+ {
+ HWND hwndCB = GetDlgItem(this->hdlg, IDC_CB_SPEED);
+ int iSel;
+
+ // Save the settings back to the modem info struct so the Connection
+ // page can invoke the Port Settings property dialog with the
+ // correct settings.
+
+ // Is the port for this modem fixed?
+ if (IsFlagSet(this->pmi->uFlags, MIF_PORT_IS_FIXED))
+ {
+ // Yes; do nothing (the portname cannot change)
+ }
+ else
+ {
+ // No
+ int iSel = ComboBox_GetCurSel(this->hwndPort);
+ TCHAR sz[MAXFRIENDLYNAME];
+
+ ComboBox_GetLBText(this->hwndPort, iSel, sz);
+ if ( !IsSzEqual(sz, this->pmi->szPortName) )
+ {
+ if (PortMap_GetPortName(this->hportmap, sz, this->pmi->szPortName,
+ SIZECHARS(this->pmi->szPortName)))
+ {
+ SetFlag(this->pmi->uFlags, MIF_PORTNAME_CHANGED);
+ }
+ }
+ }
+
+ // Speed setting
+ iSel = ComboBox_GetCurSel(hwndCB);
+ this->pmi->dcb.BaudRate = ComboBox_GetItemData(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE Gen_OnNotify(
+ PGEN this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ Gen_OnSetActive(this);
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ Gen_OnKillActive(this);
+ break;
+
+ case PSN_APPLY:
+ Gen_OnApply(this);
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DESTROY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Gen_OnDestroy(
+ PGEN this)
+ {
+ PortMap_Free(this->hportmap);
+ }
+
+
+///////////////////////////////////////////////////// EXPORTED FUNCTIONS
+
+static BOOL s_bGenRecurse = FALSE;
+
+LRESULT INLINE Gen_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bGenRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT Gen_DlgProc(
+ PGEN this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_GE_ICON, IDH_UNI_GEN_MODEM,
+ IDC_ED_FRIENDLYNAME,IDH_UNI_GEN_MODEM,
+ IDC_LBL_PORT, IDH_UNI_GEN_PORT,
+ IDC_ST_PORT, IDH_UNI_GEN_PORT,
+ IDC_CB_PORT, IDH_UNI_GEN_PORT,
+ IDC_ED_PORT, IDH_UNI_GEN_PORT_INT,
+ IDC_SPEAKER, IDH_UNI_GEN_VOLUME,
+ IDC_LBL_OFF, IDH_UNI_GEN_VOLUME,
+ IDC_VOLUME, IDH_UNI_GEN_VOLUME,
+ IDC_LOUD, IDH_UNI_GEN_VOLUME,
+// IDC_SPEED, IDH_COMM_GROUPBOX,
+ IDC_SPEED, IDH_UNI_GEN_MAX_SPEED,
+ IDC_CB_SPEED, IDH_UNI_GEN_MAX_SPEED,
+ IDC_STRICTSPEED, IDH_UNI_GEN_THIS_SPEED,
+ 0, 0 };
+#pragma data_seg()
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, Gen_OnInitDialog);
+ HANDLE_MSG(this, WM_HSCROLL, Gen_OnHScroll);
+ HANDLE_MSG(this, WM_NOTIFY, Gen_OnNotify);
+ HANDLE_MSG(this, WM_DESTROY, Gen_OnDestroy);
+
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szWinHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szWinHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ default:
+ return Gen_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK Gen_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PGEN this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bGenRecurse)
+ {
+ s_bGenRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = Gen_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ if (message == WM_INITDIALOG)
+ {
+ this = (PGEN)LocalAlloc(LPTR, sizeof(GEN));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_GENERAL),
+ MAKEINTRESOURCE(IDS_CAP_GENERAL),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)Gen_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ Gen_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)Gen_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ Gen_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ Gen_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, Gen_DlgProc(this, message, wParam, lParam));
+ }
diff --git a/private/unimodem/modemui/makefile b/private/unimodem/modemui/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/modemui/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/modemui/modemui.c b/private/unimodem/modemui/modemui.c
new file mode 100644
index 000000000..d59e65f13
--- /dev/null
+++ b/private/unimodem/modemui/modemui.c
@@ -0,0 +1,1824 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: modemui.c
+//
+// This files contains the DLL entry-points.
+//
+// Much of this file contains the code that builds the default property dialog
+// for modem devices.
+//
+// This code was originally lifted from SETUP4.DLL, which performs essentially
+// the same thing, except for any device. We don't want to have to link to
+// SETUP4.DLL, so we contain a copy of this code.
+//
+//
+// History:
+// 1-12-94 ScottH Created
+// 9-20-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h" // common headers
+
+#define INITGUID
+#include <initguid.h>
+#include <devguid.h>
+
+#pragma data_seg(DATASEG_READONLY)
+
+LPGUID c_pguidModem = (LPGUID)&GUID_DEVCLASS_MODEM;
+
+#pragma data_seg()
+
+
+
+//-----------------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------------
+
+// The Unimodem provider fills in the COMMCONFIG structure as
+// follows:
+//
+// +-----------------------+
+// | |
+// | COMMCONFIG data |
+// | |
+// | Provider offset |--+
+// | Provider size | |
+// | = ms.size | |
+// | | |
+// +-----------------------+ |
+// | |<-+
+// | MODEMSETTINGS |
+// | |
+// | Size |
+// | = MODEMSETTINGS + |
+// | dev.size |
+// | |
+// | DevSpecific offset |--+
+// | DevSpecific size | |
+// | = DEVSPECIFIC | |
+// +-----------------------+ |
+// | |<-+
+// | DEVSPECIFIC |
+// | (optional) |
+// | |
+// +-----------------------+
+//
+
+
+#define CB_COMMCONFIG_HEADER FIELDOFFSET(COMMCONFIG, wcProviderData)
+#define CB_PRIVATESIZE (CB_COMMCONFIG_HEADER)
+#define CB_PROVIDERSIZE (sizeof(MODEMSETTINGS))
+#define CB_COMMCONFIGSIZE (CB_PRIVATESIZE+CB_PROVIDERSIZE)
+
+#define CB_MODEMSETTINGS_HEADER FIELDOFFSET(MODEMSETTINGS, dwCallSetupFailTimer)
+#define CB_MODEMSETTINGS_TAIL (sizeof(MODEMSETTINGS) - FIELDOFFSET(MODEMSETTINGS, dwNegotiatedModemOptions))
+#define CB_MODEMSETTINGS_OVERHEAD (CB_MODEMSETTINGS_HEADER + CB_MODEMSETTINGS_TAIL)
+
+#define PmsFromPcc(pcc) ((LPMODEMSETTINGS)(pcc)->wcProviderData)
+
+
+#define MAX_PROP_PAGES 16 // Define a reasonable limit
+
+#define MIN_CALL_SETUP_FAIL_TIMER 1
+#define MIN_INACTIVITY_TIMEOUT 0
+#define DEFAULT_INACTIVITY_SCALE 10 // == decasecond units
+
+
+#ifdef DEBUG
+
+//-----------------------------------------------------------------------------------
+// Debug routines
+//-----------------------------------------------------------------------------------
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+void PRIVATE DumpModemSettings(
+ LPMODEMSETTINGS pms)
+ {
+ ASSERT(pms);
+
+ if (IsFlagSet(g_dwDumpFlags, DF_MODEMSETTINGS))
+ {
+ int i;
+ LPDWORD pdw = (LPDWORD)pms;
+
+ TRACE_MSG(TF_ALWAYS, "MODEMSETTINGS %08lx %08lx %08lx %08lx", pdw[0], pdw[1],
+ pdw[2], pdw[3]);
+ pdw += 4;
+ for (i = 0; i < sizeof(MODEMSETTINGS)/sizeof(DWORD); i += 4, pdw += 4)
+ {
+ TRACE_MSG(TF_ALWAYS, " %08lx %08lx %08lx %08lx", pdw[0], pdw[1],
+ pdw[2], pdw[3]);
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+void PRIVATE DumpDCB(
+ LPWIN32DCB pdcb)
+ {
+ ASSERT(pdcb);
+
+ if (IsFlagSet(g_dwDumpFlags, DF_DCB))
+ {
+ int i;
+ LPDWORD pdw = (LPDWORD)pdcb;
+
+ TRACE_MSG(TF_ALWAYS, "DCB %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ pdw += 4;
+ for (i = 0; i < sizeof(WIN32DCB)/sizeof(DWORD); i += 4, pdw += 4)
+ {
+ TRACE_MSG(TF_ALWAYS, " %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose:
+Returns:
+Cond: --
+*/
+void PRIVATE DumpDevCaps(
+ LPREGDEVCAPS pdevcaps)
+ {
+ ASSERT(pdevcaps);
+
+ if (IsFlagSet(g_dwDumpFlags, DF_DEVCAPS))
+ {
+ int i;
+ LPDWORD pdw = (LPDWORD)pdevcaps;
+
+ TRACE_MSG(TF_ALWAYS, "PROPERTIES %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ pdw += 4;
+ for (i = 0; i < sizeof(REGDEVCAPS)/sizeof(DWORD); i += 4, pdw += 4)
+ {
+ TRACE_MSG(TF_ALWAYS, " %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ }
+ }
+ }
+
+#endif //DEBUG
+
+
+//-----------------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Returns value of the InactivityScale value in the registry.
+
+Returns: see above
+Cond: --
+*/
+DWORD PRIVATE GetInactivityTimeoutScale(
+ HKEY hkey)
+ {
+ DWORD dwInactivityScale;
+ DWORD dwType;
+ DWORD cbData;
+
+ cbData = sizeof(DWORD);
+ if (ERROR_SUCCESS != RegQueryValueEx(hkey, c_szInactivityScale, NULL, &dwType,
+ (LPBYTE)&dwInactivityScale, &cbData) ||
+ REG_BINARY != dwType ||
+ sizeof(DWORD) != cbData ||
+ 0 == dwInactivityScale)
+ {
+ dwInactivityScale = DEFAULT_INACTIVITY_SCALE;
+ }
+ return dwInactivityScale;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets a WIN32DCB from the registry.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE RegQueryDCB(
+ HKEY hkey,
+ WIN32DCB FAR * pdcb)
+ {
+ DWORD dwRet = ERROR_BADKEY;
+ DWORD cbData;
+
+ ASSERT(pdcb);
+
+ // Does the DCB key exist in the driver key?
+ if (ERROR_SUCCESS == RegQueryValueEx(hkey, c_szDCB, NULL, NULL, NULL, &cbData))
+ {
+ // Yes; is the size in the registry okay?
+ if (sizeof(*pdcb) < cbData)
+ {
+ // No; the registry has bogus data
+ dwRet = ERROR_BADDB;
+ }
+ else
+ {
+ // Yes; get the DCB from the registry
+ if (ERROR_SUCCESS == RegQueryValueEx(hkey, c_szDCB, NULL, NULL, (LPBYTE)pdcb, &cbData))
+ {
+ if (sizeof(*pdcb) == pdcb->DCBlength)
+ {
+ dwRet = NO_ERROR;
+ }
+ else
+ {
+ dwRet = ERROR_BADDB;
+ }
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+ }
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets a MODEMSETTINGS struct from the registry. Also
+ sets *pdwSize bigger if the data in the registry includes
+ extra data.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE RegQueryModemSettings(
+ HKEY hkey,
+ LPMODEMSETTINGS pms,
+ LPDWORD pdwSize) // Size of modem settings struct
+ {
+ DWORD dwRet;
+ DWORD cbData;
+ DWORD cbRequiredSize;
+
+ ASSERT(pms);
+ ASSERT(pdwSize);
+
+ // Is the MODEMSETTINGS ("Default") value in the driver key?
+ dwRet = RegQueryValueEx(hkey, c_szDefault, NULL, NULL, NULL, &cbData);
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // Yes
+
+ // (Remember the Default value is a subset of the MODEMSETTINGS
+ // structure. We also want to support variable sized structures.
+ // The minimum must be sizeof(MODEMSETTINGS).)
+ cbRequiredSize = cbData + CB_MODEMSETTINGS_OVERHEAD;
+
+ // Is the size in the registry okay?
+ if (*pdwSize < cbRequiredSize)
+ {
+ // No
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ *pdwSize = cbRequiredSize;
+ }
+ else
+ {
+ // Yes; get the MODEMSETTINGS from the registry
+ // Set the fields whose values are *not* in the registry
+ pms->dwActualSize = cbRequiredSize;
+ pms->dwRequiredSize = cbRequiredSize;
+ pms->dwDevSpecificOffset = 0;
+ pms->dwDevSpecificSize = 0;
+
+ dwRet = RegQueryValueEx(hkey, c_szDefault, NULL, NULL,
+ (LPBYTE)&pms->dwCallSetupFailTimer, &cbData);
+ pms->dwInactivityTimeout *= GetInactivityTimeoutScale(hkey);
+
+ *pdwSize = cbData + CB_MODEMSETTINGS_OVERHEAD;
+ }
+ }
+ return dwRet;
+ }
+
+
+#ifdef VOICE
+
+/*----------------------------------------------------------
+Purpose: Get the voice settings from the registry. This sort
+ of info is not stored in the MODEMSETTINGS struct.
+
+ If this modem supports voice features, *puFlags is
+ updated to reflect those settings. Otherwise, *puFlags
+ is left alone.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE RegQueryVoiceSettings(
+ HKEY hkeyDrv,
+ LPUINT puFlags, // Out: MIF_* values
+ PVOICEFEATURES pvs)
+ {
+ #ifndef VOICEPROF_CLASS8ENABLED
+ #define VOICEPROF_CLASS8ENABLED 0x00000001L
+ #define VOICEPROF_NO_DIST_RING 0x00001000L
+ #define VOICEPROF_NO_CHEAP_RING 0x00002000L
+ #endif
+
+ DWORD dwRet;
+ DWORD cbData;
+ DWORD dwRegType;
+ DWORD dwVoiceProfile;
+ VOICEFEATURES vsT;
+
+ ASSERT(pvs);
+ ASSERT(puFlags);
+
+
+ // Init to default values
+ ZeroInit(pvs);
+ pvs->cbSize = sizeof(*pvs);
+ // (Everything else is left as 0)
+
+
+ ClearFlag(*puFlags, MIF_CALL_FWD_SUPPORT | MIF_DIST_RING_SUPPORT | MIF_CHEAP_RING_SUPPORT);
+
+ // Does this modem support voice features?
+ cbData = sizeof(dwVoiceProfile);
+ dwRet = RegQueryValueEx(hkeyDrv, c_szVoiceProfile, NULL, &dwRegType, (LPBYTE)&dwVoiceProfile, &cbData);
+
+ if (ERROR_SUCCESS == dwRet && REG_BINARY == dwRegType)
+ {
+ if (IsFlagSet(dwVoiceProfile, VOICEPROF_CLASS8ENABLED))
+ {
+ SetFlag(*puFlags, MIF_CALL_FWD_SUPPORT);
+ }
+
+ if (IsFlagClear(dwVoiceProfile, VOICEPROF_NO_DIST_RING))
+ {
+ SetFlag(*puFlags, MIF_DIST_RING_SUPPORT);
+
+ if (IsFlagClear(dwVoiceProfile, VOICEPROF_NO_CHEAP_RING))
+ {
+ // Yes, we're cheap
+ SetFlag(*puFlags, MIF_CHEAP_RING_SUPPORT);
+ }
+ }
+
+
+ // Are the voice settings here?
+ cbData = sizeof(vsT);
+ dwRet = RegQueryValueEx(hkeyDrv, c_szVoice, NULL, &dwRegType, (LPBYTE)&vsT, &cbData);
+ if (ERROR_SUCCESS == dwRet && REG_BINARY == dwRegType &&
+ sizeof(vsT) == vsT.cbSize && sizeof(vsT) == cbData)
+ {
+ // Yes
+ *pvs = vsT;
+ }
+ }
+
+ return ERROR_SUCCESS;
+ }
+
+#endif // VOICE
+
+
+/*----------------------------------------------------------
+Purpose: Get global modem info from the registry. This sort
+ of info is not stored in the MODEMSETTINGS struct.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE RegQueryGlobalModemInfo(
+ LPFINDDEV pfd,
+ LPGLOBALINFO pglobal)
+ {
+ DWORD dwRet;
+ DWORD cbData;
+ BYTE bCheck;
+ TCHAR szPath[MAX_PATH];
+
+#pragma data_seg(DATASEG_READONLY)
+ TCHAR const c_szPortConfigDialog[] = TEXT("PortConfigDialog");
+#pragma data_seg()
+
+ ASSERT(pfd);
+ ASSERT(pglobal);
+
+ pglobal->cbSize = sizeof(*pglobal);
+
+ // Get the port name. There are two places the port name can be:
+ //
+ // 1) DriverKey\AttachedTo
+ // This is for internal, external or null modems. This
+ // port can be changed via the property sheet.
+ //
+ // 2) DriverKey\PortName
+ // This is for PCMCIA modems. This CANNOT be changed via
+ // the property sheet. Only VCOMM sets this.
+ //
+ // BUGBUG (scotth): In Win95, this value is under the
+ // DeviceKey. We should lobby this to be changed to
+ // the DriverKey.
+
+ // Does this modem have a PortName value?
+ cbData = sizeof(pglobal->szPortName);
+ dwRet = RegQueryValueEx(pfd->hkeyDrv, c_szPortName, NULL, NULL,
+ (LPBYTE)pglobal->szPortName, &cbData);
+
+ if (ERROR_SUCCESS != dwRet)
+ {
+ // No; get the AttachedTo value
+ cbData = sizeof(pglobal->szPortName);
+ dwRet = RegQueryValueEx(pfd->hkeyDrv, c_szAttachedTo, NULL, NULL,
+ (LPBYTE)pglobal->szPortName, &cbData);
+ }
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ DWORD dwBusType;
+
+ if ( !CplDiGetBusType(pfd->hdi, &pfd->devData, &dwBusType) )
+ {
+ dwRet = GetLastError();
+ }
+ else
+ {
+ // Is the device Root-enumerated?
+ if (BUS_TYPE_ROOT == dwBusType)
+ {
+ // Yes; the port can be changed by the user
+ ClearFlag(pglobal->uFlags, MIF_PORT_IS_FIXED);
+ }
+ else
+ {
+ // No; the port cannot be changed
+ SetFlag(pglobal->uFlags, MIF_PORT_IS_FIXED);
+ }
+
+ // Get the logging value
+ cbData = sizeof(bCheck);
+ if (ERROR_SUCCESS != RegQueryValueEx(pfd->hkeyDrv, c_szLogging, NULL,
+ NULL, (LPBYTE)&bCheck, &cbData))
+ {
+ // Default to OFF.
+ ClearFlag(pglobal->uFlags, MIF_ENABLE_LOGGING);
+ }
+ else
+ {
+ if (bCheck)
+ SetFlag(pglobal->uFlags, MIF_ENABLE_LOGGING);
+ else
+ ClearFlag(pglobal->uFlags, MIF_ENABLE_LOGGING);
+ }
+
+ // Get the user init string
+ cbData = sizeof(pglobal->szUserInit);
+ if (ERROR_SUCCESS != RegQueryValueEx(pfd->hkeyDrv, c_szUserInit, NULL,
+ NULL, (LPBYTE)pglobal->szUserInit, &cbData))
+ {
+ // Or default to null string
+ *pglobal->szUserInit = '\0';
+ }
+
+#ifdef WIN95
+
+ // Does this modem use a custom port?
+ cbData = sizeof(szPath);
+ if (IsFlagSet(pglobal->uFlags, MIF_PORT_IS_FIXED))
+ {
+ // (look in same devnode as modem for PortConfigDialog)
+ if (ERROR_SUCCESS == RegQueryValueEx(pfd->hkeyDrv, c_szPortConfigDialog,
+ NULL, NULL, szPath, &cbData) &&
+ !IsSzEqual(c_szSerialUI, szPath))
+ {
+ // Yes
+ SetFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+
+ TRACE_MSG(TF_GENERAL, "Modem is connected to a custom port");
+ }
+ else
+ {
+ // No special config DLL for this port.
+ ClearFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+ }
+ }
+ else
+ {
+ // (look in port's devnode for ConfigDialog)
+ LPFINDDEV pfdPort;
+ LPCTSTR pszPortName = pglobal->szPortName;
+
+ if (FindDev_Create(&pfdPort, c_pguidPort, c_szFriendlyName, pszPortName) ||
+ FindDev_Create(&pfdPort, c_pguidPort, c_szPortName, pszPortName))
+ {
+ if (ERROR_SUCCESS == RegQueryValueEx(pfdPort->hkeyDrv,
+ c_szConfigDialog, NULL, NULL, szPath, &cbData) &&
+ !IsSzEqual(c_szSerialUI, szPath))
+ {
+ // Yes
+ SetFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+
+ TRACE_MSG(TF_GENERAL, "Modem is connected to a custom port");
+ }
+ else
+ {
+ // No special config DLL for this port.
+ ClearFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+ }
+ FindDev_Destroy(pfdPort);
+ }
+ else
+ {
+ // Should not get here
+ ASSERT(0);
+ ClearFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+ }
+ }
+
+#else // WIN95
+
+ // For NT, there is not custom port support
+ ClearFlag(pglobal->uFlags, MIF_PORT_IS_CUSTOM);
+
+#endif // WIN95
+
+ // Get the device type
+ cbData = sizeof(pglobal->nDeviceType);
+ dwRet = RegQueryValueEx(pfd->hkeyDrv, c_szDeviceType, NULL, NULL,
+ (LPBYTE)&pglobal->nDeviceType, &cbData);
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // Get the properties (a portion of the MODEMDEVCAPS structure)
+ cbData = sizeof(pglobal->devcaps);
+ dwRet = RegQueryValueEx(pfd->hkeyDrv, c_szDeviceCaps, NULL, NULL,
+ (LPBYTE)&pglobal->devcaps, &cbData);
+ pglobal->devcaps.dwInactivityTimeout *= GetInactivityTimeoutScale(pfd->hkeyDrv);
+ }
+
+#ifdef VOICE
+ // Get the Voice data
+ dwRet = RegQueryVoiceSettings(pfd->hkeyDrv, &pglobal->uFlags, &pglobal->vs);
+#endif
+ }
+ }
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the modem info for a modem device.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE InitializeModemInfo(
+ LPMODEMINFO pmi,
+ LPFINDDEV pfd,
+ LPCTSTR pszFriendlyName,
+ LPCOMMCONFIG pcc,
+ LPGLOBALINFO pglobal)
+ {
+ LPMODEMSETTINGS pms;
+
+ ASSERT(pmi);
+ ASSERT(pfd);
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(pglobal);
+
+ // Read-only fields
+ pmi->pcc = pcc;
+ pmi->pglobal = pglobal;
+ pmi->pfd = pfd;
+
+ // Copy data to the working buffer
+ pms = PmsFromPcc(pcc);
+
+ BltByte(&pmi->dcb, &pcc->dcb, sizeof(WIN32DCB));
+ BltByte(&pmi->ms, pms, sizeof(MODEMSETTINGS));
+
+ lstrcpyn(pmi->szFriendlyName, pszFriendlyName, SIZECHARS(pmi->szFriendlyName));
+
+ pmi->nDeviceType = pglobal->nDeviceType;
+ pmi->uFlags = pglobal->uFlags;
+ pmi->devcaps = pglobal->devcaps;
+
+ lstrcpy(pmi->szPortName, pglobal->szPortName);
+ lstrcpy(pmi->szUserInit, pglobal->szUserInit);
+
+ DEBUG_CODE( DumpModemSettings(pms); )
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+ DEBUG_CODE( DumpDevCaps(&pmi->devcaps); )
+
+ return ERROR_SUCCESS;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set global modem info in the registry. This sort
+ of info is not stored in the MODEMSETTINGS struct.
+
+Returns: One of ERROR_
+Cond: --
+*/
+DWORD PRIVATE RegSetGlobalModemInfo(
+ HKEY hkeyDrv,
+ LPGLOBALINFO pglobal,
+ LPMODEMINFO pmi)
+ {
+ DWORD dwRet;
+
+ ASSERT(sizeof(*pglobal) == pglobal->cbSize);
+
+ TRACE_MSG(TF_GENERAL, "Writing global modem info to registry");
+
+ if (sizeof(*pglobal) == pglobal->cbSize)
+ {
+ if (IsFlagSet(pglobal->uFlags, MIF_PORTNAME_CHANGED))
+ {
+ // Only write the port name if it is stored in the AttachedTo
+ // field.
+ if (IsFlagClear(pglobal->uFlags, MIF_PORT_IS_FIXED))
+ {
+ // Save the port name
+ RegSetValueEx(hkeyDrv, c_szAttachedTo, 0, REG_SZ,
+ (LPBYTE)pglobal->szPortName,
+ CbFromCch(lstrlen(pglobal->szPortName)+1));
+ }
+ }
+
+ if (IsFlagSet(pglobal->uFlags, MIF_USERINIT_CHANGED))
+ {
+ // Change the user init string
+ RegSetValueEx(hkeyDrv, c_szUserInit, 0, REG_SZ,
+ (LPBYTE)pglobal->szUserInit,
+ CbFromCch(lstrlen(pglobal->szUserInit)+1));
+ }
+
+ if (IsFlagSet(pglobal->uFlags, MIF_LOGGING_CHANGED))
+ {
+ TCHAR szPath[MAX_PATH];
+ TCHAR szFile[MAXMEDLEN];
+ BOOL bCheck = IsFlagSet(pglobal->uFlags, MIF_ENABLE_LOGGING);
+
+ // Change the logging value
+ RegSetValueEx(hkeyDrv, c_szLogging, 0, REG_BINARY,
+ (LPBYTE)&bCheck, sizeof(BYTE));
+
+ // Set the path of the modem log
+ GetWindowsDirectory(szPath, SIZECHARS(szPath));
+ lstrcat(szPath, TEXT("\\ModemLog_"));
+ lstrcat(szPath,pmi->szFriendlyName);
+ lstrcat(szPath,TEXT(".txt"));
+// lstrcat(szPath, SzFromIDS(g_hinst, IDS_LOGFILE, szFile, SIZECHARS(szFile)));
+ RegSetValueEx(hkeyDrv, c_szLoggingPath, 0, REG_SZ,
+ (LPBYTE)szPath, CbFromCch(lstrlen(szPath)+1));
+ }
+
+#ifdef VOICE
+ RegSetValueEx(hkeyDrv, c_szVoice, 0, REG_BINARY,
+ (LPBYTE)&pglobal->vs, pglobal->vs.cbSize);
+#endif
+
+ dwRet = ERROR_SUCCESS;
+ }
+ else
+ dwRet = ERROR_INVALID_PARAMETER;
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set dev settings info in the registry, after checking
+ for legal values.
+
+Returns: One of ERROR_
+Cond: --
+*/
+DWORD PRIVATE RegSetModemSettings(
+ HKEY hkeyDrv,
+ LPMODEMSETTINGS pms)
+ {
+ DWORD dwRet;
+ DWORD cbData;
+ DWORD dwInactivityScale;
+ DWORD dwInactivityTimeoutTemp;
+ REGDEVCAPS regdevcaps;
+ REGDEVSETTINGS regdevsettings;
+
+ // Read in the Properties line from the registry.
+ cbData = sizeof(REGDEVCAPS);
+ dwRet = RegQueryValueEx(hkeyDrv, c_szDeviceCaps, NULL, NULL,
+ (LPBYTE)&regdevcaps, &cbData);
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // Read in existing regdevsettings, so that we can handle error cases below.
+ cbData = sizeof(REGDEVSETTINGS);
+ dwRet = RegQueryValueEx(hkeyDrv, c_szDefault, NULL, NULL,
+ (LPBYTE)&regdevsettings, &cbData);
+ }
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // copy new REGDEVSETTINGS while checking validity of each option (ie, is the option available?)
+ // dwCallSetupFailTimer - MIN_CALL_SETUP_FAIL_TIMER <= xxx <= ModemDevCaps->dwCallSetupFailTimer
+ if (pms->dwCallSetupFailTimer > regdevcaps.dwCallSetupFailTimer) // max
+ {
+ regdevsettings.dwCallSetupFailTimer = regdevcaps.dwCallSetupFailTimer;
+ }
+ else
+ {
+ if (pms->dwCallSetupFailTimer < MIN_CALL_SETUP_FAIL_TIMER) // min
+ {
+ regdevsettings.dwCallSetupFailTimer = MIN_CALL_SETUP_FAIL_TIMER;
+ }
+ else
+ {
+ regdevsettings.dwCallSetupFailTimer = pms->dwCallSetupFailTimer; // dest = src
+ }
+ }
+
+ // convert dwInactivityTimeout to registry scale
+ dwInactivityScale = GetInactivityTimeoutScale(hkeyDrv);
+ dwInactivityTimeoutTemp = pms->dwInactivityTimeout / dwInactivityScale +
+ (pms->dwInactivityTimeout % dwInactivityScale ? 1 : 0);
+
+ // dwInactivityTimeout - MIN_INACTIVITY_TIMEOUT <= xxx <= ModemDevCaps->dwInactivityTimeout
+ if (dwInactivityTimeoutTemp > regdevcaps.dwInactivityTimeout) // max
+ {
+ regdevsettings.dwInactivityTimeout = regdevcaps.dwInactivityTimeout;
+ }
+ else
+ {
+ if (dwInactivityTimeoutTemp < MIN_INACTIVITY_TIMEOUT) // min
+ {
+ regdevsettings.dwInactivityTimeout = MIN_INACTIVITY_TIMEOUT;
+ }
+ else
+ {
+ regdevsettings.dwInactivityTimeout = dwInactivityTimeoutTemp; // dest = src
+ }
+ }
+
+ // dwSpeakerVolume - check to see if selection is possible
+ if ((1 << pms->dwSpeakerVolume) & regdevcaps.dwSpeakerVolume)
+ {
+ regdevsettings.dwSpeakerVolume = pms->dwSpeakerVolume;
+ }
+
+ // dwSpeakerMode - check to see if selection is possible
+ if ((1 << pms->dwSpeakerMode) & regdevcaps.dwSpeakerMode)
+ {
+ regdevsettings.dwSpeakerMode = pms->dwSpeakerMode;
+ }
+
+ // dwPreferredModemOptions - mask out anything we can't set
+ regdevsettings.dwPreferredModemOptions = pms->dwPreferredModemOptions & regdevcaps.dwModemOptions;
+
+ cbData = sizeof(REGDEVSETTINGS);
+ dwRet = RegSetValueEx(hkeyDrv, c_szDefault, 0, REG_BINARY,
+ (LPBYTE)&regdevsettings, cbData);
+ }
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Frees a modeminfo struct
+
+Returns: --
+Cond: --
+*/
+void PRIVATE FreeModemInfo(
+ LPMODEMINFO pmi)
+ {
+ if (pmi)
+ {
+ if (pmi->pcc)
+ LocalFree(LOCALOF(pmi->pcc));
+
+ if (pmi->pglobal)
+ LocalFree(LOCALOF(pmi->pglobal));
+
+ if (pmi->pfd)
+ FindDev_Destroy(pmi->pfd);
+
+ LocalFree(LOCALOF(pmi));
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Release the data associated with the General page
+Returns: --
+Cond: --
+*/
+UINT CALLBACK GeneralPageCallback(
+ HWND hwnd,
+ UINT uMsg,
+ LPPROPSHEETPAGE ppsp)
+ {
+ if (PSPCB_RELEASE == uMsg)
+ {
+ LPMODEMINFO pmi = (LPMODEMINFO)ppsp->lParam;
+ LPCOMMCONFIG pcc;
+ LPMODEMSETTINGS pms;
+ LPGLOBALINFO pglobal;
+
+ ASSERT(pmi);
+
+ pcc = pmi->pcc;
+ ASSERT(pcc);
+
+ pms = PmsFromPcc(pcc);
+
+ pglobal = pmi->pglobal;
+ ASSERT(pglobal);
+
+ if (IDOK == pmi->idRet)
+ {
+ DWORD dwRet;
+
+ // Save the changes back to the commconfig struct
+ TRACE_MSG(TF_GENERAL, "Copying DCB and MODEMSETTING back to COMMCONFIG");
+
+ BltByte(pms, &pmi->ms, sizeof(MODEMSETTINGS));
+ BltByte(&pcc->dcb, &pmi->dcb, sizeof(WIN32DCB));
+
+ // Write the global info now, since it is getting nuked.
+ pglobal->uFlags = pmi->uFlags;
+ lstrcpy(pglobal->szPortName, pmi->szPortName);
+ lstrcpy(pglobal->szUserInit, pmi->szUserInit);
+
+ dwRet = RegSetGlobalModemInfo(pmi->pfd->hkeyDrv, pglobal, pmi);
+ ASSERT(ERROR_SUCCESS == dwRet);
+
+ DEBUG_CODE( DumpModemSettings(pms); )
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ // Are we releasing from the Device Mgr?
+ if (IsFlagSet(pmi->uFlags, MIF_FROM_DEVMGR))
+ {
+ // Yes; save the commconfig now as well
+ drvSetDefaultCommConfigW(pmi->szFriendlyName, pcc, pcc->dwSize);
+
+ // Free the modeminfo struct now only when called from the
+ // Device Mgr
+ FreeModemInfo(pmi);
+ }
+ }
+
+ TRACE_MSG(TF_GENERAL, "Releasing the General page");
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Add the General modems page. The pmi is the pointer
+ to the modeminfo buffer which we can edit.
+
+Returns: ERROR_ values
+
+Cond: --
+*/
+DWORD PRIVATE AddGeneralPage(
+ LPMODEMINFO pmi,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam)
+ {
+ DWORD dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ PROPSHEETPAGE psp;
+ HPROPSHEETPAGE hpage;
+ TCHAR sz[MAXMEDLEN];
+
+ ASSERT(pmi);
+ ASSERT(pfnAdd);
+
+ // Add the Port Settings property page
+ //
+ psp.dwSize = sizeof(PROPSHEETPAGE);
+ psp.dwFlags = PSP_USECALLBACK;
+ psp.hInstance = g_hinst;
+ psp.pszTemplate = MAKEINTRESOURCE(IDD_GENERAL);
+ psp.pfnDlgProc = Gen_WrapperProc;
+ psp.lParam = (LPARAM)pmi;
+ psp.pfnCallback = GeneralPageCallback;
+ psp.pcRefParent = NULL;
+
+ // Is this page added to the device mgr properties?
+ if (IsFlagSet(pmi->uFlags, MIF_FROM_DEVMGR))
+ {
+ // Yes; change name from "General"
+ psp.dwFlags |= PSP_USETITLE;
+ psp.pszTitle = SzFromIDS(g_hinst, IDS_CAP_GENERAL, sz, SIZECHARS(sz));
+ }
+
+ hpage = CreatePropertySheetPage(&psp);
+ if (hpage)
+ {
+ if (!pfnAdd(hpage, lParam))
+ DestroyPropertySheetPage(hpage);
+ else
+ dwRet = NO_ERROR;
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Add a page. The pmi is the pointer to the modeminfo
+ buffer which we can edit.
+
+Returns: ERROR_ values
+
+Cond: --
+*/
+DWORD PRIVATE AddPage(
+ LPMODEMINFO pmi,
+ LPCTSTR pszTemplate,
+ DLGPROC pfnDlgProc,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam)
+ {
+ DWORD dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ PROPSHEETPAGE psp;
+ HPROPSHEETPAGE hpage;
+
+ ASSERT(pmi);
+ ASSERT(pfnAdd);
+
+ // Add the Port Settings property page
+ //
+ psp.dwSize = sizeof(PROPSHEETPAGE);
+ psp.dwFlags = PSP_DEFAULT;
+ psp.hInstance = g_hinst;
+ psp.pszTemplate = pszTemplate;
+ psp.pfnDlgProc = pfnDlgProc;
+ psp.lParam = (LPARAM)pmi;
+
+ hpage = CreatePropertySheetPage(&psp);
+ if (hpage)
+ {
+ if (!pfnAdd(hpage, lParam))
+ DestroyPropertySheetPage(hpage);
+ else
+ dwRet = NO_ERROR;
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Add extra pages.
+
+Returns: ERROR_ values
+
+Cond: --
+*/
+DWORD PRIVATE AddExtraPages(
+ LPPROPSHEETPAGE pPages,
+ DWORD cPages,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam)
+ {
+ HPROPSHEETPAGE hpage;
+ UINT i;
+
+ ASSERT(pPages);
+ ASSERT(cPages);
+ ASSERT(pfnAdd);
+
+ for (i = 0; i < cPages; i++, pPages++)
+ {
+ // Add the extra property page
+ //
+ if (pPages->dwSize == sizeof(PROPSHEETPAGE))
+ {
+ hpage = CreatePropertySheetPage(pPages);
+ if (hpage)
+ {
+ if (!pfnAdd(hpage, lParam))
+ DestroyPropertySheetPage(hpage);
+ }
+ };
+ };
+
+ return ERROR_SUCCESS;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Function that is called by EnumPropPages entry-point to
+ add property pages.
+
+Returns: TRUE on success
+ FALSE on failure
+
+Cond: --
+*/
+BOOL WINAPI AddInstallerPropPage(
+ HPROPSHEETPAGE hPage,
+ LPARAM lParam)
+ {
+ PROPSHEETHEADER FAR * ppsh = (PROPSHEETHEADER FAR *)lParam;
+
+ if (ppsh->nPages < MAX_PROP_PAGES)
+ {
+ ppsh->phpage[ppsh->nPages] = hPage;
+ ++ppsh->nPages;
+ return(TRUE);
+ }
+ return(FALSE);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Show the properties of a modem
+
+Returns: winerror
+Cond: --
+*/
+DWORD PRIVATE DoProperties(
+ HWND hwndParent,
+ LPMODEMINFO pmi,
+ LPPROPSHEETPAGE pPages, // Optional; may be NULL
+ DWORD cPages)
+ {
+ DWORD dwRet;
+ PROPSHEETHEADER psh;
+ HPROPSHEETPAGE hpsPages[MAX_PROP_PAGES];
+
+ ASSERT(pmi);
+
+ // Initialize the PropertySheet Header
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_PROPTITLE | PSH_NOAPPLYNOW;
+ psh.hwndParent = hwndParent;
+ psh.hInstance = g_hinst;
+ psh.nPages = 0;
+ psh.nStartPage = 0;
+ psh.phpage = (HPROPSHEETPAGE FAR *)hpsPages;
+ psh.pszCaption = pmi->szFriendlyName;
+
+ dwRet = AddGeneralPage(pmi, AddInstallerPropPage, (LPARAM)&psh);
+ if (NO_ERROR == dwRet)
+ {
+ dwRet = AddPage(pmi,
+ MAKEINTRESOURCE(IDD_MDMSETTINGS),
+ Sett_WrapperProc,
+ AddInstallerPropPage,
+ (LPARAM)&psh);
+ if (NO_ERROR == dwRet)
+ {
+ // Add extra pages if any
+ if ((cPages != 0) && (pPages != NULL))
+ {
+ AddExtraPages(pPages, cPages, AddInstallerPropPage, (LPARAM)&psh);
+ }
+
+#ifdef VOICE
+ if (IsFlagSet(pmi->uFlags, MIF_DIST_RING_SUPPORT))
+ {
+ if (IsFlagSet(pmi->uFlags, MIF_CHEAP_RING_SUPPORT))
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_CHEAPRING),
+ CheapRing_WrapperProc, AddInstallerPropPage,
+ (LPARAM)&psh);
+ }
+ else
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_RING),
+ Ring_WrapperProc, AddInstallerPropPage,
+ (LPARAM)&psh);
+ }
+ }
+
+
+ if (IsFlagSet(pmi->uFlags, MIF_CALL_FWD_SUPPORT))
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_CALLFWD),
+ CallFwd_WrapperProc, AddInstallerPropPage,
+ (LPARAM)&psh);
+ }
+#endif
+
+ // Show the property sheet
+ PropertySheet(&psh);
+
+ dwRet = (IDOK == pmi->idRet) ? NO_ERROR : ERROR_CANCELLED;
+ }
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Invokes the modem configuration dialog.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD PRIVATE MyCommConfigDialog(
+ LPFINDDEV pfd,
+ LPCTSTR pszFriendlyName,
+ HWND hwndOwner,
+ LPCOMMCONFIG pcc,
+ LPPROPSHEETPAGE pPages, // Optional; may be NULL
+ DWORD cPages)
+ {
+ DWORD dwRet;
+ LPMODEMINFO pmi;
+ LPGLOBALINFO pglobal;
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(CB_COMMCONFIGSIZE <= pcc->dwSize);
+
+ // Allocate the working buffer
+ pmi = (LPMODEMINFO)LocalAlloc(LPTR, sizeof(*pmi));
+ if (pmi)
+ {
+ // Create a structure for the global modem info
+ pglobal = (LPGLOBALINFO)LocalAlloc(LPTR, LOWORD(sizeof(GLOBALINFO)));
+ if (pglobal)
+ {
+ dwRet = RegQueryGlobalModemInfo(pfd, pglobal);
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ InitializeModemInfo(pmi, pfd, pszFriendlyName, pcc, pglobal);
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ dwRet = DoProperties(hwndOwner, pmi, pPages, cPages);
+ }
+ else
+ {
+ FindDev_Destroy(pfd);
+ }
+ }
+ else
+ {
+ FindDev_Destroy(pfd);
+ dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ }
+ }
+ else
+ {
+ FindDev_Destroy(pfd);
+ dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+
+ // Clear the pcc field so FreeModemInfo does not prematurely
+ // free it, since we did not allocate it.
+ pmi->pcc = NULL;
+ FreeModemInfo(pmi);
+
+ return dwRet;
+ }
+
+
+#ifdef WIN95
+
+// The Device Manager allows DLLs to add pages to the properties
+// of a device. EnumPropPages is the entry-point that it would
+// call to add pages.
+//
+// This is not implemented in NT.
+
+/*----------------------------------------------------------
+Purpose: Derives a MODEMINFO struct from a device info.
+
+Returns: TRUE on success
+
+Cond: --
+*/
+BOOL PRIVATE DeviceInfoToModemInfo(
+ LPDEVICE_INFO pdi,
+ LPMODEMINFO pmi)
+ {
+ BOOL bRet;
+ COMMCONFIG ccDummy;
+ LPCOMMCONFIG pcommconfig;
+ LPGLOBALINFO pglobal;
+ LPFINDDEV pfd;
+ DWORD cbSize;
+ DWORD cbData;
+ TCHAR szFriendly[MAXFRIENDLYNAME];
+
+ // Find the device by looking for the device description. (Note the
+ // device description is not always the same as the friendly name.)
+
+ if (FindDev_Create(&pfd, c_pguidModem, c_szDeviceDesc, pdi->szDescription))
+ {
+ cbData = sizeof(szFriendly);
+ if (ERROR_SUCCESS == RegQueryValueEx(pfd->hkeyDrv, c_szFriendlyName, NULL, NULL,
+ (LPBYTE)szFriendly, &cbData))
+ {
+ ccDummy.dwProviderSubType = PST_MODEM;
+ cbSize = sizeof(COMMCONFIG);
+ drvGetDefaultCommConfig(szFriendly, &ccDummy, &cbSize);
+
+ pcommconfig = (LPCOMMCONFIG)LocalAlloc(LPTR, (UINT)cbSize);
+ if (pcommconfig)
+ {
+ // Get the commconfig from the registry
+ pcommconfig->dwProviderSubType = PST_MODEM;
+ if (NO_ERROR == drvGetDefaultCommConfig(szFriendly,
+ pcommconfig, &cbSize))
+ {
+ // Create a structure for the global modem info
+ pglobal = (LPGLOBALINFO)LocalAlloc(LPTR, LOWORD(sizeof(GLOBALINFO)));
+ if (pglobal)
+ {
+ DWORD dwRet = RegQueryGlobalModemInfo(pfd, pglobal);
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // Initialize the modem info from the commconfig
+ InitializeModemInfo(pmi, pfd, szFriendly, pcommconfig, pglobal);
+
+ SetFlag(pmi->uFlags, MIF_FROM_DEVMGR);
+ bRet = TRUE;
+ }
+ else
+ {
+ // Failure
+ LocalFree(LOCALOF(pcommconfig));
+ LocalFree(LOCALOF(pglobal));
+ bRet = FALSE;
+ }
+ }
+ else
+ {
+ // Failure
+ LocalFree(LOCALOF(pcommconfig));
+ bRet = FALSE;
+ }
+ }
+ else
+ {
+ // Failure
+ LocalFree(LOCALOF(pcommconfig));
+ bRet = FALSE;
+ }
+
+ // pcommconfig and pglobnal are freed in GeneralPageCallback
+ }
+ else
+ bRet = FALSE;
+ }
+ else
+ bRet = FALSE;
+
+ // pfd is destroyed in GeneralPageCallback
+ }
+ else
+ bRet = FALSE;
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: EnumDevicePropPages entry-point. This entry-point
+ gets called only when the Device Manager asks for
+ advanced property pages.
+
+Returns: TRUE on success
+ FALSE if pages could not be added
+Cond: --
+*/
+BOOL WINAPI EnumPropPages(
+ LPDEVICE_INFO pdi,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam) // Don't touch the lParam value, just pass it on!
+ {
+ BOOL bRet = FALSE;
+ LPMODEMINFO pmi;
+
+ DBG_ENTER(EnumPropPages);
+
+ ASSERT(pdi);
+ ASSERT(pfnAdd);
+
+ pmi = (LPMODEMINFO)LocalAlloc(LPTR, sizeof(*pmi));
+ if (pmi)
+ {
+ // Convert the device info struct to a modeminfo.
+ bRet = DeviceInfoToModemInfo(pdi, pmi);
+ if (bRet)
+ {
+ AddGeneralPage(pmi, pfnAdd, lParam);
+ AddPage(pmi, MAKEINTRESOURCE(IDD_MDMSETTINGS), Sett_WrapperProc, pfnAdd, lParam);
+
+#ifdef VOICE
+ if (IsFlagSet(pmi->uFlags, MIF_DIST_RING_SUPPORT))
+ {
+ if (IsFlagSet(pmi->uFlags, MIF_CHEAP_RING_SUPPORT))
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_CHEAPRING),
+ CheapRing_WrapperProc, AddInstallerPropPage,
+ lParam);
+ }
+ else
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_RING),
+ Ring_WrapperProc, AddInstallerPropPage,
+ lParam);
+ }
+ }
+
+ if (IsFlagSet(pmi->uFlags, MIF_CALL_FWD_SUPPORT))
+ {
+ AddPage(pmi, MAKEINTRESOURCE(IDD_CALLFWD),
+ CallFwd_WrapperProc, AddInstallerPropPage,
+ lParam);
+ }
+#endif
+ }
+ else
+ {
+ // Failed
+ FreeModemInfo(pmi);
+ }
+ // pmi is freed in GeneralPageCallback
+ }
+
+ DBG_EXIT_BOOL(EnumPropPages, bRet);
+
+ return bRet;
+ }
+
+#endif // WIN95
+
+/*----------------------------------------------------------
+Purpose: Gets the default COMMCONFIG for the specified device.
+ This API doesn't require a handle.
+
+ We get the info from the registry.
+
+Returns: One of the ERROR_ values
+
+Cond: --
+*/
+DWORD APIENTRY
+UnimodemGetDefaultCommConfig(
+ HKEY hKey,
+ LPCOMMCONFIG pcc,
+ LPDWORD pdwSize)
+ {
+ DWORD dwRet;
+ DWORD cbSizeMS;
+ DWORD cbRequired;
+
+ ASSERT(pcc);
+ ASSERT(pdwSize);
+
+ // (The provider size is the size of MODEMSETTINGS and its
+ // private data.)
+
+ if (CB_PRIVATESIZE > *pdwSize) // Prevent unsigned rollover
+ cbSizeMS = 0;
+ else
+ cbSizeMS = *pdwSize - CB_PRIVATESIZE;
+
+ dwRet = RegQueryModemSettings(hKey, PmsFromPcc(pcc), &cbSizeMS);
+ ASSERT(cbSizeMS >= sizeof(MODEMSETTINGS));
+
+ // Is the provided size too small?
+ cbRequired = CB_PRIVATESIZE + cbSizeMS;
+
+ if (cbRequired > *pdwSize)
+ {
+ // Yes
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+
+ // Ask for a size to fit the new format
+ *pdwSize = cbRequired;
+ }
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // No
+#ifdef DEBUG
+ DumpModemSettings(PmsFromPcc(pcc));
+#endif
+
+ *pdwSize = cbRequired;
+
+ // Initialize the commconfig structure
+ pcc->dwSize = *pdwSize;
+ pcc->wVersion = COMMCONFIG_VERSION_1;
+ pcc->dwProviderSubType = PST_MODEM;
+ pcc->dwProviderOffset = CB_COMMCONFIG_HEADER;
+ pcc->dwProviderSize = cbSizeMS;
+
+ dwRet = RegQueryDCB(hKey, &pcc->dcb);
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+ }
+
+ return dwRet;
+ }
+
+
+
+
+
+
+/*----------------------------------------------------------
+Purpose: Gets the default COMMCONFIG for the specified device.
+ This API doesn't require a handle.
+
+ We get the info from the registry.
+
+Returns: One of the ERROR_ values
+
+Cond: --
+*/
+DWORD PRIVATE MyGetDefaultCommConfig(
+ LPFINDDEV pfd,
+ LPCTSTR pszFriendlyName,
+ LPCOMMCONFIG pcc,
+ LPDWORD pdwSize)
+ {
+ DWORD dwRet;
+ DWORD cbSizeMS;
+ DWORD cbRequired;
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(pdwSize);
+#if 0
+ // (The provider size is the size of MODEMSETTINGS and its
+ // private data.)
+
+ if (CB_PRIVATESIZE > *pdwSize) // Prevent unsigned rollover
+ cbSizeMS = 0;
+ else
+ cbSizeMS = *pdwSize - CB_PRIVATESIZE;
+
+ dwRet = RegQueryModemSettings(pfd->hkeyDrv, PmsFromPcc(pcc), &cbSizeMS);
+ ASSERT(cbSizeMS >= sizeof(MODEMSETTINGS));
+
+ // Is the provided size too small?
+ cbRequired = CB_PRIVATESIZE + cbSizeMS;
+ if (cbRequired > *pdwSize)
+ {
+ // Yes
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+
+ // Ask for a size to fit the new format
+ *pdwSize = cbRequired;
+ }
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ // No
+#ifdef DEBUG
+ DumpModemSettings(PmsFromPcc(pcc));
+#endif
+
+ // Initialize the commconfig structure
+ pcc->dwSize = *pdwSize;
+ pcc->wVersion = COMMCONFIG_VERSION_1;
+ pcc->dwProviderSubType = PST_MODEM;
+ pcc->dwProviderOffset = CB_COMMCONFIG_HEADER;
+ pcc->dwProviderSize = cbSizeMS;
+
+ dwRet = RegQueryDCB(pfd->hkeyDrv, &pcc->dcb);
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+ }
+#endif
+
+ dwRet=UnimodemGetDefaultCommConfig(
+ pfd->hkeyDrv,
+ pcc,
+ pdwSize
+ );
+
+
+
+ return dwRet;
+ }
+
+
+
+
+
+
+
+
+/*----------------------------------------------------------
+Purpose: Sets the default COMMCONFIG for the specified device.
+ This API doesn't require a handle. This function
+ strictly modifies the registry. Use SetCommConfig
+ to set the COMMCONFIG of an open device.
+
+ If the dwSize parameter or the dwSize field are invalid
+ sizes (given the dwProviderSubType field in COMMCONFIG),
+ then this function fails.
+
+Returns: One of the ERROR_ return values
+
+Cond: --
+*/
+DWORD PRIVATE MySetDefaultCommConfig(
+ LPFINDDEV pfd,
+ LPCTSTR pszFriendlyName,
+ LPCOMMCONFIG pcc)
+ {
+ DWORD dwRet = ERROR_INVALID_PARAMETER;
+ DWORD cbData;
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(CB_COMMCONFIGSIZE <= pcc->dwSize);
+
+ ASSERT(CB_PROVIDERSIZE <= pcc->dwProviderSize);
+ ASSERT(FIELDOFFSET(COMMCONFIG, wcProviderData) == pcc->dwProviderOffset);
+
+ if (CB_PROVIDERSIZE <= pcc->dwProviderSize)
+ {
+ LPMODEMSETTINGS pms = PmsFromPcc(pcc);
+
+ // Write the DCB to the driver key
+ cbData = sizeof(WIN32DCB);
+
+ pcc->dcb.DCBlength=cbData;
+
+ dwRet = RegSetValueEx(pfd->hkeyDrv, c_szDCB, 0, REG_BINARY,
+ (LPBYTE)&pcc->dcb, cbData);
+
+ TRACE_MSG(TF_GENERAL, "Writing DCB to registry");
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ if (ERROR_SUCCESS == dwRet)
+ {
+ TRACE_MSG(TF_GENERAL, "Writing MODEMSETTINGS to registry");
+
+// cbData = pcc->dwProviderSize - CB_MODEMSETTINGS_OVERHEAD;
+
+ dwRet = RegSetModemSettings(pfd->hkeyDrv, pms);
+
+ DEBUG_CODE( DumpModemSettings(pms); )
+ }
+ }
+
+ return dwRet;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Entry-points provided for KERNEL32 APIs
+//-----------------------------------------------------------------------------------
+
+
+// BUGBUG: This function is exported for the Unimodem TAPI service
+// provider's use. We should really consolidate its pages into this
+// DLL.
+DWORD
+APIENTRY
+Mdm_CommConfigDialog(
+ IN LPCTSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc,
+ IN LPPROPSHEETPAGE pPages, OPTIONAL
+ IN DWORD cPages)
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ DBG_ENTER_SZ(drvCommConfigDialog, pszFriendlyName);
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONAPIENTER); )
+
+ // We support friendly names (eg, "Hayes Accura 144")
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ // Is the size sufficient?
+ else if (CB_COMMCONFIGSIZE > pcc->dwSize)
+ {
+ // No
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ }
+ else if (FindDev_Create(&pfd, c_pguidModem, c_szFriendlyName, pszFriendlyName))
+ {
+ dwRet = MyCommConfigDialog(pfd, pszFriendlyName, hwndOwner, pcc, pPages, cPages);
+
+ // (MyCommConfigDialog freed pfd)
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD(drvCommConfigDialog, dwRet);
+
+ return dwRet;
+ }
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvCommConfigDialogA(
+ IN LPCSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+#else
+drvCommConfigDialogW(
+ IN LPCWSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for CommConfigDialog
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvCommConfigDialog(
+ IN LPCTSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+ {
+ return Mdm_CommConfigDialog(pszFriendlyName, hwndOwner, pcc, NULL, 0);
+ }
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvGetDefaultCommConfigA(
+ IN LPCSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+#else
+drvGetDefaultCommConfigW(
+ IN LPCWSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for GetDefaultCommConfig
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvGetDefaultCommConfig(
+ IN LPCTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ DBG_ENTER_SZ(drvGetDefaultCommConfig, pszFriendlyName);
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONAPIENTER); )
+
+ // We support friendly names (eg, "Hayes Accura 144")
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc ||
+ NULL == pdwSize)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ else if (FindDev_Create(&pfd, c_pguidModem, c_szFriendlyName, pszFriendlyName))
+ {
+ dwRet = MyGetDefaultCommConfig(pfd, pszFriendlyName, pcc, pdwSize);
+
+ FindDev_Destroy(pfd);
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD(drvGetDefaultCommConfig, dwRet);
+
+ return dwRet;
+ }
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvSetDefaultCommConfigA(
+ IN LPSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize)
+#else
+drvSetDefaultCommConfigW(
+ IN LPWSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for SetDefaultCommConfig
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvSetDefaultCommConfig(
+ IN LPTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize) // This is ignored
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ // BUGBUG (scotth): it is not great that the dwSize parameter is
+ // ignored. It should have been used. I was young and foolish
+ // back when I originally implemented this. It should be reviewed
+ // whether to start looking at this parameter now.
+
+ DBG_ENTER_SZ(drvSetDefaultCommConfig, pszFriendlyName);
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONAPIENTER); )
+
+ // We support friendly names (eg, "Hayes Accura 144")
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ // Is the size sufficient?
+ else if (CB_COMMCONFIGSIZE > pcc->dwSize)
+ {
+ // No
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ }
+ else if (FindDev_Create(&pfd, c_pguidModem, c_szFriendlyName, pszFriendlyName))
+ {
+ dwRet = MySetDefaultCommConfig(pfd, pszFriendlyName, pcc);
+
+ FindDev_Destroy(pfd);
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD(drvSetDefaultCommConfig, dwRet);
+
+ return dwRet;
+ }
diff --git a/private/unimodem/modemui/modemui.def b/private/unimodem/modemui/modemui.def
new file mode 100644
index 000000000..d0d51e776
--- /dev/null
+++ b/private/unimodem/modemui/modemui.def
@@ -0,0 +1,22 @@
+LIBRARY MODEMUI
+EXETYPE WINDOWS
+PROTMODE
+
+DESCRIPTION 'Windows Modem Properties'
+
+CODE MOVEABLE DISCARDABLE PRELOAD
+DATA MOVEABLE PRELOAD SINGLE
+
+HEAPSIZE 1024
+
+EXPORTS
+ Mdm_CommConfigDialog @1
+ UnimodemGetDefaultCommConfig @10
+
+ ; Stubs to KERNEL32
+ drvCommConfigDialogW @2
+ drvCommConfigDialogA @3
+ drvSetDefaultCommConfigW @4
+ drvSetDefaultCommConfigA @5
+ drvGetDefaultCommConfigW @6
+ drvGetDefaultCommConfigA @7
diff --git a/private/unimodem/modemui/modemui.dlg b/private/unimodem/modemui/modemui.dlg
new file mode 100644
index 000000000..7e9f9d2fd
--- /dev/null
+++ b/private/unimodem/modemui/modemui.dlg
@@ -0,0 +1,238 @@
+//Microsoft Visual C++ generated resource script.
+//
+#include "dlgids.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+#include <commctrl.h>
+/////////////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_PATTERNS BITMAP DISCARDABLE "patterns.bmp"
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_GENERAL DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "General"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ ICON "",IDC_GE_ICON,17,9,18,20
+ EDITTEXT IDC_ED_FRIENDLYNAME,46,14,144,12,ES_AUTOHSCROLL |
+ ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
+ CONTROL "",-1,"Static",SS_ETCHEDHORZ,10,40,192,1
+ LTEXT "Port:",IDC_LBL_PORT,17,52,20,8
+ COMBOBOX IDC_CB_PORT,37,50,110,64,CBS_DROPDOWNLIST | CBS_SORT |
+ NOT WS_VISIBLE | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_ED_PORT,37,52,110,12,ES_AUTOHSCROLL | ES_READONLY |
+ NOT WS_VISIBLE | WS_DISABLED | NOT WS_BORDER
+ LTEXT "",IDC_ST_PORT,37,52,110,12
+ GROUPBOX "&Speaker volume",IDC_SPEAKER,10,70,192,46
+ RTEXT "Off",IDC_LBL_OFF,28,89,18,8
+ CONTROL "",IDC_VOLUME,"msctls_trackbar32",WS_GROUP | WS_TABSTOP |
+ 0x1,55,88,66,20
+ LTEXT "High",IDC_LOUD,129,89,21,8
+ GROUPBOX "&Maximum speed",IDC_SPEED,10,122,192,56
+ COMBOBOX IDC_CB_SPEED,37,139,110,69,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ CONTROL "&Only connect at this speed",IDC_STRICTSPEED,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,37,159,98,10
+END
+
+IDD_MDMSETTINGS DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Connection"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Connection preferences",IDC_CONN_PREF,7,7,197,68
+ LTEXT "&Data bits:",IDC_LBL_DATABITS,22,21,34,8
+ COMBOBOX IDC_DATABITS,60,19,75,61,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ LTEXT "&Parity:",IDC_LBL_PARITY,22,39,34,8
+ COMBOBOX IDC_PARITY,60,37,75,60,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ LTEXT "&Stop bits:",IDC_LBL_STOPBITS,22,57,34,8
+ COMBOBOX IDC_STOPBITS,60,55,75,45,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ GROUPBOX "Call preferences",IDC_CALL_PREF,7,79,197,67
+ CONTROL "&Wait for dial tone before dialing",IDC_WAITFORDIALTONE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,93,160,10
+ CONTROL "&Cancel the call if not connected within",
+ IDC_CH_DIALTIMER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 22,109,134,10
+ EDITTEXT IDC_ED_DIALTIMER,157,107,17,13,ES_AUTOHSCROLL
+ LTEXT "secs",IDC_SECONDS,177,110,17,8
+ CONTROL "D&isconnect a call if idle for more than",
+ IDC_CH_IDLETIMER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 22,126,129,10
+ EDITTEXT IDC_ED_IDLETIMER,157,124,17,13,ES_AUTOHSCROLL
+ LTEXT "mins",IDC_MINUTES,177,127,17,8
+ PUSHBUTTON "P&ort Settings...",IDC_PB_CONFIGURE,7,167,70,14
+ PUSHBUTTON "Ad&vanced...",IDC_PB_ADVANCED,135,167,70,14
+END
+
+IDD_ADV_MODEM DIALOG DISCARDABLE 17, 12, 243, 174
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | DS_CONTEXTHELP
+CAPTION "Advanced Connection Settings"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_AM_ERRCTL_GRP,7,7,111,54
+ CONTROL "Use &error control",IDC_AM_ERRCTL,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,13,7,67,10
+ CONTROL "&Required to connect",IDC_AM_REQUIRED,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,18,20,97,10
+ CONTROL "&Compress data",IDC_AM_COMPRESS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,18,33,97,10
+ CONTROL "&Use cellular protocol",IDC_AM_USECELL,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,18,46,97,10
+ GROUPBOX "",IDC_AM_FLOWCTL_GRP,125,7,111,54
+ CONTROL "Use &flow control",IDC_AM_USEFLOWCTL,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,131,7,65,10
+ CONTROL "&Hardware (RTS/CTS)",IDC_AM_HW,"Button",
+ BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,136,22,93,10
+ CONTROL "&Software (XON/XOFF)",IDC_AM_SW,"Button",
+ BS_AUTORADIOBUTTON,136,38,94,10
+ GROUPBOX "&Modulation type",IDC_AM_MODULATION,7,65,
+ 229,30
+ COMBOBOX IDC_AM_MODULATION_LIST,18,77,208,45,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ GROUPBOX "E&xtra settings",IDC_AM_EXTRA,7,99,229,33
+ EDITTEXT IDC_AM_EXTRA_ED,18,112,208,13,ES_AUTOHSCROLL
+ CONTROL "Rec&ord a log file",IDC_LOGGING,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,18,139,101,10
+ DEFPUSHBUTTON "OK",IDOK,124,153,54,14
+ PUSHBUTTON "Cancel",IDCANCEL,182,153,54,14
+END
+
+IDD_RING DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Address"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_RING_GROUP,7,7,197,141
+ CONTROL "&This phone line has Distinctive Ring Services",
+ IDC_RING_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,
+ 7,157,10
+ CTEXT "Ring Pattern",IDC_STATIC,84,21,49,8
+ CTEXT "Type of Call",IDC_STATIC,140,21,55,8
+ LTEXT "&Primary address:",IDC_LBL_ADDR_PRI,22,37,53,8
+ COMBOBOX IDC_ADDR_PRI,84,37,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_ADDR_PRI,140,37,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Address &1:",IDC_LBL_ADDR1,22,57,53,8
+ COMBOBOX IDC_ADDR1,84,55,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_ADDR1,140,55,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Address &2:",IDC_LBL_ADDR2,22,75,53,8
+ COMBOBOX IDC_ADDR2,84,73,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_ADDR2,140,73,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Address &3:",IDC_LBL_ADDR3,22,93,53,8
+ COMBOBOX IDC_ADDR3,84,91,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_ADDR3,140,91,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Priority &callers:",IDC_LBL_PRI_CALLERS,22,111,53,8
+ COMBOBOX IDC_PRI_CALLERS,84,109,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_PRI_CALLERS,140,109,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Call&back:",IDC_LBL_CALLBACK,22,129,53,8
+ COMBOBOX IDC_CALLBACK,84,127,49,61,CBS_DROPDOWNLIST |
+ CBS_OWNERDRAWFIXED | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_TYPE_CALLBACK,140,127,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_CHEAPRING DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Address"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_RING_GROUP,7,7,197,87
+ CONTROL "&This phone line has Distinctive Ring Services",
+ IDC_RING_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,
+ 7,157,10
+ CTEXT "Ring Pattern",IDC_STATIC,22,21,49,8
+ CTEXT "Type of Call",IDC_STATIC,84,21,55,8
+ LTEXT "&Single ring:",IDC_LBL_RING1,22,37,53,8
+ COMBOBOX IDC_TYPE_RING1,84,37,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "&Double ring:",IDC_LBL_RING2,22,57,53,8
+ COMBOBOX IDC_TYPE_RING2,84,55,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "T&riple ring:",IDC_LBL_RING3,22,75,53,8
+ COMBOBOX IDC_TYPE_RING3,84,73,55,61,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_CALLFWD DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Forwarding"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_FWD_GROUP,7,7,197,51
+ CONTROL "&This phone line has call forwarding",IDC_FWD_CHECK,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,7,125,10
+ LTEXT "&Activation code:",IDC_FWD_ACT,22,21,62,8
+ EDITTEXT IDC_ACT,89,19,40,13,ES_AUTOHSCROLL
+ LTEXT "&Deactivation code:",IDC_FWD_DEACT,22,39,62,8
+ EDITTEXT IDC_DEACT,89,37,40,13,ES_AUTOHSCROLL
+END
+
+#ifdef APSTUDIO_INVOKED
+//////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "dlgids.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include <commctrl.h>\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+#ifndef APSTUDIO_INVOKED
+////////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/private/unimodem/modemui/modemui.h b/private/unimodem/modemui/modemui.h
new file mode 100644
index 000000000..0843cac51
--- /dev/null
+++ b/private/unimodem/modemui/modemui.h
@@ -0,0 +1,183 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: modemui.h
+//
+// This files contains the shared prototypes and macros.
+//
+// History:
+// 02-03-94 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+#ifndef __MODEMUI_H__
+#define __MODEMUI_H__
+
+#define VOICE
+#ifdef VOICE
+
+#define MAX_CODE_BUF 8
+
+typedef struct tagDistRing
+ {
+ DWORD dwPattern; // DRP_*
+ DWORD dwMediaType; // DRT_*
+ } DIST_RING, FAR * PDIST_RING;
+
+#define MAX_DIST_RINGS 6
+
+// Voice settings
+typedef struct tagVOICEFEATURES
+ {
+ DWORD cbSize;
+ DWORD dwFlags; // VSF_*
+
+ DIST_RING DistRing[MAX_DIST_RINGS];
+
+ TCHAR szActivationCode[MAX_CODE_BUF];
+ TCHAR szDeactivationCode[MAX_CODE_BUF];
+ } VOICEFEATURES, FAR * PVOICEFEATURES;
+
+// Voice settings flags
+#define VSF_DIST_RING 0x00000001L
+#define VSF_CALL_FWD 0x00000002L
+
+// Distinctive Ring Pattern ordinals
+#define DRP_NONE 0L
+#define DRP_SHORT 1L
+#define DRP_LONG 2L
+#define DRP_SHORTSHORT 3L
+#define DRP_SHORTLONG 4L
+#define DRP_LONGSHORT 5L
+#define DRP_LONGLONG 6L
+#define DRP_SHORTSHORTLONG 7L
+#define DRP_SHORTLONGSHORT 8L
+#define DRP_LONGSHORTSHORT 9L
+#define DRP_LONGSHORTLONG 10L
+
+#define DRP_SINGLE 1L
+#define DRP_DOUBLE 2L
+#define DRP_TRIPLE 3L
+
+// Distinctive Ring Type ordinals
+#define DRT_UNSPECIFIED 0L
+#define DRT_DATA 1L
+#define DRT_FAX 2L
+#define DRT_VOICE 3L
+
+// Distintive Ring array indices
+#define DR_INDEX_PRIMARY 0
+#define DR_INDEX_ADDRESS1 1
+#define DR_INDEX_ADDRESS2 2
+#define DR_INDEX_ADDRESS3 3
+#define DR_INDEX_PRIORITY 4
+#define DR_INDEX_CALLBACK 5
+
+#endif // VOICE
+
+#define MAXPORTNAME 13
+#define MAXFRIENDLYNAME LINE_LEN // LINE_LEN is defined in setupx.h
+
+
+// Global modem info
+typedef struct tagGLOBALINFO
+ {
+ DWORD cbSize;
+ BYTE nDeviceType; // One of DT_* values
+ UINT uFlags; // One of MIF_* values
+ REGDEVCAPS devcaps;
+#ifdef VOICE
+ VOICEFEATURES vs;
+#endif
+
+ TCHAR szPortName[MAXPORTNAME];
+ TCHAR szUserInit[LINE_LEN];
+
+ } GLOBALINFO, FAR * LPGLOBALINFO;
+
+
+// Internal structure shared between modem property pages.
+//
+typedef struct _MODEMINFO
+ {
+ BYTE nDeviceType; // One of DT_* values
+ UINT uFlags; // One of MIF_* values
+ WIN32DCB dcb;
+ MODEMSETTINGS ms;
+ REGDEVCAPS devcaps;
+#ifdef WIN95
+ LPDEVICE_INFO pdi; // Read-only
+#endif
+ LPCOMMCONFIG pcc; // Read-only
+ LPGLOBALINFO pglobal; // Read-only
+ LPFINDDEV pfd; // Read-only
+ int idRet; // IDOK: if terminated by OK button
+
+ TCHAR szPortName[MAXPORTNAME];
+ TCHAR szFriendlyName[MAXFRIENDLYNAME];
+ TCHAR szUserInit[LINE_LEN];
+ } ModemInfo, FAR * LPMODEMINFO;
+
+// ModemInfo Flags
+#define MIF_PORTNAME_CHANGED 0x0001
+#define MIF_USERINIT_CHANGED 0x0002
+#define MIF_LOGGING_CHANGED 0x0004
+#define MIF_FROM_DEVMGR 0x0008
+#define MIF_ENABLE_LOGGING 0x0010
+#define MIF_PORT_IS_FIXED 0x0020
+#define MIF_PORT_IS_CUSTOM 0x0040
+#ifdef VOICE
+#define MIF_CALL_FWD_SUPPORT 0x0080
+#define MIF_DIST_RING_SUPPORT 0x0100
+#define MIF_CHEAP_RING_SUPPORT 0x0200
+#endif
+
+
+// Internal structure shared between port property pages.
+//
+typedef struct _PORTINFO
+ {
+ WIN32DCB dcb;
+ LPCOMMCONFIG pcc; // Read-only
+ int idRet;
+
+ TCHAR szFriendlyName[MAXFRIENDLYNAME];
+ } PortInfo, FAR * LPPORTINFO;
+
+
+//-------------------------------------------------------------------------
+// GEN.C
+//-------------------------------------------------------------------------
+
+BOOL CALLBACK Gen_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+//-------------------------------------------------------------------------
+// SETT.C
+//-------------------------------------------------------------------------
+
+BOOL CALLBACK Sett_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+// Flags for ConvertFlowCtl
+#define CFC_DCBTOMS 1
+#define CFC_MSTODCB 2
+#define CFC_SW_CAPABLE 4
+#define CFC_HW_CAPABLE 8
+
+void FAR PASCAL ConvertFlowCtl(WIN32DCB FAR * pdcb, MODEMSETTINGS FAR * pms, UINT uFlags);
+
+BOOL CALLBACK Ring_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK CheapRing_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+BOOL CALLBACK CallFwd_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+
+//-------------------------------------------------------------------------
+// ADVSETT.C
+//-------------------------------------------------------------------------
+
+BOOL CALLBACK AdvSett_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+
+#endif // __MODEMUI_H__
+
diff --git a/private/unimodem/modemui/modemui.rc b/private/unimodem/modemui/modemui.rc
new file mode 100644
index 000000000..3e947c496
--- /dev/null
+++ b/private/unimodem/modemui/modemui.rc
@@ -0,0 +1,109 @@
+#include "rcids.h"
+#include "dlgids.h"
+
+#include <windows.h>
+
+/* Version stamping */
+#include "modemui.rcv"
+
+/* Dialog resource */
+#include "modemui.dlg"
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Icons
+//
+
+IDI_NULL_MODEM ICON "..\\resource\\nullmdm.ico"
+IDI_EXTERNAL_MODEM ICON "..\\resource\\external.ico"
+IDI_INTERNAL_MODEM ICON "..\\resource\\internal.ico"
+IDI_PCMCIA_MODEM ICON "..\\resource\\pcmcia.ico"
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_OOM_GENERAL "There is not enough memory to view the General dialog box.\nClose some files or programs, and then try again."
+ IDS_OOM_SETTINGS "There is not enough memory to view the Modem Settings dialog box.\nClose some files or programs, and then try again."
+ IDS_ERR_DUP_PATTERN "Each calling address must be set to 'Automatic' or to a unique ring pattern.\n\nChange the duplicate ring pattern to a different one."
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_CAP_GENERAL "Modem"
+ IDS_CAP_SETTINGS "Modem Settings"
+ IDS_CAP_RING "Modem Address"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_LOGFILE "ModemLog.txt"
+ IDS_NULL_MODEM "RS-232 Serial Port"
+ IDS_EXTERNAL_MODEM "External Modem"
+ IDS_INTERNAL_MODEM "Internal Modem"
+ IDS_PCMCIA_MODEM "PCMCIA Modem"
+ IDS_PARALLEL_PORT "Parallel Port"
+ IDS_PARALLEL_MODEM "Parallel Modem"
+ IDS_BAUD_075 "75"
+ IDS_BAUD_134_5 "134.5"
+ IDS_BAUD_150 "150"
+ IDS_BAUD_300 "300"
+ IDS_BAUD_600 "600"
+ IDS_BAUD_1800 "1800"
+ IDS_BAUD_7200 "7200"
+ IDS_BAUD_110 "110"
+ IDS_BAUD_1200 "1200"
+ IDS_BAUD_2400 "2400"
+ IDS_BAUD_4800 "4800"
+ IDS_BAUD_9600 "9600"
+ IDS_BAUD_14400 "14400"
+ IDS_BAUD_19200 "19200"
+ IDS_BAUD_38400 "38400"
+ IDS_BAUD_56K "56000"
+ IDS_BAUD_57600 "57600"
+ IDS_BAUD_115200 "115200"
+ IDS_BAUD_128K "128000"
+ IDS_BAUD_230400 "230400"
+ IDS_BAUD_460800 "460800"
+ IDS_BAUD_921600, "921600"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_BYTESIZE_4 "4"
+ IDS_BYTESIZE_5 "5"
+ IDS_BYTESIZE_6 "6"
+ IDS_BYTESIZE_7 "7"
+ IDS_BYTESIZE_8 "8"
+ IDS_PARITY_EVEN "Even"
+ IDS_PARITY_ODD "Odd"
+ IDS_PARITY_NONE "None"
+ IDS_PARITY_MARK "Mark"
+ IDS_PARITY_SPACE "Space"
+ IDS_STOPBITS_1 "1"
+ IDS_STOPBITS_1_5 "1.5"
+ IDS_STOPBITS_2 "2"
+ IDS_FLOWCTL_XONXOFF "Xon / Xoff"
+ IDS_FLOWCTL_HARDWARE "Hardware"
+ IDS_FLOWCTL_NONE "None"
+ IDS_ON "On"
+ IDS_SOFT "Low"
+ IDS_CCITT_V23 "V.23 (Minitel)"
+ IDS_CCITT_V21V22 "Standard"
+ IDS_BELL "Non-standard (Bell, HST)"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_UNSPECIFIED "Unspecified"
+ IDS_DATA "Data"
+ IDS_FAX "Fax"
+ IDS_VOICE "Voice"
+ IDS_AUTOMATIC "None"
+END
+
+
diff --git a/private/unimodem/modemui/modemui.rcv b/private/unimodem/modemui/modemui.rcv
new file mode 100644
index 000000000..b096cb0ac
--- /dev/null
+++ b/private/unimodem/modemui/modemui.rcv
@@ -0,0 +1,21 @@
+/********************************************************************/
+/* MODEMUI.RCV */
+/********************************************************************/
+#ifdef WINNT
+#include <winver.h>
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Windows Modem Properties"
+#define VER_INTERNALNAME_STR "MODEMUI"
+#define VER_LEGALCOPYRIGHT_YEARS "1993-1995"
+#define VER_ORIGINALFILENAME_STR "MODEMUI.DLL"
+
+
+#include <common.ver>
+
+ \ No newline at end of file
diff --git a/private/unimodem/modemui/patterns.bmp b/private/unimodem/modemui/patterns.bmp
new file mode 100644
index 000000000..6ca0dd64e
--- /dev/null
+++ b/private/unimodem/modemui/patterns.bmp
Binary files differ
diff --git a/private/unimodem/modemui/proj.h b/private/unimodem/modemui/proj.h
new file mode 100644
index 000000000..b06f14473
--- /dev/null
+++ b/private/unimodem/modemui/proj.h
@@ -0,0 +1,91 @@
+//
+// proj.h: Includes all files that are to be part of the precompiled
+// header.
+//
+
+#ifndef __PROJ_H__
+#define __PROJ_H__
+
+#define STRICT
+
+#if DBG > 0 && !defined(DEBUG)
+#define DEBUG
+#endif
+#if DBG > 0 && !defined(FULL_DEBUG)
+#define FULL_DEBUG
+#endif
+
+#define UNICODE
+
+// Defines for rovcomm.h
+
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NOPATH
+#define NOSYNC
+#ifndef DEBUG
+#define NOPROFILE
+#endif
+
+#define SZ_MODULEA "MODEMUI"
+#define SZ_MODULEW TEXT("MODEMUI")
+
+#ifdef DEBUG
+#define SZ_DEBUGSECTION TEXT("MODEMUI")
+#define SZ_DEBUGINI TEXT("unimdm.ini")
+#endif // DEBUG
+
+// Includes
+
+#define USECOMM
+
+#include <windows.h>
+#include <windowsx.h>
+
+#include <winerror.h>
+#include <commctrl.h> // needed by shlobj.h and our progress bar
+#include <prsht.h> // Property sheet stuff
+#include <rovcomm.h>
+#include <modemp.h>
+#include <shellapi.h> // for registration functions
+#include <regstr.h>
+
+#ifdef WIN95
+#include <setupx.h> // PnP setup/installer services
+#else
+#include <setupapi.h> // PnP setup/installer services
+#endif
+
+#define MAXBUFLEN MAX_BUF
+#define MAXMSGLEN MAX_BUF_MSG
+#define MAXMEDLEN MAX_BUF_MED
+#define MAXSHORTLEN MAX_BUF_SHORT
+
+#ifndef LINE_LEN
+#define LINE_LEN MAXBUFLEN
+#endif
+
+// local includes
+//
+#include "dll.h"
+#include "cstrings.h" // Read-only string constants
+#include "util.h" // Utility functions
+#include "modemui.h"
+#include "rcids.h"
+#include "dlgids.h"
+
+//****************************************************************************
+//
+//****************************************************************************
+
+
+// Dump flags
+#define DF_DCB 0x00000001
+#define DF_MODEMSETTINGS 0x00000002
+#define DF_DEVCAPS 0x00000004
+
+#endif //!__PROJ_H__
+
diff --git a/private/unimodem/modemui/rcids.h b/private/unimodem/modemui/rcids.h
new file mode 100644
index 000000000..200d79041
--- /dev/null
+++ b/private/unimodem/modemui/rcids.h
@@ -0,0 +1,153 @@
+//{{NO_DEPENDENCIES}}
+// App Studio generated include file.
+// Used by SYNCUI.RC
+//
+
+// Icon values
+//
+#define IDI_NULL_MODEM 700
+#define IDI_EXTERNAL_MODEM 701
+#define IDI_INTERNAL_MODEM 702
+#define IDI_PCMCIA_MODEM 703
+
+// Bitmap values
+//
+#define IDB_ACTIONS 108
+#define IDB_SMALLACTIONS_MASK 111
+#define IDB_CONTAIN 801
+#define IDB_CONTAIN_MASK 802
+#define IDB_ACTIONS_MASK 803
+#define IDB_SMALLACTIONS 804
+#define IDB_MENU_MASK 806
+#define IDB_MENU 806
+
+// Random stuff
+//
+#define IDS_NULL_MODEM 180
+#define IDS_EXTERNAL_MODEM 181
+#define IDS_INTERNAL_MODEM 182
+#define IDS_PCMCIA_MODEM 183
+#define IDS_PARALLEL_MODEM 184
+#define IDS_PARALLEL_PORT 185
+
+#define IDS_BAUD_110 200
+#define IDS_BAUD_1200 201
+#define IDS_BAUD_2400 202
+#define IDS_BAUD_4800 203
+#define IDS_BAUD_9600 204
+#define IDS_BAUD_14400 205
+#define IDS_BAUD_19200 206
+#define IDS_BAUD_38400 207
+#define IDS_BAUD_56K 208
+#define IDS_BAUD_128K 209
+#define IDS_BAUD_115200 210
+#define IDS_BAUD_57600 211
+//#define IDS_BAUD_FASTEST 212
+#define IDS_BAUD_075 213
+#define IDS_BAUD_134_5 214
+#define IDS_BAUD_150 215
+#define IDS_BAUD_300 216
+#define IDS_BAUD_600 217
+#define IDS_BAUD_1800 218
+#define IDS_BAUD_7200 219
+#define IDS_BAUD_230400 220
+#define IDS_BAUD_460800 221
+#define IDS_BAUD_921600 222
+
+#define IDS_BYTESIZE_4 240
+#define IDS_BYTESIZE_5 241
+#define IDS_BYTESIZE_6 242
+#define IDS_BYTESIZE_7 243
+#define IDS_BYTESIZE_8 244
+
+#define IDS_PARITY_EVEN 250
+#define IDS_PARITY_ODD 251
+#define IDS_PARITY_NONE 252
+#define IDS_PARITY_MARK 253
+#define IDS_PARITY_SPACE 254
+#define IDS_STOPBITS_1 255
+#define IDS_STOPBITS_1_5 256
+#define IDS_STOPBITS_2 257
+
+#define IDS_FLOWCTL_XONXOFF 260
+#define IDS_FLOWCTL_HARDWARE 261
+#define IDS_FLOWCTL_NONE 262
+
+#define IDS_ON 263
+#define IDS_SOFT 264
+
+#define IDS_CCITT_V23 265
+#define IDS_CCITT_V21V22 266
+#define IDS_BELL 267
+
+#define IDS_LOGFILE 270
+
+#define IDS_UNSPECIFIED 300
+#define IDS_DATA 301
+#define IDS_FAX 302
+#define IDS_VOICE 303
+#define IDS_AUTOMATIC 304
+
+// Messages
+//
+
+// Captions
+//
+#define IDS_CAP_GENERAL 340
+#define IDS_CAP_SETTINGS 341
+#define IDS_CAP_RING 342
+#define IDS_CAP_CALLFWD 343
+
+// Formatted strings
+//
+
+// Error strings
+//
+
+// Out-of-memory strings
+//
+#define IDS_OOM_GENERAL 460
+#define IDS_OOM_SETTINGS 461
+#define IDS_OOM_PORT 462
+#define IDS_ERR_DUP_PATTERN 463
+#define IDS_ERR_NEED_VALUE 464
+
+// Context sensitive help ids (as assigned in windows.hlp)
+//
+#define IDH_UNI_GEN_MODEM 5050
+#define IDH_UNI_GEN_PORT 5051
+#define IDH_UNI_GEN_VOLUME 5052
+#define IDH_UNI_GEN_MAX_SPEED 5053
+#define IDH_UNI_GEN_THIS_SPEED 5054
+#define IDH_UNI_CON_PREFS 5055
+#define IDH_UNI_CON_CALL_PREFS 5056
+
+#define IDH_UNI_CON_DIALTONE 5058
+#define IDH_UNI_CON_CANCEL 5059
+#define IDH_UNI_CON_DISCONNECT 5060
+
+#define IDH_UNI_CON_ADVANCED 5062
+#define IDH_UNI_CON_ADV_ERROR 5063
+#define IDH_UNI_CON_ADV_REQUIRED 5064
+#define IDH_UNI_CON_ADV_COMPRESS 5065
+#define IDH_UNI_CON_ADV_CELLULAR 5066
+#define IDH_UNI_CON_ADV_FLOW 5067
+#define IDH_UNI_CON_ADV_MODULATION 5068
+#define IDH_UNI_CON_ADV_CSITT 5069
+#define IDH_UNI_CON_ADV_BELL 5070
+#define IDH_UNI_CON_ADV_EXTRA 5071
+#define IDH_UNI_CON_ADV_AUDIT 5072
+
+#define IDH_UNI_GEN_PORT_INT 5081
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 113
+#define _APS_NEXT_COMMAND_VALUE 105
+#define _APS_NEXT_CONTROL_VALUE 1006
+#define _APS_NEXT_SYMED_VALUE 105
+#endif
+#endif
diff --git a/private/unimodem/modemui/ring.c b/private/unimodem/modemui/ring.c
new file mode 100644
index 000000000..f8579e7bf
--- /dev/null
+++ b/private/unimodem/modemui/ring.c
@@ -0,0 +1,1756 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// File: ring.c
+//
+// This files contains the dialog code for the Voice settings
+// property pages.
+//
+// History:
+// 07-05-95 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h" // common headers
+
+#if defined(WIN95) && defined(CS_HELP)
+#include "..\..\..\..\win\core\inc\help.h"
+#endif
+
+#define CX_PATTERN 40
+#define CY_PATTERN 5
+
+typedef struct tagRING
+ {
+ HWND hdlg; // dialog handle
+ LPMODEMINFO pmi; // modeminfo struct passed into dialog
+
+ HBITMAP hbmStrip;
+ HDC hdcStrip;
+ HFONT hfont;
+ int cyText;
+
+ } RING, FAR * PRING;
+
+
+typedef struct tagRINGPAT
+ {
+ DWORD dwPattern;
+ LPARAM lParam;
+ } RINGPAT, FAR * PRINGPAT;
+
+static RINGPAT s_rgrp[] =
+ {
+ { DRP_NONE, 0 },
+ { DRP_SHORT, 0 },
+ { DRP_LONG, 0 },
+ { DRP_SHORTSHORT, 0 },
+ { DRP_SHORTLONG, 0 },
+ { DRP_LONGSHORT, 0 },
+ { DRP_LONGLONG, 0 },
+ { DRP_SHORTSHORTLONG, 0 },
+ { DRP_SHORTLONGSHORT, 0 },
+ { DRP_LONGSHORTSHORT, 0 },
+ { DRP_LONGSHORTLONG, 0 },
+ };
+
+#pragma data_seg(DATASEG_READONLY)
+
+const static UINT c_rgidcPattern[] =
+ {
+ IDC_ADDR_PRI,
+ IDC_ADDR1,
+ IDC_ADDR2,
+ IDC_ADDR3,
+ IDC_PRI_CALLERS,
+ IDC_CALLBACK,
+ };
+const static UINT c_rgidcTypeOfCalls[] =
+ {
+ IDC_TYPE_ADDR_PRI,
+ IDC_TYPE_ADDR1,
+ IDC_TYPE_ADDR2,
+ IDC_TYPE_ADDR3,
+ IDC_TYPE_PRI_CALLERS,
+ IDC_TYPE_CALLBACK,
+ };
+
+static DWORD c_rgdwCheapPatterns[] =
+ {
+ DRP_SINGLE,
+ DRP_DOUBLE,
+ DRP_TRIPLE,
+ };
+
+const static UINT c_rgidcTypeOfCheapCalls[] =
+ {
+ IDC_TYPE_RING1,
+ IDC_TYPE_RING2,
+ IDC_TYPE_RING3,
+ };
+
+TCHAR const FAR c_szUnimdmHelpFile[] = TEXT("unimdm.hlp");
+
+#pragma data_seg()
+
+
+#define Ring_GetPtr(hwnd) (PRING)GetWindowLong(hwnd, DWL_USER)
+#define Ring_SetPtr(hwnd, lp) (PRING)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+
+//-----------------------------------------------------------------------------------
+// Voice settings dialog code
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the bitmap strip
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_InitStrip(
+ PRING this,
+ HDC hdc)
+ {
+ ASSERT(hdc);
+
+ this->hbmStrip = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_PATTERNS));
+ ASSERT(this->hbmStrip);
+
+ this->hdcStrip = CreateCompatibleDC(hdc);
+ if (this->hdcStrip)
+ {
+ SelectObject(this->hdcStrip, this->hbmStrip);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the specified Pattern combobox.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_InitPattern(
+ PRING this,
+ HWND hwndCB,
+ DWORD dwPattern)
+ {
+ int i;
+ int iSel = 0;
+ int n;
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgrp); i++)
+ {
+ n = ComboBox_AddString(hwndCB, &s_rgrp[i]);
+
+ // Keep our eyes peeled for the selected type
+ if (dwPattern == s_rgrp[i].dwPattern)
+ {
+ iSel = n;
+ }
+ }
+
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the specified Type of Call combobox.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_InitTypeOfCall(
+ PRING this,
+ HWND hwndCB,
+ DWORD dwType)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ static const struct
+ {
+ UINT ids;
+ DWORD dwType; // DRT_*
+ } s_rgTypes[] =
+ {
+ { IDS_UNSPECIFIED, DRT_UNSPECIFIED },
+ { IDS_DATA, DRT_DATA },
+ { IDS_FAX, DRT_FAX },
+ { IDS_VOICE, DRT_VOICE },
+ };
+#pragma data_seg()
+
+ int i;
+ int iSel = 0;
+ int n;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgTypes); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgTypes[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgTypes[i].dwType);
+
+ // Keep our eyes peeled for the selected type
+ if (dwType == s_rgTypes[i].dwType)
+ {
+ iSel = n;
+ }
+ }
+
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Enable/disable all the controls
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_EnableControls(
+ PRING this,
+ BOOL bEnable)
+ {
+ HWND hwnd = this->hdlg;
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_ADDR_PRI), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_ADDR_PRI), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_ADDR_PRI), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_ADDR1), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_ADDR1), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_ADDR1), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_ADDR2), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_ADDR2), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_ADDR2), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_ADDR3), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_ADDR3), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_ADDR3), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_PRI_CALLERS), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_PRI_CALLERS), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_PRI_CALLERS), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_CALLBACK), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_CALLBACK), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_CALLBACK), bEnable);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE Ring_OnInitDialog(
+ PRING this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ LPDWORD lpdw;
+ BOOL bEnable;
+ int i;
+ PVOICEFEATURES pvs;
+ HDC hdc;
+ LOGFONT lf;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pmi = (LPMODEMINFO)lppsp->lParam;
+ pvs = &this->pmi->pglobal->vs;
+
+ // Determine some font things
+
+ SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(lf), &lf, FALSE);
+ this->hfont = CreateFontIndirect(&lf);
+
+ // Create bitmap strip
+
+ hdc = GetDC(hwnd);
+ if (hdc)
+ {
+ Ring_InitStrip(this, hdc);
+ ReleaseDC(hwnd, hdc);
+ }
+
+ // Enable/disable controls
+
+ bEnable = IsFlagSet(this->pmi->pglobal->vs.dwFlags, VSF_DIST_RING);
+
+ Button_SetCheck(GetDlgItem(hwnd, IDC_RING_CHECK), bEnable);
+ Ring_EnableControls(this, bEnable);
+
+ // Initialize controls
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcPattern); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcPattern[i]);
+ lpdw = &pvs->DistRing[i].dwPattern;
+
+ Ring_InitPattern(this, hwndCtl, *lpdw);
+ }
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcTypeOfCalls); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcTypeOfCalls[i]);
+ lpdw = &pvs->DistRing[i].dwMediaType;
+
+ Ring_InitTypeOfCall(this, hwndCtl, *lpdw);
+ }
+
+ return TRUE; // default initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_OnCommand(
+ PRING this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ BOOL bCheck;
+
+ switch (id)
+ {
+ case IDC_RING_CHECK:
+ bCheck = Button_GetCheck(hwndCtl);
+ Ring_EnableControls(this, bCheck);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Validate the user's settings.
+
+ The ring patterns must be unique, except that
+ any/all may be set to DRP_NONE.
+
+Returns: TRUE if valid
+
+Cond: --
+*/
+BOOL PRIVATE Ring_ValidateSettings(
+ PRING this)
+ {
+ HWND hwnd = this->hdlg;
+ int i;
+ int iSel;
+ HWND hwndCtl;
+ PRINGPAT prp;
+
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgrp); i++)
+ {
+ // Initialize lParam to 0
+ s_rgrp[i].lParam = 0;
+ }
+
+ // Get the ring pattern settings
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcPattern); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcPattern[i]);
+
+ iSel = ComboBox_GetCurSel(hwndCtl);
+ ASSERT(LB_ERR != iSel);
+
+ ComboBox_GetLBText(hwndCtl, iSel, &prp);
+
+ // Is this pattern already selected,
+ // and is it something other than none?
+ if (DRP_NONE != prp->dwPattern && prp->lParam)
+ {
+ // Yes; can't have duplicate values
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(IDS_ERR_DUP_PATTERN),
+ MAKEINTRESOURCE(IDS_CAP_RING),
+ NULL,
+ MB_ERROR);
+
+ // Set the focus on the offending control
+ PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)hwndCtl, (LPARAM)TRUE);
+ return FALSE;
+ }
+ prp->lParam = TRUE;
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+
+Returns: TRUE if validation succeeded
+ FALSE if not
+
+Cond: --
+*/
+BOOL PRIVATE Ring_OnApply(
+ PRING this)
+ {
+ BOOL bRet;
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ LPDWORD lpdw;
+ int i;
+ int iSel;
+ PVOICEFEATURES pvs = &this->pmi->pglobal->vs;
+ PRINGPAT prp;
+
+ bRet = Ring_ValidateSettings(this);
+
+ // Are the user's settings valid?
+ if (bRet)
+ {
+ // Yes
+ if (Button_GetCheck(GetDlgItem(hwnd, IDC_RING_CHECK)))
+ {
+ SetFlag(pvs->dwFlags, VSF_DIST_RING);
+ }
+ else
+ {
+ ClearFlag(pvs->dwFlags, VSF_DIST_RING);
+ }
+
+
+ // Get the ring pattern settings
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcPattern); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcPattern[i]);
+ lpdw = &pvs->DistRing[i].dwPattern;
+
+ iSel = ComboBox_GetCurSel(hwndCtl);
+ ASSERT(LB_ERR != iSel);
+
+ ComboBox_GetLBText(hwndCtl, iSel, &prp);
+
+ *lpdw = prp->dwPattern;
+ }
+
+ // Get the type of call settings
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcTypeOfCalls); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcTypeOfCalls[i]);
+ lpdw = &pvs->DistRing[i].dwMediaType;
+
+ iSel = ComboBox_GetCurSel(hwndCtl);
+ ASSERT(LB_ERR != iSel);
+
+ *lpdw = ComboBox_GetItemData(hwndCtl, iSel);
+ }
+
+
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE Ring_OnNotify(
+ PRING this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ lRet = Ring_OnApply(this) ? PSNRET_NOERROR : PSNRET_INVALID;
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DESTROY handler
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_OnDestroy(
+ PRING this)
+ {
+ if (this->hdcStrip)
+ DeleteDC(this->hdcStrip);
+
+ if (this->hbmStrip)
+ DeleteObject(this->hbmStrip);
+
+ if (this->hfont)
+ DeleteFont(this->hfont);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_MEASUREITEM handler
+Returns: --
+
+Cond: !!! WM_MEASUREITEM is received before WM_INITDIALOG !!!
+
+ The contents of 'this' will be uninitialized.
+*/
+void PRIVATE Ring_OnMeasureItem(
+ PRING this,
+ LPMEASUREITEMSTRUCT lpmis)
+ {
+ HWND hwnd = this->hdlg;
+ HDC hdc;
+
+ ASSERT(ODT_COMBOBOX == lpmis->CtlType);
+
+ hdc = GetDC(hwnd);
+ if (hdc)
+ {
+ TEXTMETRIC tm;
+
+ GetTextMetrics(hdc, &tm);
+ lpmis->itemHeight = max(tm.tmHeight, CY_PATTERN);
+
+ ReleaseDC(hwnd, hdc);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DRAWITEM handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_OnDrawCBItem(
+ PRING this,
+ const DRAWITEMSTRUCT FAR * lpcdis)
+ {
+ HWND hwnd = this->hdlg;
+ PRINGPAT prp = (PRINGPAT)lpcdis->itemData;
+
+ ASSERT(ODT_COMBOBOX == lpcdis->CtlType);
+ ASSERT(prp);
+
+ if (prp)
+ {
+ HDC hdc = lpcdis->hDC;
+ RECT rc = lpcdis->rcItem;
+ RECT rcFrame;
+ POINT ptSav;
+ int x;
+ int y;
+ int nBkMode;
+ COLORREF crText;
+ COLORREF crBk;
+ COLORREF crTextSav;
+ COLORREF crBkSav;
+
+ ASSERT(hdc);
+
+ SetViewportOrgEx(hdc, rc.left, rc.top, &ptSav);
+
+ rcFrame.top = 0;
+ rcFrame.left = 0;
+ rcFrame.bottom = rc.bottom - rc.top;
+ rcFrame.right = rc.right - rc.left;
+
+ // Set the colors
+
+ nBkMode = SetBkMode(hdc, TRANSPARENT);
+
+ TextAndBkCr(lpcdis, &crText, &crBk);
+ crTextSav = SetTextColor(hdc, crText);
+ crBkSav = SetBkColor(hdc, crBk);
+
+ // Do we need to redraw everything?
+ if (IsFlagSet(lpcdis->itemAction, ODA_DRAWENTIRE) ||
+ IsFlagSet(lpcdis->itemAction, ODA_SELECT))
+ {
+ // Yes
+ TCHAR sz[MAXSHORTLEN];
+ LPTSTR psz = sz;
+ int cch;
+ HFONT hfontSav;
+
+ // Show bitmap or text?
+ if (DRP_NONE == prp->dwPattern)
+ {
+ // Text
+ hfontSav = SelectFont(hdc, this->hfont);
+ SzFromIDS(g_hinst, IDS_AUTOMATIC, sz, SIZECHARS(sz));
+ cch = lstrlen(sz);
+ }
+ else
+ {
+ // Bitmap
+ hfontSav = NULL;
+ *psz = 0;
+ cch = 0;
+ }
+
+ ASSERT(rc.right - rc.left >= CX_PATTERN);
+ ASSERT(rc.bottom - rc.top >= CY_PATTERN);
+
+ x = (rc.right - rc.left - CX_PATTERN) / 2;
+ y = (rc.bottom - rc.top - CY_PATTERN) / 2;
+
+ // Fill background (with optional text)
+ ExtTextOut(hdc, 2, 2, ETO_OPAQUE, &rcFrame, psz, cch, NULL);
+
+ if (DRP_NONE != prp->dwPattern)
+ {
+ // Draw bitmap
+ BitBlt(hdc, x, y, CX_PATTERN, CY_PATTERN,
+ this->hdcStrip, ((int)prp->dwPattern - 1) * CX_PATTERN, 0,
+ SRCCOPY);
+ }
+
+ if (hfontSav)
+ SelectFont(hdc, hfontSav);
+ }
+
+ // Draw the caret?
+ if (IsFlagSet(lpcdis->itemAction, ODA_FOCUS) ||
+ IsFlagSet(lpcdis->itemState, ODS_FOCUS))
+ {
+ // Yes
+ DrawFocusRect(hdc, &rcFrame);
+ }
+
+ // Clean up
+ SetTextColor(hdc, crTextSav);
+ SetBkColor(hdc, crBkSav);
+ SetBkMode(hdc, nBkMode);
+ SetViewportOrgEx(hdc, ptSav.x, ptSav.y, NULL);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DRAWITEM handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_OnDrawStaticItem(
+ PRING this,
+ const DRAWITEMSTRUCT FAR * lpcdis)
+ {
+ HWND hwnd = this->hdlg;
+ HDC hdc = lpcdis->hDC;
+ RECT rc = lpcdis->rcItem;
+ int x;
+ int y;
+ int nBkMode;
+ COLORREF crText;
+ COLORREF crBk;
+ COLORREF crTextSav;
+ COLORREF crBkSav;
+
+ ASSERT(ODT_STATIC == lpcdis->CtlType);
+ ASSERT(hdc);
+
+ // Set the colors
+
+ nBkMode = SetBkMode(hdc, TRANSPARENT);
+
+ TextAndBkCr(lpcdis, &crText, &crBk);
+ crTextSav = SetTextColor(hdc, crText);
+ crBkSav = SetBkColor(hdc, crBk);
+
+ ASSERT(rc.right - rc.left >= CX_PATTERN);
+ ASSERT(rc.bottom - rc.top >= CY_PATTERN);
+
+ x = (rc.right - rc.left - CX_PATTERN) / 2;
+ y = (rc.bottom - rc.top - CY_PATTERN) / 2;
+
+ // Fill background (with optional text)
+ ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &rc, TEXT(""), 0, NULL);
+
+ // Draw bitmap
+ BitBlt(hdc, x, y, CX_PATTERN, CY_PATTERN,
+ this->hdcStrip, (int)(DRP_LONG - 1) * CX_PATTERN, 0,
+ SRCCOPY);
+
+ // Clean up
+ SetTextColor(hdc, crTextSav);
+ SetBkColor(hdc, crBkSav);
+ SetBkMode(hdc, nBkMode);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DRAWITEM handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Ring_OnDrawItem(
+ PRING this,
+ const DRAWITEMSTRUCT FAR * lpcdis)
+ {
+ switch (lpcdis->CtlType)
+ {
+ case ODT_COMBOBOX:
+ Ring_OnDrawCBItem(this, lpcdis);
+ break;
+
+ case ODT_STATIC:
+ Ring_OnDrawStaticItem(this, lpcdis);
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DELETEITEM handler
+Returns: --
+
+Cond: !!! WM_DELETEITEM is received after WM_DESTROY !!!
+
+*/
+void Ring_OnDeleteItem(
+ PRING this,
+ const DELETEITEMSTRUCT FAR * lpcdis)
+ {
+ PRINGPAT prp = (PRINGPAT)lpcdis->itemData;
+
+ ASSERT(NULL == this); // this will be NULL
+
+ ASSERT(ODT_COMBOBOX == lpcdis->CtlType);
+ ASSERT(prp);
+ }
+
+
+static BOOL s_bRingRecurse = FALSE;
+
+LRESULT INLINE Ring_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bRingRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT Ring_DlgProc(
+ PRING this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#ifdef CS_HELP
+ // UE used the control IDs as help IDs. To prevent mix-ups in
+ // the future (ie, when the control IDs change), here are the
+ // help IDs.
+ #define IDH_UNI_RING_SERVICES 1069
+ #define IDH_UNI_RING_LBL_ADDR_PRI 1070
+ #define IDH_UNI_RING_ADDR_PRI 1073
+ #define IDH_UNI_RING_TYPE_ADDR_PRI 1082
+ #define IDH_UNI_RING_LBL_ADDR1 1071
+ #define IDH_UNI_RING_ADDR1 1074
+ #define IDH_UNI_RING_TYPE_ADDR1 1083
+ #define IDH_UNI_RING_LBL_ADDR2 1072
+ #define IDH_UNI_RING_ADDR2 1075
+ #define IDH_UNI_RING_TYPE_ADDR2 1084
+ #define IDH_UNI_RING_LBL_ADDR3 1076
+ #define IDH_UNI_RING_ADDR3 1077
+ #define IDH_UNI_RING_TYPE_ADDR3 1085
+ #define IDH_UNI_RING_LBL_PRI_CALLERS 1078
+ #define IDH_UNI_RING_PRI_CALLERS 1079
+ #define IDH_UNI_RING_TYPE_PRI_CALLERS 1086
+ #define IDH_UNI_RING_LBL_CALLBACK 1080
+ #define IDH_UNI_RING_CALLBACK 1081
+ #define IDH_UNI_RING_TYPE_CALLBACK 1087
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_RING_CHECK, IDH_UNI_RING_SERVICES,
+ IDC_LBL_ADDR_PRI, IDH_UNI_RING_LBL_ADDR_PRI,
+ IDC_ADDR_PRI, IDH_UNI_RING_ADDR_PRI,
+ IDC_TYPE_ADDR_PRI, IDH_UNI_RING_TYPE_ADDR_PRI,
+ IDC_LBL_ADDR1, IDH_UNI_RING_LBL_ADDR1,
+ IDC_ADDR1, IDH_UNI_RING_ADDR1,
+ IDC_TYPE_ADDR1, IDH_UNI_RING_TYPE_ADDR1,
+ IDC_LBL_ADDR2, IDH_UNI_RING_LBL_ADDR2,
+ IDC_ADDR2, IDH_UNI_RING_ADDR2,
+ IDC_TYPE_ADDR2, IDH_UNI_RING_TYPE_ADDR2,
+ IDC_LBL_ADDR3, IDH_UNI_RING_LBL_ADDR3,
+ IDC_ADDR3, IDH_UNI_RING_ADDR3,
+ IDC_TYPE_ADDR3, IDH_UNI_RING_TYPE_ADDR3,
+ IDC_LBL_PRI_CALLERS, IDH_UNI_RING_LBL_PRI_CALLERS,
+ IDC_PRI_CALLERS, IDH_UNI_RING_PRI_CALLERS,
+ IDC_TYPE_PRI_CALLERS, IDH_UNI_RING_TYPE_PRI_CALLERS,
+ IDC_LBL_CALLBACK, IDH_UNI_RING_LBL_CALLBACK,
+ IDC_CALLBACK, IDH_UNI_RING_CALLBACK,
+ IDC_TYPE_CALLBACK, IDH_UNI_RING_TYPE_CALLBACK,
+ 0, 0 };
+#pragma data_seg()
+#endif
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, Ring_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, Ring_OnCommand);
+ HANDLE_MSG(this, WM_NOTIFY, Ring_OnNotify);
+ HANDLE_MSG(this, WM_DESTROY, Ring_OnDestroy);
+
+ HANDLE_MSG(this, WM_MEASUREITEM, Ring_OnMeasureItem);
+ HANDLE_MSG(this, WM_DRAWITEM, Ring_OnDrawItem);
+ HANDLE_MSG(this, WM_DELETEITEM, Ring_OnDeleteItem);
+
+#ifdef CS_HELP
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szUnimdmHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szUnimdmHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+#endif
+
+ default:
+ return Ring_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK Ring_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PRING this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bRingRecurse)
+ {
+ s_bRingRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = Ring_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ // (WM_SETFONT is the first message received by dialogs)
+ if (WM_SETFONT == message)
+ {
+ this = (PRING)LocalAlloc(LPTR, sizeof(RING));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_SETTINGS),
+ MAKEINTRESOURCE(IDS_CAP_RING),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)Ring_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ Ring_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)Ring_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ Ring_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ Ring_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, Ring_DlgProc(this, message, wParam, lParam));
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Cheap ring dialog code
+//-----------------------------------------------------------------------------------
+
+#define CheapRing_GetPtr(hwnd) (PRING)GetWindowLong(hwnd, DWL_USER)
+#define CheapRing_SetPtr(hwnd, lp) (PRING)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+/*----------------------------------------------------------
+Purpose: Initialize the specified Type of Call combobox.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE CheapRing_InitTypeOfCall(
+ PRING this,
+ HWND hwndCB,
+ DWORD dwType)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ static const struct
+ {
+ UINT ids;
+ DWORD dwType; // DRT_*
+ } s_rgTypes[] =
+ {
+ { IDS_UNSPECIFIED, DRT_UNSPECIFIED },
+ { IDS_DATA, DRT_DATA },
+ { IDS_FAX, DRT_FAX },
+ { IDS_VOICE, DRT_VOICE },
+ };
+#pragma data_seg()
+
+ int i;
+ int iSel = 0;
+ int n;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgTypes); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgTypes[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgTypes[i].dwType);
+
+ // Keep our eyes peeled for the selected type
+ if (dwType == s_rgTypes[i].dwType)
+ {
+ iSel = n;
+ }
+ }
+
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Enable/disable all the controls
+
+Returns: --
+Cond: --
+*/
+void PRIVATE CheapRing_EnableControls(
+ PRING this,
+ BOOL bEnable)
+ {
+ HWND hwnd = this->hdlg;
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_RING1), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_RING1), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_RING2), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_RING2), bEnable);
+
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_RING3), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_TYPE_RING3), bEnable);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE CheapRing_OnInitDialog(
+ PRING this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ LPDWORD lpdw;
+ BOOL bEnable;
+ int i;
+ PVOICEFEATURES pvs;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pmi = (LPMODEMINFO)lppsp->lParam;
+ pvs = &this->pmi->pglobal->vs;
+
+ // Enable/disable controls
+
+ bEnable = IsFlagSet(this->pmi->pglobal->vs.dwFlags, VSF_DIST_RING);
+
+ Button_SetCheck(GetDlgItem(hwnd, IDC_RING_CHECK), bEnable);
+ CheapRing_EnableControls(this, bEnable);
+
+ // Initialize controls
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcTypeOfCheapCalls); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcTypeOfCheapCalls[i]);
+ lpdw = &pvs->DistRing[i].dwMediaType;
+
+ CheapRing_InitTypeOfCall(this, hwndCtl, *lpdw);
+ }
+
+ return TRUE; // default initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE CheapRing_OnCommand(
+ PRING this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ BOOL bCheck;
+
+ switch (id)
+ {
+ case IDC_RING_CHECK:
+ bCheck = Button_GetCheck(hwndCtl);
+ CheapRing_EnableControls(this, bCheck);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+
+Returns: TRUE if validation succeeded
+ FALSE if not
+
+Cond: --
+*/
+BOOL PRIVATE CheapRing_OnApply(
+ PRING this)
+ {
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ LPDWORD lpdw;
+ int i;
+ int iSel;
+ PVOICEFEATURES pvs = &this->pmi->pglobal->vs;
+
+ if (Button_GetCheck(GetDlgItem(hwnd, IDC_RING_CHECK)))
+ {
+ SetFlag(pvs->dwFlags, VSF_DIST_RING);
+ }
+ else
+ {
+ ClearFlag(pvs->dwFlags, VSF_DIST_RING);
+ }
+
+
+ // Get the ring pattern settings
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgdwCheapPatterns); i++)
+ {
+ pvs->DistRing[i].dwPattern = c_rgdwCheapPatterns[i];
+ }
+
+ // Get the type of call settings
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgidcTypeOfCheapCalls); i++)
+ {
+ hwndCtl = GetDlgItem(hwnd, c_rgidcTypeOfCheapCalls[i]);
+ lpdw = &pvs->DistRing[i].dwMediaType;
+
+ iSel = ComboBox_GetCurSel(hwndCtl);
+ ASSERT(LB_ERR != iSel);
+
+ *lpdw = ComboBox_GetItemData(hwndCtl, iSel);
+ }
+
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE CheapRing_OnNotify(
+ PRING this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ lRet = CheapRing_OnApply(this) ? PSNRET_NOERROR : PSNRET_INVALID;
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+static BOOL s_bCheapRingRecurse = FALSE;
+
+LRESULT INLINE CheapRing_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bCheapRingRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT CheapRing_DlgProc(
+ PRING this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#ifdef CS_HELP
+ // UE used the control IDs as help IDs. To prevent mix-ups in
+ // the future (ie, when the control IDs change), here are the
+ // help IDs.
+ #define IDH_UNI_RING_LBL_RING1 1088
+ #define IDH_UNI_RING_TYPE_RING1 1091
+ #define IDH_UNI_RING_LBL_RING2 1089
+ #define IDH_UNI_RING_TYPE_RING2 1092
+ #define IDH_UNI_RING_LBL_RING3 1090
+ #define IDH_UNI_RING_TYPE_RING3 1093
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_RING_CHECK, IDH_UNI_RING_SERVICES,
+ IDC_LBL_RING1, IDH_UNI_RING_LBL_RING1,
+ IDC_TYPE_RING1, IDH_UNI_RING_TYPE_RING1,
+ IDC_LBL_RING2, IDH_UNI_RING_LBL_RING2,
+ IDC_TYPE_RING2, IDH_UNI_RING_TYPE_RING2,
+ IDC_LBL_RING3, IDH_UNI_RING_LBL_RING3,
+ IDC_TYPE_RING3, IDH_UNI_RING_TYPE_RING3,
+ 0, 0 };
+#pragma data_seg()
+#endif
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, CheapRing_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, CheapRing_OnCommand);
+ HANDLE_MSG(this, WM_NOTIFY, CheapRing_OnNotify);
+
+
+#ifdef CS_HELP
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szUnimdmHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szUnimdmHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+#endif
+
+ default:
+ return CheapRing_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK CheapRing_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PRING this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bCheapRingRecurse)
+ {
+ s_bCheapRingRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = CheapRing_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ // (WM_SETFONT is the first message received by dialogs)
+ if (WM_SETFONT == message)
+ {
+ this = (PRING)LocalAlloc(LPTR, sizeof(RING));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_SETTINGS),
+ MAKEINTRESOURCE(IDS_CAP_RING),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)CheapRing_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ CheapRing_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)CheapRing_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ CheapRing_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ CheapRing_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, CheapRing_DlgProc(this, message, wParam, lParam));
+ }
+
+
+
+//-----------------------------------------------------------------------------------
+// DTMF edit box proc
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Handle WM_CHAR
+
+Returns: TRUE to let the characters by
+ FALSE to prohibit
+Cond: --
+*/
+BOOL PRIVATE DTMFEditProc_OnChar(
+ HWND hwnd,
+ UINT ch,
+ int cRepeat)
+ {
+ BOOL bRet;
+
+ // Is this a numerical digit,
+ // a backspace,
+ // or a valid DTMF digit?
+ if (IsCharAlphaNumeric((TCHAR)ch) && !IsCharAlpha((TCHAR)ch) ||
+ VK_BACK == LOBYTE(VkKeyScan((TCHAR)ch)) ||
+ 'A' == ch || 'B' == ch || 'C' == ch || 'D' == ch ||
+ '*' == ch || '#' == ch)
+ {
+ // Yes
+ bRet = TRUE;
+ }
+ else
+ {
+ // No
+ MessageBeep(MB_OK);
+ bRet = FALSE;
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Number proc. Only allow numbers to be entered into this edit box.
+
+Returns: varies
+Cond: --
+*/
+LRESULT CALLBACK DTMFEditProc(
+ HWND hwnd, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ WNDPROC pfn = (WNDPROC)GetWindowLong(hwnd, GWL_USERDATA);
+
+ // BUGBUG: doesn't handle paste correctly!
+
+ switch (message)
+ {
+ case WM_CHAR:
+ if (!DTMFEditProc_OnChar(hwnd, (UINT)wParam, LOWORD(lParam)))
+ return 1; // Don't process this character
+ break;
+ }
+
+ return CallWindowProc(pfn, hwnd, message, wParam, lParam);
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Call forwarding dialog code
+//-----------------------------------------------------------------------------------
+
+
+typedef struct tagCALLFWD
+ {
+ HWND hdlg; // dialog handle
+ LPMODEMINFO pmi; // modeminfo struct passed into dialog
+
+ } CALLFWD, FAR * PCALLFWD;
+
+
+#define CallFwd_GetPtr(hwnd) (PCALLFWD)GetWindowLong(hwnd, DWL_USER)
+#define CallFwd_SetPtr(hwnd, lp) (PCALLFWD)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+
+/*----------------------------------------------------------
+Purpose: Enable/disable all the controls
+
+Returns: --
+Cond: --
+*/
+void PRIVATE CallFwd_EnableControls(
+ PCALLFWD this,
+ BOOL bEnable)
+ {
+ HWND hwnd = this->hdlg;
+
+ EnableWindow(GetDlgItem(hwnd, IDC_FWD_ACT), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_ACT), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_FWD_DEACT), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_DEACT), bEnable);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE CallFwd_OnInitDialog(
+ PCALLFWD this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ BOOL bEnable;
+ PVOICEFEATURES pvs;
+ WNDPROC pfn;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pmi = (LPMODEMINFO)lppsp->lParam;
+ pvs = &this->pmi->pglobal->vs;
+
+ // Subclass the edit boxes that only accept DTMF digits
+ hwndCtl = GetDlgItem(hwnd, IDC_ACT);
+ pfn = SubclassWindow(hwndCtl, DTMFEditProc);
+ SetWindowLong(hwndCtl, GWL_USERDATA, (LONG)pfn);
+
+ hwndCtl = GetDlgItem(hwnd, IDC_DEACT);
+ pfn = SubclassWindow(hwndCtl, DTMFEditProc);
+ SetWindowLong(hwndCtl, GWL_USERDATA, (LONG)pfn);
+
+ // Enable/disable controls
+
+ bEnable = IsFlagSet(pvs->dwFlags, VSF_CALL_FWD);
+
+ Button_SetCheck(GetDlgItem(hwnd, IDC_FWD_CHECK), bEnable);
+ CallFwd_EnableControls(this, bEnable);
+
+ // Initialize controls
+
+ hwndCtl = GetDlgItem(hwnd, IDC_ACT);
+ Edit_SetText(hwndCtl, pvs->szActivationCode);
+ Edit_LimitText(hwndCtl, SIZECHARS(pvs->szActivationCode)-1);
+
+ hwndCtl = GetDlgItem(hwnd, IDC_DEACT);
+ Edit_SetText(hwndCtl, pvs->szDeactivationCode);
+ Edit_LimitText(hwndCtl, SIZECHARS(pvs->szDeactivationCode)-1);
+
+ return TRUE; // default initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE CallFwd_OnCommand(
+ PCALLFWD this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ BOOL bCheck;
+
+ switch (id)
+ {
+ case IDC_FWD_CHECK:
+ bCheck = Button_GetCheck(hwndCtl);
+ CallFwd_EnableControls(this, bCheck);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Validate the user's settings.
+
+ The call forwarding fields must be filled in if the
+ service is turned on.
+
+Returns: TRUE if valid
+
+Cond: --
+*/
+BOOL PRIVATE CallFwd_ValidateSettings(
+ PCALLFWD this)
+ {
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+
+ // Is the service turned on?
+ if (Button_GetCheck(GetDlgItem(hwnd, IDC_FWD_CHECK)))
+ {
+ // Yes; are the fields filled in?
+ hwndCtl = GetDlgItem(hwnd, IDC_ACT);
+ if (0 == Edit_GetTextLength(hwndCtl))
+ {
+ // No; this is naughty
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(IDS_ERR_NEED_VALUE),
+ MAKEINTRESOURCE(IDS_CAP_CALLFWD),
+ NULL,
+ MB_ERROR);
+
+ // Set the focus on the offending control
+ PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)hwndCtl, (LPARAM)TRUE);
+ return FALSE;
+ }
+
+
+ hwndCtl = GetDlgItem(hwnd, IDC_DEACT);
+ if (0 == Edit_GetTextLength(hwndCtl))
+ {
+ // No; this is naughty
+ MsgBox(g_hinst,
+ hwnd,
+ MAKEINTRESOURCE(IDS_ERR_NEED_VALUE),
+ MAKEINTRESOURCE(IDS_CAP_CALLFWD),
+ NULL,
+ MB_ERROR);
+
+ // Set the focus on the offending control
+ PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)hwndCtl, (LPARAM)TRUE);
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE CallFwd_OnApply(
+ PCALLFWD this)
+ {
+ BOOL bRet;
+ HWND hwnd = this->hdlg;
+ HWND hwndCtl;
+ PVOICEFEATURES pvs = &this->pmi->pglobal->vs;
+
+ bRet = CallFwd_ValidateSettings(this);
+
+ if (bRet)
+ {
+ if (Button_GetCheck(GetDlgItem(hwnd, IDC_FWD_CHECK)))
+ {
+ SetFlag(pvs->dwFlags, VSF_CALL_FWD);
+ }
+ else
+ {
+ ClearFlag(pvs->dwFlags, VSF_CALL_FWD);
+ }
+
+ hwndCtl = GetDlgItem(hwnd, IDC_ACT);
+ Edit_GetText(hwndCtl, pvs->szActivationCode, SIZECHARS(pvs->szActivationCode));
+
+ hwndCtl = GetDlgItem(hwnd, IDC_DEACT);
+ Edit_GetText(hwndCtl, pvs->szDeactivationCode, SIZECHARS(pvs->szDeactivationCode));
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE CallFwd_OnNotify(
+ PCALLFWD this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ lRet = CallFwd_OnApply(this) ? PSNRET_NOERROR : PSNRET_INVALID;
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+static BOOL s_bCallFwdRecurse = FALSE;
+
+LRESULT INLINE CallFwd_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bCallFwdRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT CallFwd_DlgProc(
+ PCALLFWD this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#ifdef CS_HELP
+ // UE used the control IDs as help IDs. To prevent mix-ups in
+ // the future (ie, when the control IDs change), here are the
+ // help IDs.
+ #define IDH_UNI_CALLFWD_SERVICES 1062
+ #define IDH_UNI_CALLFWD_FWD_ACT 1063
+ #define IDH_UNI_CALLFWD_ACT 1068
+ #define IDH_UNI_CALLFWD_FWD_DEACT 1064
+ #define IDH_UNI_CALLFWD_DEACT 1067
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_FWD_CHECK, IDH_UNI_CALLFWD_SERVICES,
+ IDC_FWD_ACT, IDH_UNI_CALLFWD_FWD_ACT,
+ IDC_ACT, IDH_UNI_CALLFWD_ACT,
+ IDC_FWD_DEACT, IDH_UNI_CALLFWD_FWD_DEACT,
+ IDC_DEACT, IDH_UNI_CALLFWD_DEACT,
+ 0, 0 };
+#pragma data_seg()
+#endif
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, CallFwd_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, CallFwd_OnCommand);
+ HANDLE_MSG(this, WM_NOTIFY, CallFwd_OnNotify);
+
+#ifdef CS_HELP
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szUnimdmHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szUnimdmHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+#endif
+
+ default:
+ return CallFwd_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK CallFwd_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PCALLFWD this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bCallFwdRecurse)
+ {
+ s_bCallFwdRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = CallFwd_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ if (message == WM_INITDIALOG)
+ {
+ this = (PCALLFWD)LocalAlloc(LPTR, sizeof(CALLFWD));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_SETTINGS),
+ MAKEINTRESOURCE(IDS_CAP_RING),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)CallFwd_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ CallFwd_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)CallFwd_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ CallFwd_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ CallFwd_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, CallFwd_DlgProc(this, message, wParam, lParam));
+ }
+
+
+
diff --git a/private/unimodem/modemui/sett.c b/private/unimodem/modemui/sett.c
new file mode 100644
index 000000000..0af389bc8
--- /dev/null
+++ b/private/unimodem/modemui/sett.c
@@ -0,0 +1,1147 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: sett.c
+//
+// This files contains the dialog code for the Modem Settings property page.
+//
+// History:
+// 1-14-94 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+///////////////////////////////////////////////////// INCLUDES
+
+#include "proj.h" // common headers
+
+#ifdef WIN95
+#include "..\..\..\..\win\core\inc\help.h"
+#endif
+
+///////////////////////////////////////////////////// CONTROLLING DEFINES
+
+///////////////////////////////////////////////////// TYPEDEFS
+
+// Command IDs for the parity listbox
+#define CMD_PARITY_EVEN 1
+#define CMD_PARITY_ODD 2
+#define CMD_PARITY_NONE 3
+#define CMD_PARITY_MARK 4
+#define CMD_PARITY_SPACE 5
+
+typedef UINT (WINAPI *FEFIFOFUMPROC)(HWND, LPCTSTR);
+
+typedef struct tagSETT
+ {
+ HWND hdlg; // dialog handle
+ HWND hwndDataBits;
+ HWND hwndParity;
+ HWND hwndStopBits;
+ HWND hwndWait;
+ HWND hwndDialTimerCH;
+ HWND hwndDialTimerED;
+ HWND hwndIdleTimerCH;
+ HWND hwndIdleTimerED;
+ HWND hwndConfigPB;
+
+ LPMODEMINFO pmi; // modeminfo struct passed into dialog
+
+ FEFIFOFUMPROC pfnFifoDlg;
+ HINSTANCE hinstSerialUI;
+
+ } SETT, FAR * PSETT;
+
+
+// This table is the generic port settings table
+// that is used to fill the various listboxes
+typedef struct _PortValues
+ {
+ union {
+ BYTE bytesize;
+ BYTE cmd;
+ BYTE stopbits;
+ };
+ int ids;
+ } PortValues, FAR * LPPORTVALUES;
+
+
+#pragma data_seg(DATASEG_READONLY)
+
+// This is the structure that is used to fill the data bits listbox
+static PortValues s_rgbytesize[] = {
+ { 4, IDS_BYTESIZE_4 },
+ { 5, IDS_BYTESIZE_5 },
+ { 6, IDS_BYTESIZE_6 },
+ { 7, IDS_BYTESIZE_7 },
+ { 8, IDS_BYTESIZE_8 },
+ };
+
+// This is the structure that is used to fill the parity listbox
+static PortValues s_rgparity[] = {
+ { CMD_PARITY_EVEN, IDS_PARITY_EVEN },
+ { CMD_PARITY_ODD, IDS_PARITY_ODD },
+ { CMD_PARITY_NONE, IDS_PARITY_NONE },
+ { CMD_PARITY_MARK, IDS_PARITY_MARK },
+ { CMD_PARITY_SPACE, IDS_PARITY_SPACE },
+ };
+
+// This is the structure that is used to fill the stopbits listbox
+static PortValues s_rgstopbits[] = {
+ { ONESTOPBIT, IDS_STOPBITS_1 },
+ { ONE5STOPBITS, IDS_STOPBITS_1_5 },
+ { TWOSTOPBITS, IDS_STOPBITS_2 },
+ };
+
+// This string must always be ANSI
+CHAR const FAR c_szFeFiFoFum[] = "FeFiFoFum";
+
+#pragma data_seg()
+
+
+#define Sett_GetPtr(hwnd) (PSETT)GetWindowLong(hwnd, DWL_USER)
+#define Sett_SetPtr(hwnd, lp) (PSETT)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+// These are default settings
+#define DEFAULT_BYTESIZE 8
+#define DEFAULT_PARITY CMD_PARITY_NONE
+#define DEFAULT_STOPBITS ONESTOPBIT
+
+#define DEF_TIMEOUT 60 // 60 seconds
+#define DEF_INACTIVITY_TIMEOUT 30 // 30 minutes
+#define SECONDS_PER_MINUTE 60 // 60 seconds in a minute
+
+
+//-----------------------------------------------------------------------------------
+// Number edit box proc
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Handle WM_CHAR
+
+Returns: TRUE to let the characters by
+ FALSE to prohibit
+Cond: --
+*/
+BOOL PRIVATE NumProc_OnChar(
+ HWND hwnd,
+ UINT ch,
+ int cRepeat)
+ {
+ BOOL bRet;
+
+ // Is this a number or a backspace?
+ if (IsCharAlphaNumeric((TCHAR)ch) && !IsCharAlpha((TCHAR)ch) ||
+ VK_BACK == LOBYTE(VkKeyScan((TCHAR)ch)))
+ {
+ // Yes
+ bRet = TRUE;
+ }
+ else
+ {
+ // No
+ MessageBeep(MB_OK);
+ bRet = FALSE;
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Number proc. Only allow numbers to be entered into this edit box.
+
+Returns: varies
+Cond: --
+*/
+LRESULT CALLBACK NumberProc(
+ HWND hwnd, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ WNDPROC pfn = (WNDPROC)GetWindowLong(hwnd, GWL_USERDATA);
+
+ // BUGBUG: doesn't handle paste correctly!
+
+ switch (message)
+ {
+ case WM_CHAR:
+ if (!NumProc_OnChar(hwnd, (UINT)wParam, LOWORD(lParam)))
+ return 1; // Don't process this character
+ break;
+ }
+
+ return CallWindowProc(pfn, hwnd, message, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sets an edit control to contain a string representing the
+ given numeric value.
+Returns: --
+Cond: --
+*/
+void PRIVATE Edit_SetValue(
+ HWND hwnd,
+ int nValue)
+ {
+ TCHAR sz[MAXSHORTLEN];
+
+ wsprintf(sz, TEXT("%d"), nValue);
+ Edit_SetText(hwnd, sz);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets a numeric value from an edit control. Supports hexadecimal.
+Returns: int
+Cond: --
+*/
+int PRIVATE Edit_GetValue(
+ HWND hwnd)
+ {
+ TCHAR sz[MAXSHORTLEN];
+ int cch;
+ int nVal;
+
+ cch = Edit_GetTextLength(hwnd);
+ ASSERT(ARRAYSIZE(sz) >= cch);
+
+ Edit_GetText(hwnd, sz, ARRAYSIZE(sz));
+ AnsiToInt(sz, &nVal);
+
+ return nVal;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Settings dialog code
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Sets the flow control related fields of one structure
+ given the other structure. The conversion direction
+ is dictated by the uFlags parameter.
+
+Returns: --
+Cond: --
+*/
+void PUBLIC ConvertFlowCtl(
+ WIN32DCB FAR * pdcb,
+ MODEMSETTINGS FAR * pms,
+ UINT uFlags) // One of CFC_ flags
+ {
+ LPDWORD pdw = &pms->dwPreferredModemOptions;
+
+ if (IsFlagSet(uFlags, CFC_DCBTOMS))
+ {
+ // Convert from DCB values to MODEMSETTINGS values
+
+ // Is this hardware flow control?
+ if (FALSE == pdcb->fOutX &&
+ FALSE == pdcb->fInX &&
+ TRUE == pdcb->fOutxCtsFlow)
+ {
+ // Yes
+ ClearFlag(*pdw, MDM_FLOWCONTROL_SOFT);
+
+ if (IsFlagSet(uFlags, CFC_HW_CAPABLE))
+ SetFlag(*pdw, MDM_FLOWCONTROL_HARD);
+ else
+ ClearFlag(*pdw, MDM_FLOWCONTROL_HARD);
+ }
+
+ // Is this software flow control?
+ else if (TRUE == pdcb->fOutX &&
+ TRUE == pdcb->fInX &&
+ FALSE == pdcb->fOutxCtsFlow)
+ {
+ // Yes
+ ClearFlag(*pdw, MDM_FLOWCONTROL_HARD);
+
+ if (IsFlagSet(uFlags, CFC_SW_CAPABLE))
+ SetFlag(*pdw, MDM_FLOWCONTROL_SOFT);
+ else
+ ClearFlag(*pdw, MDM_FLOWCONTROL_SOFT);
+ }
+
+ // Is the flow control disabled?
+ else if (FALSE == pdcb->fOutX &&
+ FALSE == pdcb->fInX &&
+ FALSE == pdcb->fOutxCtsFlow)
+ {
+ // Yes
+ ClearFlag(*pdw, MDM_FLOWCONTROL_HARD);
+ ClearFlag(*pdw, MDM_FLOWCONTROL_SOFT);
+ }
+ else
+ {
+ ASSERT(0); // Should never get here
+ }
+ }
+ else if (IsFlagSet(uFlags, CFC_MSTODCB))
+ {
+ DWORD dw = *pdw;
+
+ // Convert from MODEMSETTINGS values to DCB values
+
+ // Is this hardware flow control?
+ if (IsFlagSet(dw, MDM_FLOWCONTROL_HARD) &&
+ IsFlagClear(dw, MDM_FLOWCONTROL_SOFT))
+ {
+ // Yes
+ pdcb->fOutX = FALSE;
+ pdcb->fInX = FALSE;
+ pdcb->fOutxCtsFlow = TRUE;
+ pdcb->fRtsControl = RTS_CONTROL_HANDSHAKE;
+ }
+
+ // Is this software flow control?
+ else if (IsFlagClear(dw, MDM_FLOWCONTROL_HARD) &&
+ IsFlagSet(dw, MDM_FLOWCONTROL_SOFT))
+ {
+ // Yes
+ pdcb->fOutX = TRUE;
+ pdcb->fInX = TRUE;
+ pdcb->fOutxCtsFlow = FALSE;
+ pdcb->fRtsControl = RTS_CONTROL_DISABLE;
+ }
+
+ // Is the flow control disabled?
+ else if (IsFlagClear(dw, MDM_FLOWCONTROL_HARD) &&
+ IsFlagClear(dw, MDM_FLOWCONTROL_SOFT))
+ {
+ // Yes
+ pdcb->fOutX = FALSE;
+ pdcb->fInX = FALSE;
+ pdcb->fOutxCtsFlow = FALSE;
+ pdcb->fRtsControl = RTS_CONTROL_DISABLE;
+ }
+ else
+ {
+ ASSERT(0); // Should never get here
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the bytesize combobox with the possible byte sizes.
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_FillDataBits(
+ PSETT this)
+ {
+ HWND hwndCB = this->hwndDataBits;
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgbytesize); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgbytesize[i].ids, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgbytesize[i].bytesize);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_BYTESIZE == s_rgbytesize[i].bytesize)
+ {
+ iDef = n;
+ }
+ if (pdcb->ByteSize == s_rgbytesize[i].bytesize)
+ {
+ iMatch = n;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the parity combobox with the possible settings.
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_FillParity(
+ PSETT this)
+ {
+ HWND hwndCB = this->hwndParity;
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgparity); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgparity[i].ids, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgparity[i].cmd);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_PARITY == s_rgparity[i].cmd)
+ {
+ iDef = n;
+ }
+ switch (s_rgparity[i].cmd)
+ {
+ case CMD_PARITY_EVEN:
+ if (EVENPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_ODD:
+ if (ODDPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_NONE:
+ if (NOPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_MARK:
+ if (MARKPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_SPACE:
+ if (SPACEPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the stopbits combobox with the possible settings.
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_FillStopBits(
+ PSETT this)
+ {
+ HWND hwndCB = this->hwndStopBits;
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAY_ELEMENTS(s_rgstopbits); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgstopbits[i].ids, sz, ARRAYSIZE(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgstopbits[i].stopbits);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_STOPBITS == s_rgstopbits[i].stopbits)
+ {
+ iDef = n;
+ }
+ if (pdcb->StopBits == s_rgstopbits[i].stopbits)
+ {
+ iMatch = n;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Set the timeout controls
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_SetTimeouts(
+ PSETT this)
+ {
+ int nVal;
+
+ // A note on the timeouts:
+ //
+ // For the dial timeout, the valid range is [1-255]. If the dial
+ // timeout checkbox is unchecked, we set the timeout value to 255.
+ //
+ // For the disconnect timeout, the valid range is [0-255]. If the
+ // dial timeout checkbox is unchecked, we set the timeout value
+ // to 0.
+
+ // Is the dial timeout properties disabled?
+ if (0 == this->pmi->devcaps.dwCallSetupFailTimer)
+ {
+ // Yes; disable the box and edit
+ Button_Enable(this->hwndDialTimerCH, FALSE);
+ Edit_Enable(this->hwndDialTimerED, FALSE);
+ }
+ // No; Is the dial timeout set to the maximum?
+ else if (this->pmi->ms.dwCallSetupFailTimer == this->pmi->devcaps.dwCallSetupFailTimer)
+ {
+ // Yes; leave box unchecked and disable edit
+ Button_SetCheck(this->hwndDialTimerCH, FALSE);
+
+ nVal = min(DEF_TIMEOUT,
+ LOWORD(this->pmi->devcaps.dwCallSetupFailTimer));
+ Edit_SetValue(this->hwndDialTimerED, nVal);
+ Edit_Enable(this->hwndDialTimerED, FALSE);
+ }
+ else
+ {
+ // No; check the box and set the time value
+ Button_SetCheck(this->hwndDialTimerCH, TRUE);
+
+ nVal = min(LOWORD(this->pmi->ms.dwCallSetupFailTimer),
+ LOWORD(this->pmi->devcaps.dwCallSetupFailTimer));
+ Edit_SetValue(this->hwndDialTimerED, nVal);
+ }
+
+ // Is the disconnect timeout properties disabled?
+ if (0 == this->pmi->devcaps.dwInactivityTimeout)
+ {
+ // Yes; disable the box and edit
+ Button_Enable(this->hwndIdleTimerCH, FALSE);
+ Edit_Enable(this->hwndIdleTimerED, FALSE);
+ }
+ // No; Is the disconnect timeout set to 0?
+ else if (0 == this->pmi->ms.dwInactivityTimeout)
+ {
+ // Yes; leave box unchecked and disable edit
+ Button_SetCheck(this->hwndIdleTimerCH, FALSE);
+
+ Edit_SetValue(this->hwndIdleTimerED, DEF_INACTIVITY_TIMEOUT);
+ Edit_Enable(this->hwndIdleTimerED, FALSE);
+ }
+ else
+ {
+ // No; check the box and set the time value
+ Button_SetCheck(this->hwndIdleTimerCH, TRUE);
+ Edit_SetValue(this->hwndIdleTimerED, LOWORD(this->pmi->ms.dwInactivityTimeout)/SECONDS_PER_MINUTE);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE Sett_OnInitDialog(
+ PSETT this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hwnd = this->hdlg;
+ DWORD dwOptions;
+ DWORD dwCapOptions;
+ WNDPROC pfn;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pmi = (LPMODEMINFO)lppsp->lParam;
+
+ // Save away the window handles
+ this->hwndDataBits = GetDlgItem(hwnd, IDC_DATABITS);
+ this->hwndParity = GetDlgItem(hwnd, IDC_PARITY);
+ this->hwndStopBits = GetDlgItem(hwnd, IDC_STOPBITS);
+ this->hwndWait = GetDlgItem(hwnd, IDC_WAITFORDIALTONE);
+ this->hwndDialTimerCH = GetDlgItem(hwnd, IDC_CH_DIALTIMER);
+ this->hwndDialTimerED = GetDlgItem(hwnd, IDC_ED_DIALTIMER);
+ this->hwndIdleTimerCH = GetDlgItem(hwnd, IDC_CH_IDLETIMER);
+ this->hwndIdleTimerED = GetDlgItem(hwnd, IDC_ED_IDLETIMER);
+ this->hwndConfigPB = GetDlgItem(hwnd, IDC_PB_CONFIGURE);
+
+ // Subclass the edit boxes that only handle numbers
+ pfn = SubclassWindow(this->hwndDialTimerED, NumberProc);
+ SetWindowLong(this->hwndDialTimerED, GWL_USERDATA, (LONG)pfn);
+
+ pfn = SubclassWindow(this->hwndIdleTimerED, NumberProc);
+ SetWindowLong(this->hwndIdleTimerED, GWL_USERDATA, (LONG)pfn);
+
+ Edit_LimitText(this->hwndDialTimerED, 3);
+ Edit_LimitText(this->hwndIdleTimerED, 3);
+
+ // Set the call preferences
+ dwCapOptions = this->pmi->devcaps.dwModemOptions;
+ dwOptions = this->pmi->ms.dwPreferredModemOptions;
+ Button_Enable(this->hwndWait, IsFlagSet(dwCapOptions, MDM_BLIND_DIAL));
+
+ Button_SetCheck(this->hwndWait, IsFlagSet(dwCapOptions, MDM_BLIND_DIAL) &&
+ IsFlagClear(dwOptions, MDM_BLIND_DIAL));
+
+ Sett_SetTimeouts(this);
+
+ // Is this a parallel port?
+ if (DT_PARALLEL_PORT == this->pmi->nDeviceType)
+ {
+ // Yes; hide the DCB controls
+ ShowWindow(GetDlgItem(hwnd, IDC_CONN_PREF), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_CONN_PREF), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_LBL_DATABITS), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_DATABITS), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_DATABITS), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_DATABITS), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_LBL_PARITY), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_PARITY), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_PARITY), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_PARITY), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_LBL_STOPBITS), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_LBL_STOPBITS), FALSE);
+
+ ShowWindow(GetDlgItem(hwnd, IDC_STOPBITS), SW_HIDE);
+ EnableWindow(GetDlgItem(hwnd, IDC_STOPBITS), FALSE);
+ }
+ else
+ {
+ // No; initialize the DCB controls
+ Sett_FillDataBits(this);
+ Sett_FillParity(this);
+ Sett_FillStopBits(this);
+ }
+
+ // Is the modem using a custom port?
+ if (IsFlagSet(this->pmi->uFlags, MIF_PORT_IS_CUSTOM))
+ {
+ // Yes
+ this->pfnFifoDlg = NULL;
+ this->hinstSerialUI = NULL;
+ }
+
+ // Is the modem using a parallel port?
+ else if (DT_PARALLEL_PORT == this->pmi->nDeviceType ||
+ DT_PARALLEL_MODEM == this->pmi->nDeviceType)
+ {
+ // Yes; don't show the FIFO settings button
+ HWND hwndBtn = GetDlgItem(hwnd, IDC_PB_CONFIGURE);
+
+ Button_Enable(hwndBtn, FALSE);
+ ShowWindow(hwndBtn, SW_HIDE);
+
+ this->pfnFifoDlg = NULL;
+ this->hinstSerialUI = NULL;
+ }
+
+ else
+ {
+ // Try to setup the FIFO settings button
+
+ this->hinstSerialUI = LoadLibrary(c_szSerialUI);
+ if (ISVALIDHINSTANCE(this->hinstSerialUI))
+ {
+ this->pfnFifoDlg = (FEFIFOFUMPROC)GetProcAddress(this->hinstSerialUI, c_szFeFiFoFum);
+ }
+ else
+ {
+ this->pfnFifoDlg = NULL;
+ this->hinstSerialUI = NULL;
+ }
+
+ // Did getting the private entry point fail?
+ if (!this->pfnFifoDlg)
+ {
+ // Yes; hide the Port Settings button
+ HWND hwndBtn = GetDlgItem(hwnd, IDC_PB_CONFIGURE);
+
+ Button_Enable(hwndBtn, FALSE);
+ ShowWindow(hwndBtn, SW_HIDE);
+ }
+ }
+
+ return TRUE; // default initial focus
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Saves the connection preferences to the modeminfo
+ struct.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_SaveConnPrefs(
+ PSETT this)
+ {
+ int iSel;
+ BYTE cmd;
+ WIN32DCB FAR * pdcb = &this->pmi->dcb;
+
+ // Determine new byte size
+ iSel = ComboBox_GetCurSel(this->hwndDataBits);
+ pdcb->ByteSize = (BYTE)ComboBox_GetItemData(this->hwndDataBits, iSel);
+
+
+ // Determine new parity settings
+ iSel = ComboBox_GetCurSel(this->hwndParity);
+ cmd = (BYTE)ComboBox_GetItemData(this->hwndParity, iSel);
+ switch (cmd)
+ {
+ case CMD_PARITY_EVEN:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = EVENPARITY;
+ break;
+
+ case CMD_PARITY_ODD:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = ODDPARITY;
+ break;
+
+ case CMD_PARITY_NONE:
+ pdcb->fParity = FALSE;
+ pdcb->Parity = NOPARITY;
+ break;
+
+ case CMD_PARITY_MARK:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = MARKPARITY;
+ break;
+
+ case CMD_PARITY_SPACE:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = SPACEPARITY;
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+
+ // Determine new stopbits setting
+ iSel = ComboBox_GetCurSel(this->hwndStopBits);
+ pdcb->StopBits = (BYTE)ComboBox_GetItemData(this->hwndStopBits, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Invokes the settings property sheet for the port
+ that this modem is connected to.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_ConfigPort(
+ PSETT this)
+ {
+ COMMCONFIG ccDummy;
+ DWORD dwSize;
+ DWORD dwSubType;
+
+ if (DT_PARALLEL_MODEM == this->pmi->nDeviceType ||
+ DT_PARALLEL_PORT == this->pmi->nDeviceType)
+ {
+ dwSubType = PST_PARALLELPORT;
+ }
+ else
+ {
+ dwSubType = PST_RS232;
+
+ // Make sure the modeminfo DCB has the most current control settings
+ Sett_SaveConnPrefs(this);
+ }
+
+ // Bring up the config dialog for the port that is currently selected
+ dwSize = 0;
+ ccDummy.dwProviderSubType = dwSubType;
+ GetDefaultCommConfig(this->pmi->szPortName, &ccDummy, &dwSize);
+
+ ASSERT(0 < dwSize);
+
+ // Make this check to protect us from bozo ConfigDialog providers
+ if (0 < dwSize)
+ {
+ LPCOMMCONFIG pcc = (LPCOMMCONFIG)LocalAlloc(LPTR, (UINT)dwSize);
+ if (pcc)
+ {
+ pcc->dwProviderSubType = dwSubType;
+
+ if (GetDefaultCommConfig(this->pmi->szPortName, pcc, &dwSize))
+ {
+ // Use the modem's DCB values
+ BltByte(&pcc->dcb, &this->pmi->dcb, sizeof(WIN32DCB));
+
+ // Invoke config dialog for port
+ if (CommConfigDialog(this->pmi->szPortName, this->hdlg, pcc))
+ {
+ UINT uFlags = CFC_DCBTOMS;
+
+ // Set the global default settings of this port
+ SetDefaultCommConfig(this->pmi->szPortName, pcc, dwSize);
+
+ // Copy possibly-altered DCB back to the modem's DCB
+ BltByte(&this->pmi->dcb, &pcc->dcb, sizeof(WIN32DCB));
+
+ // Make sure related fields in the modemsettings struct
+ // are in-sync with the DCB values
+ if (IsFlagSet(this->pmi->devcaps.dwModemOptions, MDM_FLOWCONTROL_HARD))
+ {
+ SetFlag(uFlags, CFC_HW_CAPABLE);
+ }
+ if (IsFlagSet(this->pmi->devcaps.dwModemOptions, MDM_FLOWCONTROL_SOFT))
+ {
+ SetFlag(uFlags, CFC_SW_CAPABLE);
+ }
+ ConvertFlowCtl(&this->pmi->dcb, &this->pmi->ms, uFlags);
+
+ // Reset the connection preference controls
+ ComboBox_ResetContent(this->hwndDataBits);
+ ComboBox_ResetContent(this->hwndParity);
+ ComboBox_ResetContent(this->hwndStopBits);
+
+ Sett_FillDataBits(this);
+ Sett_FillParity(this);
+ Sett_FillStopBits(this);
+ }
+ }
+ LocalFree(LOCALOF(pcc));
+ }
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_OnCommand(
+ PSETT this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ HWND hwnd = this->hdlg;
+ BOOL bCheck;
+
+ switch (id)
+ {
+ case IDC_CH_DIALTIMER:
+ bCheck = Button_GetCheck(hwndCtl);
+ Edit_Enable(this->hwndDialTimerED, bCheck);
+ break;
+
+ case IDC_CH_IDLETIMER:
+ bCheck = Button_GetCheck(hwndCtl);
+ Edit_Enable(this->hwndIdleTimerED, bCheck);
+ break;
+
+ case IDC_PB_CONFIGURE:
+ if (IsFlagSet(this->pmi->uFlags, MIF_PORT_IS_CUSTOM))
+ Sett_ConfigPort(this);
+ else if (this->pfnFifoDlg)
+ this->pfnFifoDlg(hwnd, this->pmi->szPortName);
+ else
+ ASSERT(0);
+ break;
+
+ case IDC_PB_ADVANCED:
+ // Invoke the advanced dialog
+ DoModal(g_hinst, MAKEINTRESOURCE(IDD_ADV_MODEM), this->hdlg, AdvSett_WrapperProc, (LPARAM)this->pmi);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_OnApply(
+ PSETT this)
+ {
+ BOOL bCheck;
+ LPMODEMSETTINGS pms = &this->pmi->ms;
+
+ if (DT_PARALLEL_PORT != this->pmi->nDeviceType)
+ {
+ Sett_SaveConnPrefs(this);
+ }
+
+ // Set the blind dialing
+ if (Button_GetCheck(this->hwndWait))
+ ClearFlag(pms->dwPreferredModemOptions, MDM_BLIND_DIAL);
+ else
+ SetFlag(pms->dwPreferredModemOptions, MDM_BLIND_DIAL);
+
+ // Set the dial timeout
+ bCheck = Button_GetCheck(this->hwndDialTimerCH);
+ if (bCheck)
+ {
+ int nVal = Edit_GetValue(this->hwndDialTimerED);
+ pms->dwCallSetupFailTimer = MAKELONG(nVal, 0);
+ }
+ else
+ {
+ pms->dwCallSetupFailTimer = this->pmi->devcaps.dwCallSetupFailTimer;
+ }
+
+ // Set the idle timeout
+ bCheck = Button_GetCheck(this->hwndIdleTimerCH);
+ if (bCheck)
+ {
+ int nVal = Edit_GetValue(this->hwndIdleTimerED);
+ pms->dwInactivityTimeout = MAKELONG(nVal*SECONDS_PER_MINUTE, 0);
+ }
+ else
+ {
+ pms->dwInactivityTimeout = 0;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE Sett_OnNotify(
+ PSETT this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ Sett_OnApply(this);
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_DESTROY handler
+
+Returns: --
+Cond: --
+*/
+void PRIVATE Sett_OnDestroy(
+ PSETT this)
+ {
+ if (this->hinstSerialUI)
+ FreeLibrary(this->hinstSerialUI);
+ }
+
+
+///////////////////////////////////////////////////// EXPORTED FUNCTIONS
+
+static BOOL s_bSettRecurse = FALSE;
+
+LRESULT INLINE Sett_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bSettRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT Sett_DlgProc(
+ PSETT this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_CONN_PREF, IDH_UNI_CON_PREFS,
+ IDC_LBL_DATABITS, IDH_UNI_CON_PREFS,
+ IDC_DATABITS, IDH_UNI_CON_PREFS,
+ IDC_LBL_PARITY, IDH_UNI_CON_PREFS,
+ IDC_PARITY, IDH_UNI_CON_PREFS,
+ IDC_LBL_STOPBITS, IDH_UNI_CON_PREFS,
+ IDC_STOPBITS, IDH_UNI_CON_PREFS,
+ IDC_CALL_PREF, IDH_UNI_CON_CALL_PREFS,
+ IDC_WAITFORDIALTONE,IDH_UNI_CON_DIALTONE,
+ IDC_CH_DIALTIMER, IDH_UNI_CON_CANCEL,
+ IDC_ED_DIALTIMER, IDH_UNI_CON_CANCEL,
+ IDC_SECONDS, IDH_UNI_CON_CANCEL,
+ IDC_CH_IDLETIMER, IDH_UNI_CON_DISCONNECT,
+ IDC_ED_IDLETIMER, IDH_UNI_CON_DISCONNECT,
+ IDC_MINUTES, IDH_UNI_CON_DISCONNECT,
+// IDC_PB_CONFIGURE, IDH_UNI_CON_PORT,
+ IDC_PB_ADVANCED, IDH_UNI_CON_ADVANCED,
+ 0, 0 };
+#pragma data_seg()
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, Sett_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, Sett_OnCommand);
+ HANDLE_MSG(this, WM_NOTIFY, Sett_OnNotify);
+ HANDLE_MSG(this, WM_DESTROY, Sett_OnDestroy);
+
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szWinHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szWinHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ default:
+ return Sett_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK Sett_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PSETT this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bSettRecurse)
+ {
+ s_bSettRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = Sett_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ if (message == WM_INITDIALOG)
+ {
+ this = (PSETT)LocalAlloc(LPTR, sizeof(SETT));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_SETTINGS),
+ MAKEINTRESOURCE(IDS_CAP_SETTINGS),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)Sett_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ Sett_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)Sett_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ Sett_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ Sett_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, Sett_DlgProc(this, message, wParam, lParam));
+ }
diff --git a/private/unimodem/modemui/sources b/private/unimodem/modemui/sources
new file mode 100644
index 000000000..ed4e72fb0
--- /dev/null
+++ b/private/unimodem/modemui/sources
@@ -0,0 +1,82 @@
+!IF 0
+
+Copyright (c) 1994 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+
+Author:
+
+ Steve Cathcart (stevecat) 15-Nov-1994
+
+NOTE: Commented description of this file is in \nt\bak\bin\sources.tpl
+
+Use the following line when this is UNICODE ported
+
+NOT_UNICODE=1
+
+
+ $(BASEDIR)\public\sdk\lib\*\mpr.lib \
+
+!ENDIF
+
+MAJORCOMP=shell
+MINORCOMP=cpls
+
+TARGETNAME=modemui
+TARGETPATH=..\lib
+TARGETTYPE=DYNLINK
+TARGETLIBS=$(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib \
+ $(BASEDIR)\public\sdk\lib\*\comctl32.lib \
+ $(BASEDIR)\public\sdk\lib\*\shell32.lib \
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\libc.lib \
+ $(BASEDIR)\public\sdk\lib\*\uuid.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\setupapi.lib \
+ ..\lib\*\rovcomm.lib
+
+DLLBASE=0x68000000
+
+DLLENTRY= LibMain
+
+NOT_LEAN_AND_MEAN=1
+
+INCLUDES=.;..\inc;..\..\inc;$(BASEDIR)\private\windows\inc
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+!IF "$(SHELLDBG)"=="1"
+C_DEFINES=$(C_DEFINES) -DDEBUG -DFULL_DEBUG
+!ENDIF
+
+UMTYPE=windows
+EXPECTED_WINVER=4.0
+
+SOURCES= modemui.rc \
+ modemui.c \
+ dll.c \
+ util.c \
+ cstrings.c \
+ gen.c \
+ sett.c \
+ advsett.c \
+ ring.c
+
+PRECOMPILED_INCLUDE=proj.h
+PRECOMPILED_PCH=proj.pch
+PRECOMPILED_OBJ=proj.obj
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/modemui/util.c b/private/unimodem/modemui/util.c
new file mode 100644
index 000000000..853b96b15
--- /dev/null
+++ b/private/unimodem/modemui/util.c
@@ -0,0 +1,319 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: util.c
+//
+// This files contains all common utility routines
+//
+// History:
+// 12-23-93 ScottH Created
+// 09-22-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+#include "proj.h" // common headers
+
+
+//-----------------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Enumerates the HKEY_LOCAL_MACHINE branch and finds the
+ device matching the given class and value. If there
+ are duplicate devices that match both criteria, only the
+ first device is returned.
+
+ Returns TRUE if the device was found.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PRIVATE
+FindDev_Find(
+ IN LPFINDDEV pfinddev,
+ IN LPGUID pguidClass,
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue)
+ {
+ BOOL bRet = FALSE;
+ TCHAR szKey[MAX_BUF];
+ TCHAR szName[MAX_BUF];
+ HDEVINFO hdi;
+ DWORD dwRW = KEY_READ;
+
+ ASSERT(pfinddev);
+ ASSERT(pguidClass);
+ ASSERT(pszValueName);
+ ASSERT(pszValue);
+
+ if (USER_IS_ADMIN()) dwRW |= KEY_WRITE;
+
+ hdi = CplDiGetClassDevs(pguidClass, NULL, NULL, 0);
+ if (INVALID_HANDLE_VALUE != hdi)
+ {
+ SP_DEVINFO_DATA devData;
+ DWORD iIndex = 0;
+ HKEY hkey;
+
+ // Look for the modem that has the matching value
+ devData.cbSize = sizeof(devData);
+ while (CplDiEnumDeviceInfo(hdi, iIndex, &devData))
+ {
+ hkey = CplDiOpenDevRegKey(hdi, &devData, DICS_FLAG_GLOBAL, 0, DIREG_DRV, dwRW);
+ if (INVALID_HANDLE_VALUE != hkey)
+ {
+ // Does the value match?
+ DWORD cbData = sizeof(szName);
+ if (NO_ERROR == RegQueryValueEx(hkey, pszValueName, NULL, NULL,
+ (LPBYTE)szName, &cbData) &&
+ IsSzEqual(pszValue, szName))
+ {
+ // Yes
+ pfinddev->hkeyDrv = hkey;
+ pfinddev->hdi = hdi;
+ BltByte(&pfinddev->devData, &devData, sizeof(devData));
+
+ // Don't close the driver key or free the DeviceInfoSet,
+ // but exit
+ bRet = TRUE;
+ break;
+ }
+ RegCloseKey(hkey);
+ }
+
+ iIndex++;
+ }
+
+ // Free the DeviceInfoSet if nothing was found. Otherwise, we will
+ // retain these handles so the caller can make use of this.
+ if ( !bRet )
+ {
+ CplDiDestroyDeviceInfoList(hdi);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates a FINDDEV structure given the device class,
+ and a valuename and its value.
+
+Returns: TRUE if the device is found in the system
+
+Cond: --
+*/
+BOOL
+PUBLIC
+FindDev_Create(
+ OUT LPFINDDEV FAR * ppfinddev,
+ IN LPGUID pguidClass,
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue)
+ {
+ BOOL bRet;
+ LPFINDDEV pfinddev;
+
+ DEBUG_CODE( TRACE_MSG(TF_FUNC, " > FindDev_Create(....%s, %s, ...)",
+ Dbg_SafeStr(pszValueName), Dbg_SafeStr(pszValue)); )
+
+ ASSERT(ppfinddev);
+ ASSERT(pguidClass);
+ ASSERT(pszValueName);
+ ASSERT(pszValue);
+
+ pfinddev = (LPFINDDEV)LocalAlloc(LPTR, sizeof(*pfinddev));
+ if (NULL == pfinddev)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ bRet = FindDev_Find(pfinddev, pguidClass, pszValueName, pszValue);
+
+ if (FALSE == bRet)
+ {
+ // Didn't find anything
+ FindDev_Destroy(pfinddev);
+ pfinddev = NULL;
+ }
+ }
+
+ *ppfinddev = pfinddev;
+
+ DBG_EXIT_BOOL(FindDev_Create, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Destroys a FINDDEV structure
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+FindDev_Destroy(
+ IN LPFINDDEV this)
+ {
+ BOOL bRet;
+
+ if (NULL == this)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ if (this->hkeyDrv)
+ RegCloseKey(this->hkeyDrv);
+
+ if (this->hdi && INVALID_HANDLE_VALUE != this->hdi)
+ CplDiDestroyDeviceInfoList(this->hdi);
+
+ LocalFreePtr(this);
+
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Return the appropriate text and background COLORREFs
+ given the DRAWITEMSTRUCT.
+
+Returns: --
+Cond: --
+*/
+void PUBLIC TextAndBkCr(
+ const DRAWITEMSTRUCT FAR * lpcdis,
+ COLORREF FAR * pcrText,
+ COLORREF FAR * pcrBk)
+ {
+ #define CR_DARK_GRAY RGB(128, 128, 128)
+
+ UINT nState;
+
+ ASSERT(lpcdis);
+ ASSERT(pcrText);
+ ASSERT(pcrBk);
+
+ nState = lpcdis->itemState;
+
+ switch (lpcdis->CtlType)
+ {
+ case ODT_STATIC:
+ if (IsFlagSet(nState, ODS_DISABLED))
+ {
+ *pcrText = GetSysColor(COLOR_GRAYTEXT);
+ *pcrBk = GetSysColor(COLOR_3DFACE);
+ }
+ else
+ {
+ *pcrText = GetSysColor(COLOR_WINDOWTEXT);
+ *pcrBk = GetSysColor(COLOR_3DFACE);
+ }
+ break;
+
+ case ODT_LISTBOX:
+ case ODT_COMBOBOX:
+ if (IsFlagSet(nState, ODS_SELECTED))
+ {
+ *pcrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
+ *pcrBk = GetSysColor(COLOR_HIGHLIGHT);
+ }
+ else if (IsFlagSet(nState, ODS_DISABLED))
+ {
+ *pcrText = GetSysColor(COLOR_GRAYTEXT);
+ *pcrBk = GetSysColor(COLOR_3DFACE);
+ }
+ else
+ {
+ *pcrText = GetSysColor(COLOR_WINDOWTEXT);
+ *pcrBk = GetSysColor(COLOR_WINDOW);
+ }
+ break;
+
+ case ODT_MENU:
+ if (IsFlagSet(nState, ODS_SELECTED))
+ {
+ *pcrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
+ *pcrBk = GetSysColor(COLOR_HIGHLIGHT);
+ }
+ else
+ {
+ *pcrText = GetSysColor(COLOR_MENUTEXT);
+ *pcrBk = GetSysColor(COLOR_MENU);
+ }
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+
+
+//-----------------------------------------------------------------------------------
+// Debug functions
+//-----------------------------------------------------------------------------------
+
+
+#ifdef DEBUG
+
+#pragma data_seg(DATASEG_READONLY)
+
+#ifdef WIN95
+struct _RETERRMAP
+ {
+ RETERR ret;
+ LPCTSTR psz;
+ } const c_rgreterrmap[] = {
+ { NO_ERROR, "NO_ERROR" },
+ { DI_ERROR, "DI_ERROR" },
+ { ERR_DI_INVALID_DEVICE_ID, "ERR_DI_INVALID_DEVICE_ID" },
+ { ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST, "ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST" },
+ { ERR_DI_REG_API, "ERR_DI_REG_API" },
+ { ERR_DI_LOW_MEM, "ERR_DI_LOW_MEM" },
+ { ERR_DI_BAD_DEV_INFO, "ERR_DI_BAD_DEV_INFO" },
+ { ERR_DI_INVALID_CLASS_INSTALLER, "ERR_DI_INVALID_CLASS_INSTALLER" },
+ { ERR_DI_DO_DEFAULT, "ERR_DI_DO_DEFAULT" },
+ { ERR_DI_USER_CANCEL, "ERR_DI_USER_CANCEL" },
+ { ERR_DI_NOFILECOPY, "ERR_DI_NOFILECOPY" },
+ { ERR_DI_BAD_CLASS_INFO, "ERR_DI_BAD_CLASS_INFO" },
+ };
+#endif
+
+#pragma data_seg()
+
+#ifdef WIN95
+/*----------------------------------------------------------
+Purpose: Returns the string form of a RETERR.
+
+Returns: String ptr
+Cond: --
+*/
+LPCTSTR PUBLIC Dbg_GetReterr(
+ RETERR ret)
+ {
+ int i;
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgreterrmap); i++)
+ {
+ if (ret == c_rgreterrmap[i].ret)
+ return c_rgreterrmap[i].psz;
+ }
+ return "Unknown RETERR";
+ }
+#endif // WIN95
+
+#endif // DEBUG
diff --git a/private/unimodem/modemui/util.h b/private/unimodem/modemui/util.h
new file mode 100644
index 000000000..07d32c0ec
--- /dev/null
+++ b/private/unimodem/modemui/util.h
@@ -0,0 +1,43 @@
+//
+// util.h: Declares data, defines and struct types for common code
+// module.
+//
+//
+
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#if defined(DEBUG) && defined(WIN95)
+LPCTSTR PUBLIC Dbg_GetReterr(RETERR ret);
+#endif
+
+// Color macros
+//
+void PUBLIC TextAndBkCr(const DRAWITEMSTRUCT FAR * lpcdis, COLORREF FAR * pcrText, COLORREF FAR * pcrBk);
+
+//
+// FINDDEV structure
+//
+typedef struct tagFINDDEV
+ {
+ HDEVINFO hdi;
+ SP_DEVINFO_DATA devData;
+ HKEY hkeyDrv;
+ } FINDEV, FAR * LPFINDDEV;
+
+BOOL
+PUBLIC
+FindDev_Create(
+ OUT LPFINDDEV FAR * ppfinddev,
+ IN LPGUID pguidClass,
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue);
+
+BOOL
+PUBLIC
+FindDev_Destroy(
+ IN LPFINDDEV this);
+
+
+#endif // __UTIL_H__
+
diff --git a/private/unimodem/new/detect/d.c b/private/unimodem/new/detect/d.c
new file mode 100644
index 000000000..1a1af6625
--- /dev/null
+++ b/private/unimodem/new/detect/d.c
@@ -0,0 +1,828 @@
+/*
+ * Detection routines for modems.
+ *
+ * Microsoft Confidential
+ * Copyright (c) Microsoft Corporation 1993-1994
+ * All rights reserved
+ *
+ */
+
+#include <windows.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#define CR '\r'
+#define LF '\n'
+
+#define ASSERT(xxx) ((void) 0)
+
+#define DEBUG
+
+//#define NO_ERROR 0
+#define ERROR_PORT_INACCESSIBLE 1
+#define ERROR_NO_MODEM 2
+//#define ERROR_ACCESS_DENIED 3
+//#define ERROR_CANCELLED 4
+
+#define RESPONSE_RCV_DELAY 5000 // A long time (5 secs) because
+ // once we have acquired the modem
+ // we can afford the wait.
+
+#define MAX_QUERY_RESPONSE_LEN 100
+#define MAX_SHORT_RESPONSE_LEN 30 // echo of ATE0Q0V1<cr> and
+ // <cr><lf>ERROR<cr><lf> by a
+ // little margin
+
+#define ATI0_LEN 30 // amount of the ATI0 query that
+ // we will save
+
+#define ATI0 0 // we will use this result completely
+#define ATI4 4 // we will use this result completely,
+ // if it matches the Hayes format
+ // (check for 'a' at beginning)
+
+// Return values for the FindModem function
+//
+#define RESPONSE_USER_CANCEL (-4) // user requested cancel
+#define RESPONSE_UNRECOG (-3) // got some chars, but didn't
+ // understand them
+#define RESPONSE_NONE (-2) // didn't get any chars
+#define RESPONSE_FAILURE (-1) // internal error or port error
+#define RESPONSE_OK 0 // matched with index of <cr><lf>OK<cr><lf>
+#define RESPONSE_ERROR 1 // matched with index of <cr><lf>ERROR<cr><lf>
+
+#ifdef WIN32
+typedef HANDLE HPORT; // variable type used in FindModem
+#else
+typedef int HPORT; // variable type used in FindModem
+#endif
+
+#define IN_QUEUE_SIZE 8192
+#define OUT_QUEUE_SIZE 256
+
+#define RCV_DELAY 2000
+#define CHAR_DELAY 100
+
+#define CBR_HACK_115200 0xff00 // This is how we set 115,200 on
+ // Win 3.1 because of a stupid bug.
+
+char const FAR c_szNoEcho[] = "ATE0Q0V1\r";
+
+// WARNING! If you change these, you will have to change ALL of your
+// CompatIDs!!!
+char const FAR *c_aszQueries[] = { "ATI0\r", "ATI1\r", "ATI2\r", "ATI3\r",
+ "ATI4\r", "ATI5\r", "ATI6\r", "ATI7\r",
+ "ATI8\r", "ATI9\r", "ATI10\r", "AT%V\r" };
+
+// these are mostly for #'s. If a numeric is adjoining one of these, it
+// will not be treated as special.
+// Warning: Change any of these and you have to redo all of the CRCs!!!!
+// Case insensitive compares
+char const FAR *c_aszIncludes[] = { "300",
+ "1200",
+ "2400", "2,400",
+ "9600", "96", "9.6", "9,600",
+ "12000", "120", "12.0", "12,000",
+ "14400", "144", "14.4", "14,400",
+ "16800", "168", "16.8", "16,800",
+ "19200", "192", "19.2", "19,200",
+ "21600", "216", "21.6", "21,600",
+ "24000", "240", "24.0", "24,000",
+ "26400", "264", "26.4", "26,400",
+ "28800", "288", "28.8", "28,800",
+ "31200", "312", "31.2", "31,200",
+ "33600", "336", "33.6", "33,600",
+ "36000", "360", "36.0", "36,000",
+ "38400", "384", "38.4", "38,400",
+ "9624", "32bis", "42bis", "V32",
+ "V.32", "V.FC", "FAST", "FAX",
+ "DATA", "VOICE", "" };
+
+// Matches will be case-insensitive
+char const FAR *c_aszExcludes[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
+ "JUL", "AUG", "SEP", "OCT", "NOV", "DEC",
+ "" };
+
+// case sensitive matching
+char const FAR *c_aszBails[] = { "CONNECT", "RING", "NO CARRIER",
+ "NO DIALTONE", "BUSY", "NO ANSWER", "=" };
+
+// start after CBR_9600
+UINT const FAR c_auiUpperBaudRates[] = { CBR_19200, CBR_38400, CBR_56000,
+ CBR_HACK_115200 };
+
+char const FAR *c_aszResponses[] = { "\r\nOK\r\n", "\r\nERROR\r\n" };
+
+// Some MultiTech's send 0<cr> in response to AT%V (they go
+// into numeric mode)
+char const FAR *c_aszNumericResponses[] = { "0\r", "4\r" };
+
+char const FAR c_szHex[] = "0123456789abcdef";
+
+struct DCE {
+ char pszStr[4];
+ DWORD dwDce;
+ DWORD dwAlternateDce;
+} DCE_Table[] = {
+ "384", 38400, 300, // Some PDI's will report 38400, and this won't work for them. Screw 'em.
+ "360", 36000, 300,
+ "336", 33600, 300,
+ "312", 31200, 300,
+ "288", 28800, 2400,
+ "264", 26400, 2400,
+ "240", 24000, 2400,
+ "216", 21600, 2400,
+ "192", 19200, 1200,
+ "168", 16800, 1200,
+ "14", 14400, 1200,
+ "120", 12000, 1200,
+ "9", 9600, 300,
+ "2", 2400, 300,
+ "1", 1200, 300,
+ "3", 300, 0
+};
+
+#pragma data_seg()
+
+
+
+// BUGBUG - WARNING: Not for DBCS usage - is not a real bugbug since modems aren't DBCS.
+//#define isupper(ch) (((ch) >= 'A' && (ch) <= 'Z') ? TRUE : FALSE)
+//#define islower(ch) (((ch) >= 'a' && (ch) <= 'z') ? TRUE : FALSE)
+//#define isalpha(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'Z') ? TRUE : FALSE)
+#define toupper(ch) (islower(ch) ? (ch) - 'a' + 'A' : (ch))
+#define ishex(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'F') ? TRUE : FALSE)
+#define isnum(num) ((num >= '0' && num <= '9') ? TRUE : FALSE)
+
+#define MAX_TEST_TRIES 4
+
+
+#define MAX_LOG_PRINTF_LEN 256
+void _cdecl LogPrintf(HANDLE hLog, UINT uResourceFmt, ...);
+
+DWORD NEAR PASCAL FindModem(HPORT hPort);
+
+#ifdef DEBUG
+void HexDump( TCHAR *, LPBYTE lpBuf, DWORD cbLen);
+#define HEXDUMP(_a, _b, _c) HexDump(_a, _b, _c)
+#else // !DEBUG
+#define HEXDUMP(_a, _b, _c) ((void) 0)
+#endif
+
+
+BOOL
+TestBaudRate(
+ IN HPORT hPort,
+ IN UINT uiBaudRate,
+ IN DWORD dwRcvDelay,
+ OUT BOOL FAR *lpfCancel);
+
+DWORD
+NEAR PASCAL
+SetPortBaudRate(
+ HPORT hPort,
+ UINT BaudRate);
+int
+NEAR PASCAL
+ReadResponse(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ BOOL fMulti,
+ DWORD dwRcvDelay
+);
+
+UINT
+NEAR PASCAL
+ReadPort(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ DWORD dwRcvDelay,
+ int FAR *lpiError,
+ BOOL FAR *lpfCancel);
+
+
+int FAR PASCAL mylstrncmp(LPCSTR pchSrc, LPCSTR pchDest, int count)
+{
+ for ( ; count && *pchSrc == *pchDest; pchSrc++, pchDest++, count--) {
+ if (*pchSrc == '\0')
+ return 0;
+ }
+ return count;
+}
+
+int FAR PASCAL mylstrncmpi(LPCSTR pchSrc, LPCSTR pchDest, int count)
+{
+ for ( ; count && toupper(*pchSrc) == toupper(*pchDest); pchSrc++, pchDest++, count--) {
+ if (*pchSrc == '\0')
+ return 0;
+ }
+ return count;
+}
+
+
+DWORD
+MyWriteComm(
+ HANDLE hPort,
+ LPBYTE lpBuf,
+ DWORD cbLen)
+{
+ COMMTIMEOUTS cto;
+ DWORD cbLenRet;
+
+ HEXDUMP (TEXT("Write"), lpBuf, cbLen);
+ // Set comm timeout
+ if (!GetCommTimeouts(hPort, &cto))
+ {
+ ZeroMemory(&cto, sizeof(cto));
+ };
+
+ // Allow a constant write timeout
+ cto.WriteTotalTimeoutMultiplier = 0;
+ cto.WriteTotalTimeoutConstant = 1000; // 1 second
+ SetCommTimeouts(hPort, &cto);
+
+ // Synchronous write
+ WriteFile(hPort, lpBuf, cbLen, &cbLenRet, NULL);
+ return cbLenRet;
+}
+
+#define MyFlushComm PurgeComm
+#define MyCloseComm CloseHandle
+
+
+/*----------------------------------------------------------
+Purpose: This function queries the given port to find a legacy
+ modem.
+
+ If a modem is detected and we recognize it (meaning
+ we have the hardware ID in our INF files), or if we
+ successfully create a generic hardware ID and
+ inf file, then this function also creates the phantom
+ device instance of this modem.
+
+ NOTE (scotth): in Win95, this function only detected
+ the modem and returned the hardware ID and device
+ description. For NT, this function also creates the
+ device instance. I made this change because it is
+ faster.
+
+Returns: NO_ERROR
+ ERROR_PORT_INACCESSIBLE
+ ERROR_NO_MODEM
+ ERROR_ACCESS_DENIED
+ ERROR_CANCELLED
+
+Cond: --
+*/
+DWORD
+//PUBLIC
+DetectModemOnPort(LPCTSTR pszPort)
+{
+ DWORD dwRet;
+ HPORT hPort;
+ DWORD cbLen;
+
+ hPort = CreateFile(pszPort,
+ GENERIC_WRITE | GENERIC_READ,
+ 0, NULL,
+ OPEN_EXISTING, 0, NULL);
+
+ if (hPort == INVALID_HANDLE_VALUE)
+ {
+ dwRet = GetLastError();
+ if (dwRet == ERROR_ACCESS_DENIED) {
+ printf("Port %s is in use by another app.\r\n", pszPort);
+ }
+ else
+ {
+ printf("Couldn't open port %s.\r\n", pszPort);
+ }
+ }
+ else
+ {
+ SetupComm (hPort, IN_QUEUE_SIZE, OUT_QUEUE_SIZE);
+
+ printf("Opened Port %s", pszPort);
+
+ // Check for a modem on the port
+
+ dwRet = FindModem(hPort);
+
+ if (dwRet == NO_ERROR)
+ {
+ printf("Found modem\r\n");
+ }
+ else
+ {
+ printf("Did not find modem\r\n");
+ }
+
+ MyFlushComm(hPort, PURGE_RXCLEAR | PURGE_TXCLEAR);
+ EscapeCommFunction(hPort, CLRDTR);
+ MyCloseComm(hPort);
+
+ } // hPort < 0
+
+ return dwRet;
+}
+
+#define HAYES_COMMAND_LEN 40
+
+
+
+// Switch to requested baud rate and try sending ATE0Q0V1 and return whether it works or not
+// Try MAX_TEST_TRIES
+// Returns: TRUE on SUCCESS
+// FALSE on failure (including user cancels)
+BOOL
+TestBaudRate(
+ IN HPORT hPort,
+ IN UINT uiBaudRate,
+ IN DWORD dwRcvDelay,
+ OUT BOOL FAR *lpfCancel)
+{
+ DWORD cbLen;
+ int iTries = MAX_TEST_TRIES;
+
+ *lpfCancel = FALSE;
+
+ while (iTries--)
+ {
+ // try new baud rate
+ if (SetPortBaudRate(hPort, uiBaudRate) == NO_ERROR)
+ {
+ cbLen = lstrlenA(c_szNoEcho); // Send an ATE0Q0V1<cr>
+
+ // clear the read queue, there shouldn't be anything there
+ PurgeComm(hPort, PURGE_RXCLEAR);
+ if (MyWriteComm(hPort, (LPBYTE)c_szNoEcho, cbLen) == cbLen)
+ {
+ switch(ReadResponse(hPort, NULL, MAX_SHORT_RESPONSE_LEN, FALSE, dwRcvDelay))
+ {
+ case RESPONSE_OK:
+ return TRUE;
+
+ case RESPONSE_USER_CANCEL:
+ *lpfCancel = TRUE;
+ return FALSE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+
+// Tries to figure out if there is a modem on the port. If there is, it
+// will try to find a good speed to talk to it at (300,1200,2400,9600).
+// Modem will be set to echo off, result codes on, and verbose result codes. (E0Q0V1)
+DWORD
+FindModem(HPORT hPort)
+{
+ UINT uGoodBaudRate;
+ BOOL fCancel = FALSE;
+
+ Sleep(500); // Wait, give time for modem to spew junk if any.
+
+ if (TestBaudRate(hPort, CBR_9600, 500, &fCancel))
+ {
+ uGoodBaudRate = CBR_9600;
+ }
+ else
+ {
+ if (!fCancel && TestBaudRate(hPort, CBR_2400, 500, &fCancel))
+ {
+ uGoodBaudRate = CBR_2400;
+ }
+ else
+ {
+ if (!fCancel && TestBaudRate(hPort, CBR_1200, 500, &fCancel))
+ {
+ uGoodBaudRate = CBR_1200;
+ }
+ else
+ {
+ // Hayes Accura 288 needs this much at 300bps
+ if (!fCancel && TestBaudRate(hPort, CBR_300, 1000, &fCancel))
+ {
+ uGoodBaudRate = CBR_300;
+ }
+ else
+ {
+ uGoodBaudRate = 0;
+ }
+ }
+ }
+ }
+
+ if (fCancel)
+ {
+ return ERROR_CANCELLED;
+ }
+
+ if (uGoodBaudRate)
+ {
+ return NO_ERROR;
+ }
+ else
+ {
+ return ERROR_NO_MODEM;
+ }
+}
+
+DWORD NEAR PASCAL SetPortBaudRate(HPORT hPort, UINT BaudRate)
+{
+ DCB DCB;
+
+ // Get a Device Control Block with current port values
+
+ if (GetCommState(hPort, &DCB) < 0) {
+ printf("GetCommState failed");
+ return ERROR_PORT_INACCESSIBLE;
+ }
+
+ DCB.BaudRate = BaudRate;
+ DCB.ByteSize = 8;
+ DCB.Parity = 0;
+ DCB.StopBits = 0;
+ DCB.fBinary = 1;
+ DCB.fParity = 0;
+
+ if (SetCommState(hPort, &DCB) < 0) {
+ printf("SetCommState failed");
+ return ERROR_PORT_INACCESSIBLE;
+ }
+ printf("SetBaud rate to %lu\r\n", BaudRate);
+
+ return NO_ERROR;
+}
+
+#define MAX_RESPONSE_BURST_SIZE 8192
+#define MAX_NUM_RESPONSE_READ_TRIES 30 // digicom scout needs this much + some safety
+#define MAX_NUM_MULTI_TRIES 3 // Maximum number of 'q's to be sent when we aren't getting any response
+
+// Read in response. Handle multi-pagers. Return a null-terminated string.
+// Also returns response code.
+// If lpvBuf == NULL
+// cbRead indicates the max amount to read. Bail if more than this.
+// Else
+// cbRead indicates the size of lpvBuf
+// This can not be a state driven (ie. char by char) read because we
+// must look for responses from the end of a sequence of chars backwards.
+// This is because "ATI2" on some modems will return
+// "<cr><lf>OK<cr><lf><cr><lf>OK<cr><lf>" and we only want to pay attention
+// to the final OK. Yee haw!
+// Returns: RESPONSE_xxx
+int
+ReadResponse(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT cbRead,
+ BOOL fMulti,
+ DWORD dwRcvDelay)
+{
+ int iRet = RESPONSE_UNRECOG;
+ LPBYTE pszBuffer;
+ BOOL fDoCopy = TRUE;
+ UINT uBufferLen, uResponseLen;
+ UINT uReadTries = MAX_NUM_RESPONSE_READ_TRIES;
+ UINT i;
+ UINT uOutgoingBufferCount = 0;
+ UINT uAllocSize = lpvBuf ? MAX_RESPONSE_BURST_SIZE : cbRead;
+ UINT uTotalReads = 0;
+ UINT uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES;
+ int iError;
+ BOOL fCancel;
+ BOOL fHadACommError = FALSE;
+
+ ASSERT(cbRead);
+
+ // do we need to adjust cbRead?
+ if (lpvBuf)
+ {
+ cbRead--; // preserve room for terminator
+ }
+
+ // Allocate buffer
+ if (!(pszBuffer = (LPBYTE)LocalAlloc(LMEM_FIXED, uAllocSize)))
+ {
+ return RESPONSE_FAILURE;
+ }
+
+ while (uReadTries--)
+ {
+ // Read response into buffer
+ uBufferLen = ReadPort(hPort, pszBuffer, uAllocSize, dwRcvDelay, &iError, &fCancel);
+
+ // Did the user request a cancel?
+ if (fCancel)
+ {
+ iRet = RESPONSE_USER_CANCEL;
+ goto Exit;
+ }
+
+ // any errors?
+ if (iError)
+ {
+ // BUGBUG - Were screwed if we get an error during a multi-pager.
+ fHadACommError = TRUE;
+#ifdef DEBUG
+ printf(TEXT("comm errorn"));
+#endif // DEBUG
+ }
+
+ // Did we not get any chars?
+ if (uBufferLen)
+ {
+ uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES; // reset num multi tries left, since we got some data
+ uTotalReads += uBufferLen;
+ HEXDUMP(TEXT("Read"), pszBuffer, uBufferLen);
+ if (lpvBuf)
+ {
+ // fill outgoing buffer if there is room
+ for (i = 0; i < uBufferLen; i++)
+ {
+ if (uOutgoingBufferCount < cbRead)
+ {
+ lpvBuf[uOutgoingBufferCount++] = pszBuffer[i];
+ }
+ else
+ {
+ break;
+ }
+ }
+ // null terminate what we have so far
+ lpvBuf[uOutgoingBufferCount] = 0;
+ }
+ else
+ {
+ if (uTotalReads >= cbRead)
+ {
+ printf("Bailing ReadResponse because we exceeded our maximum read allotment.");
+ goto Exit;
+ }
+ }
+
+ // try to find a matching response (crude but quick)
+ for (i = 0; i < sizeof(c_aszResponses)/sizeof(*c_aszResponses); i++)
+ {
+ // Verbose responses
+ uResponseLen = lstrlenA(c_aszResponses[i]);
+
+ // enough read to match this response?
+ if (uBufferLen >= uResponseLen)
+ {
+ if (!mylstrncmp(c_aszResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen))
+ {
+ iRet = i;
+ goto Exit;
+ }
+ }
+
+ // Numeric responses, for cases like when a MultiTech interprets AT%V to mean "go into numeric response mode"
+ uResponseLen = lstrlenA(c_aszNumericResponses[i]);
+
+ // enough read to match this response?
+ if (uBufferLen >= uResponseLen)
+ {
+ if (!mylstrncmp(c_aszNumericResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen))
+ {
+ DCB DCB;
+
+
+ // Get current baud rate
+ if (GetCommState(hPort, &DCB) == 0)
+ {
+ // Put modem back into Verbose response mode
+ if (!TestBaudRate(hPort, DCB.BaudRate, 0, &fCancel))
+ {
+ if (fCancel)
+ {
+ iRet = RESPONSE_USER_CANCEL;
+ goto Exit;
+ }
+ else
+ {
+ printf(TEXT("couldn't recover contact with the modem.\n"));
+ // don't return error on failure, we have good info
+ }
+ }
+ }
+ else
+ {
+ printf("GetCommState failed");
+ // don't return error on failure, we have good info
+ }
+
+ iRet = i;
+ goto Exit;
+ }
+ }
+ }
+ }
+ else
+ {
+ // have we received any chars at all (ie. from this or any previous reads)?
+ if (uTotalReads)
+ {
+ if (fMulti && uNumMultiTriesLeft)
+ { // no match found, so assume it is a multi-pager, send a 'q'
+ // 'q' will catch those pagers that will think 'q' means quit.
+ // else, we will work with the pages that just need any ole' char.
+ uNumMultiTriesLeft--;
+ printf("sending a 'q' because of a multi-pager.");
+ if (MyWriteComm(hPort, "q", 1) != 1)
+ {
+ printf(TEXT("WriteComm failed"));
+ iRet = RESPONSE_FAILURE;
+ goto Exit;
+ }
+ continue;
+ }
+ else
+ { // we got a response, but we didn't recognize it
+ //ASSERT(iRet == RESPONSE_UNRECOG); // check initial setting
+ goto Exit;
+ }
+ }
+ else
+ { // we didn't get any kind of response
+ iRet = RESPONSE_NONE;
+ goto Exit;
+ }
+ }
+ } // while
+
+Exit:
+ // Free local buffer
+ LocalFree((HLOCAL)pszBuffer);
+ if (fHadACommError && RESPONSE_USER_CANCEL != iRet)
+ {
+ iRet = RESPONSE_FAILURE;
+ }
+ return iRet;
+}
+
+// returns buffer full o' data and an int.
+// if dwRcvDelay is NULL, default RCV_DELAY will be used, else
+// dwRcvDelay (miliseconds) will be used
+// *lpfCancel will be true if we are exiting because of a user requested cancel.
+UINT
+ReadPort(
+ HPORT hPort,
+ LPBYTE lpvBuf,
+ UINT uRead,
+ DWORD dwRcvDelay,
+ int FAR *lpiError,
+ BOOL FAR *lpfCancel)
+{
+ DWORD cb, cbLenRet;
+ UINT uTotal = 0;
+ DWORD tStart;
+ DWORD dwDelay;
+ COMSTAT comstat;
+ COMMTIMEOUTS cto;
+ DWORD dwError;
+ DWORD cbLeft;
+#ifdef DEBUG
+ DWORD dwZeroCount = 0;
+#endif // DEBUG
+
+ ASSERT(lpvBuf);
+ ASSERT(uRead);
+ ASSERT(lpiError);
+
+ *lpiError = 0;
+ *lpfCancel = FALSE;
+
+ tStart = GetTickCount();
+ dwDelay = dwRcvDelay ? dwRcvDelay : RCV_DELAY;
+
+ // save space for terminator
+ uRead--;
+ cbLeft=uRead;
+
+
+ // Set comm timeout
+ if (!GetCommTimeouts(hPort, &cto))
+ {
+ ZeroMemory(&cto, sizeof(cto));
+ };
+ // Allow a constant write timeout
+ cto.ReadIntervalTimeout = 0;
+ cto.ReadTotalTimeoutMultiplier = 0;
+ cto.ReadTotalTimeoutConstant = 25;
+ SetCommTimeouts(hPort, &cto);
+
+ do
+ {
+ cb = 0;
+ while( cbLeft
+ && ReadFile(hPort, lpvBuf + uTotal + cb, 1, &cbLenRet, NULL)
+ && (cbLenRet))
+ {
+ ASSERT(cbLenRet==1);
+ cb ++;
+ cbLeft--;
+ };
+
+#ifdef DEBUG
+ if (cb)
+ {
+ dwZeroCount = 0;
+ }
+ else
+ {
+ dwZeroCount++;
+ }
+#endif // DEBUG
+
+ {
+ MSG msg;
+
+ while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+ {
+ DispatchMessage(&msg);
+ };
+ }
+
+ if (cb == 0) // possible error?
+ {
+ //*lpiError |= GetCommError(hPort, &comstat);
+ dwError = 0;
+ ClearCommError(hPort, &dwError, &comstat);
+ *lpiError |= dwError;
+#ifdef DEBUG
+ if (dwError)
+ {
+// //TRACE_MSG(TF_DETECT, "ReadComm returned %d, comstat: status = %hx, in = %u, out = %u",
+ //cb, dwError, comstat.cbInQue, comstat.cbOutQue);
+ };
+#endif // DEBUG
+ }
+
+ if (cb)
+ {
+ // successful read - add to total and reset delay
+ uTotal += cb;
+
+ if (uTotal >= uRead)
+ {
+ ASSERT(uTotal == uRead);
+ break;
+ }
+ tStart = GetTickCount();
+ dwDelay = CHAR_DELAY;
+ }
+ else
+ {
+ printf(TEXT("."));
+ }
+
+ // While read is successful && time since last read < delay allowed)
+ } while (cbLeft && (GetTickCount() - tStart) < dwDelay);
+
+ *(lpvBuf+uTotal) = 0;
+
+ //TRACE_MSG(TF_DETECT, "ReadPort returning %d", uTotal);
+ return uTotal;
+}
+
+
+#ifdef DEBUG
+void HexDump(TCHAR *ptchHdr, LPBYTE lpBuf, DWORD cbLen)
+{
+ TCHAR rgch[10000];
+ TCHAR *pc = rgch;
+ TCHAR *pcMore = TEXT("");
+
+ if (1) //DisplayDebug(TF_DETECT))
+ {
+ pc += wsprintf(pc, TEXT("HEX DUMP(%s,%lu): ["), ptchHdr, cbLen);
+ if (cbLen>1000) {pcMore = TEXT(", ..."); cbLen=1000;}
+
+ for(;cbLen--; lpBuf++)
+ {
+ pc += wsprintf(pc, TEXT(" %02lx"), (unsigned long) *lpBuf);
+ if (!((cbLen+1)%20))
+ {
+ pc += wsprintf(pc, TEXT("\r\n"));
+ }
+ }
+ pc += wsprintf(pc, TEXT("]\r\n"));
+
+ //OutputDebugString(rgch);
+ printf(rgch);
+ }
+}
+#endif // DEBUG
+
+int __cdecl main(int argc, char *argv[])
+{
+ if (argc!=2) {printf("Usage: detect <port>\n"); goto end;}
+ DetectModemOnPort(argv[1]);
+end:
+ return 0;
+}
diff --git a/private/unimodem/new/detect/makefile b/private/unimodem/new/detect/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/new/detect/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/new/detect/sources b/private/unimodem/new/detect/sources
new file mode 100644
index 000000000..0d7eaa1bc
--- /dev/null
+++ b/private/unimodem/new/detect/sources
@@ -0,0 +1,24 @@
+MAJORCOMP=net
+MINORCOMP=unimodem
+
+TARGETNAME=detect
+TARGETPATH=obj
+TARGETTYPE=PROGRAM
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib
+
+
+INCLUDES=$(BASEDIR)\public\sdk\inc;.
+
+C_DEFINES=-DWINVER=0x0400
+
+USE_CRTDLL=1
+
+SOURCES= d.C
+
+UMTYPE=console
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/new/match/match.c b/private/unimodem/new/match/match.c
new file mode 100644
index 000000000..b2df5ae6a
--- /dev/null
+++ b/private/unimodem/new/match/match.c
@@ -0,0 +1,80 @@
+#include "unimdm.h"
+#include <stdio.h>
+#include "mt.h"
+
+extern CHAR **rgpszResp;
+
+#define SIMPLE 0
+#define COMPLEX 1
+#define ACTUAL 2
+//#define TEST_TYPE (SIMPLE)
+#define TEST_TYPE (COMPLEX)
+//#define TEST_TYPE (ACTUAL)
+
+extern CHAR *rgpszSimpleResp[];
+extern CHAR *rgpszComplexResp[];
+extern CHAR *rgpszActualResp[];
+
+
+#if (TEST_TYPE==SIMPLE)
+# define TEST_RESP_ARRAY rgpszSimpleResp
+#elif (TEST_TYPE==COMPLEX)
+# define TEST_RESP_ARRAY rgpszComplexResp
+#elif (TEST_TYPE==ACTUAL)
+# define TEST_RESP_ARRAY rgpszActualResp
+#endif
+
+CHAR **rgpszResp = TEST_RESP_ARRAY;
+
+main()
+{
+ HMATCHTREE hmt = 0;
+ DWORD dwRet = 0;
+ CHAR **ppsz;
+ CHAR *pszResp;
+ PMATCHREC rgmr=NULL,pmr = NULL;
+ DWORD dwcmr=0;
+
+ // count number of records
+ for (ppsz=rgpszResp;*ppsz;ppsz++)
+ {
+ dwcmr++;
+ }
+ printf("Number of records: %lu\n", (unsigned long) dwcmr);
+
+ // Allocate space and initialize the mr records.
+ rgmr = LocalAlloc(LPTR, dwcmr*sizeof(MATCHREC));
+ for (pmr=rgmr, ppsz=rgpszResp;pmr<(rgmr+dwcmr);pmr++,ppsz++)
+ {
+ pmr->dwLen = lstrlen(*ppsz);
+ pmr->pb = *ppsz;
+ pmr->pv = *ppsz;
+ }
+
+ hmt = mtCreateTree(rgmr, dwcmr);
+
+ // Free the mr array...
+ LocalFree(rgmr); pmr=rgmr=NULL;
+
+ mtDumpTree(hmt);
+
+ for (ppsz=rgpszResp; *ppsz; ppsz++)
+ {
+ MATCHREC mr;
+ mr.dwLen = lstrlen(*ppsz);
+ mr.pb = *ppsz;
+ mr.pv=(PVOID) "";
+ dwRet = mtFindMatch(hmt, &mr);
+ pszResp = (CHAR *) mr.pv;
+ printf("mtFindMatch([%s]) returns [%s] (0x%lx)\n", *ppsz, pszResp, (unsigned long) dwRet);
+ if (_stricmp(*ppsz, pszResp)) printf("+++ERROR: String not found!\n");
+ if (!(dwRet&fMATCH_COMPLETE)) printf("+++ERROR: Match not complete\n");
+ if (dwRet&fMATCH_PARTIAL) printf("+++WARNING: Match partial\n");
+ }
+
+ mtFreeTree(hmt);
+
+ return 0;
+}
+
+
diff --git a/private/unimodem/new/match/mt.c b/private/unimodem/new/match/mt.c
new file mode 100644
index 000000000..c5950272a
--- /dev/null
+++ b/private/unimodem/new/match/mt.c
@@ -0,0 +1,424 @@
+#include "unimdm.h"
+#include "mcxp.h"
+
+#if 0
+#include <windows.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include "mt.h"
+
+// #define SILENT
+
+#ifdef SILENT
+# define PRINTF0(_a) (0)
+# define PRINTF1(_a,_b) (0)
+# define PRINTF2(_a,_b,_c) (0)
+# define PRINTF3(_a,_b,_c,_d) (0)
+#else
+#ifdef CONSOLE
+# define PRINTF0(_a) printf(_a)
+# define PRINTF1(_a,_b) printf((_a),(_b))
+# define PRINTF2(_a,_b,_c) printf((_a),(_b),(_c))
+# define PRINTF3(_a,_b,_c,_d) printf((_a),(_b),(_c),(_d))
+#else
+# define PRINTF0(_a) DPRINTF(_a)
+# define PRINTF1(_a,_b) DPRINTF1((_a),(_b))
+# define PRINTF2(_a,_b,_c) DPRINTF2((_a),(_b),(_c))
+# define PRINTF3(_a,_b,_c,_d) DPRINTF3((_a),(_b),(_c),(_d))
+#endif //!CONSOLE
+#endif // !SILENT
+
+// ======================== PRIVATES ===================================
+
+#define ASSERT(_c) \
+ ((_c) ? 0: printf("Assertion failed in %s:%d\n", __FILE__, __LINE__))
+
+typedef struct _MNODE
+{
+ MATCHREC mr;
+ struct _MNODE *pmnNext;
+ struct _MNODE *pmnCh;
+
+} MNODE, *PMNODE;
+
+PMNODE mn_create_raw_tree(PMATCHREC pmr, DWORD dwcmr);
+BOOL mn_cook_tree (PMNODE pmn, DWORD dwMin);
+void mn_free_tree (PMNODE pmn);
+PMNODE mn_alloc (PMATCHREC pmr, PMNODE pmnNext);
+void mn_free (PMNODE pmn);
+void mn_dump_tree (PMNODE pmn, UINT uDepth, UINT uWidth);
+DWORD mn_find_smallest(PMNODE pmn);
+DWORD mn_find_match(PMNODE pmn, PMATCHREC pmr);
+// ======================== PRIVATES (end) ===================================
+
+HMATCHTREE mtCreateTree(PMATCHREC pmr, DWORD dwcmr)
+{
+ PMNODE pmn = mn_create_raw_tree(pmr, dwcmr);
+
+ if (!mn_cook_tree(pmn, MAXDWORD))
+ {
+ mn_free_tree(pmn);
+ pmn=NULL;
+ }
+
+ return (DWORD) pmn;
+}
+
+void mtFreeTree(HMATCHTREE hmt)
+{
+ PMNODE pmn = (PMNODE) hmt;
+
+ mn_free_tree(pmn); // NULL is a valid tree
+}
+
+
+// Returns one or more fMATCH_ flags.
+// Searches through all its siblings as well...
+// Recursive function, so keep locals to a minimum.
+DWORD mtFindMatch(HMATCHTREE hmt, PMATCHREC pmr)
+{
+ MATCHREC mr;
+ DWORD dwRet = 0;
+
+ if (!pmr) goto end;
+
+ mr = *pmr; // Structure copy.
+ dwRet = mn_find_match((PMNODE)hmt, &mr);
+ // mn_find_match trashes dwLen and cb fields of pmr, only pv field is valid
+ pmr->pv = mr.pv;
+
+end:
+ return dwRet;
+}
+
+
+#ifdef DEBUG
+void mtDumpTree(HMATCHTREE hmt)
+{
+ PMNODE pmn = (PMNODE) hmt;
+
+ mn_dump_tree(pmn, 0, 0);
+}
+#endif // DEBUG
+
+
+PMNODE mn_create_raw_tree(PMATCHREC pmr, DWORD dwcmr)
+{
+ PMNODE pmnFirst=NULL;
+
+ for (;dwcmr--;pmr++)
+ {
+ PMNODE pmnTmp = mn_alloc(pmr, pmnFirst);
+ if (!pmnTmp) goto failure;
+ pmnFirst=pmnTmp;
+ }
+ goto end;
+
+failure:
+ mn_free_tree(pmnFirst); // NULL is a valid tree to free
+ pmnFirst=NULL;
+ // FALL THROUGH
+
+end:
+ return pmnFirst;
+}
+
+
+PMNODE mn_alloc(PMATCHREC pmr, PMNODE pmnNext)
+{
+ PMNODE pmn = (pmr && pmr->pb && pmr->dwLen)
+ ? LocalAlloc(LPTR, sizeof(MNODE)) : NULL;
+
+ if (pmn)
+ {
+ pmn->mr = *pmr; // structure copy.
+ pmn->pmnNext=pmnNext;
+ pmn->pmnCh=NULL;
+ }
+
+ return pmn;
+}
+
+void mn_free(PMNODE pmn)
+{
+ if (pmn)
+ {
+ ASSERT(!pmn->pmnCh && !pmn->pmnNext);
+ LocalFree(pmn);
+ }
+}
+
+
+void mn_free_tree(PMNODE pmn)
+{
+ if (pmn)
+ {
+ mn_free_tree(pmn->pmnCh); // recurse down
+ mn_free_tree(pmn->pmnNext); // recurse left
+ pmn->pmnNext=pmn->pmnCh=NULL;
+ mn_free(pmn);
+ }
+}
+
+BOOL mn_cook_tree(PMNODE pmn, DWORD dwMin)
+{
+ // Find smallest string of me and siblings
+ if (dwMin==MAXDWORD) dwMin = mn_find_smallest(pmn);
+
+ if (!pmn) goto success;
+
+ // These are all serious problems -- so we assert on failure:
+ if (!dwMin || pmn->pmnCh || !pmn->mr.pb || (pmn->mr.dwLen<dwMin))
+ goto failure;
+
+ // Start my children's list by creating one if pmn->pb is longer
+ // than the minimum, in which case we also NULL pv, because pv should
+ // be NULL for internal (non-leaf) nodes.
+ if (pmn->mr.dwLen>dwMin)
+ {
+ MATCHREC mr;
+ mr.pb=pmn->mr.pb+dwMin;
+ mr.dwLen=pmn->mr.dwLen-dwMin;
+ mr.pv=pmn->mr.pv;
+ pmn->pmnCh = mn_alloc(&mr, NULL);
+ if (!pmn->pmnCh) goto failure;
+ pmn->mr.pv=NULL;
+ pmn->mr.dwLen=dwMin;
+ }
+
+ // Add to my children's list by converting those siblings which
+ // share my dwMin-sized prefix into my children. (Obviously) remove
+ // these siblings from the sibling list.
+ {
+ PMNODE pmnTmp = pmn;
+ while(pmnTmp->pmnNext)
+ {
+ PMNODE pmnTmp1 = pmnTmp->pmnNext;
+
+ if (pmnTmp1->mr.dwLen<dwMin || !pmnTmp1->mr.pb) goto failure;
+
+ if (!_strnicmp(pmn->mr.pb, pmnTmp1->mr.pb, dwMin))
+ {
+ // Found a prefix match -- remove from sibling list
+ // and add to child list if non-null
+ pmnTmp->pmnNext = pmnTmp1->pmnNext;
+ pmnTmp1->mr.dwLen-=dwMin;
+ pmnTmp1->mr.pb+=dwMin;
+ pmnTmp1->pmnNext=NULL;
+ // If nothing left to add -- we're at the end of pb --
+ // (leaf node) so we make pmn->pv non-NULL, and free pmnTmp1
+ // Otherwise we add it to pmn's child's list.
+ if (!pmnTmp1->mr.dwLen)
+ {
+ if (pmn->mr.pv) {PRINTF0("Warning: overriding pv!\n");}
+ pmn->mr.pv = pmnTmp1->mr.pv;
+ ASSERT(!pmnTmp1->pmnCh && !pmnTmp1->pmnNext);
+ mn_free(pmnTmp1);
+ }
+ else
+ {
+ pmnTmp1->pmnNext = pmn->pmnCh;
+ pmn->pmnCh=pmnTmp1;
+ }
+ }
+ else
+ {
+ pmnTmp = pmnTmp->pmnNext;
+ }
+ if (!pmnTmp) break;
+ }
+ }
+
+ // recurse down
+ if (!mn_cook_tree(pmn->pmnCh, MAXDWORD)) goto failure;
+
+ // recurse left
+ if (!mn_cook_tree(pmn->pmnNext, dwMin)) goto failure;
+
+ // FALL THROUGH
+
+success:
+ return TRUE;
+
+failure:
+ ASSERT(FALSE);
+ return FALSE;
+}
+
+DWORD mn_find_smallest(PMNODE pmn)
+{
+ DWORD dw = MAXDWORD;
+
+ if (pmn)
+ {
+ dw = mn_find_smallest(pmn->pmnNext);
+ if (dw>pmn->mr.dwLen) dw=pmn->mr.dwLen;
+ }
+ return dw;
+}
+
+void mn_dump_tree(PMNODE pmn, UINT uDepth, UINT uWidth)
+{
+ static char rgchFill[]="----------------------------------------";
+ LONG lOff = sizeof(rgchFill) - (uDepth+1);
+ if (lOff<0) lOff=0;
+ // if(!pmn) return;
+ PRINTF2("%02lu%s", (unsigned long) uDepth, rgchFill+lOff);
+ if (!pmn)
+ {
+ PRINTF1("NULL(w=%lu)\n", (unsigned long) uWidth);
+ }
+ else
+ {
+ CHAR *pb = (pmn->mr.pb)?pmn->mr.pb:"\"\"";
+ CHAR c = pb[pmn->mr.dwLen];
+ CHAR *pc2 = (CHAR *) pmn->mr.pv;
+ if (!pc2) pc2="";
+ pb[pmn->mr.dwLen]=0;
+ PRINTF3("[%s]:%02lu %s\n", pc2,
+ (unsigned long) pmn->mr.dwLen, pb);
+ pb[pmn->mr.dwLen]=c;
+ mn_dump_tree(pmn->pmnCh, uDepth+1,0); // recurse down
+ mn_dump_tree(pmn->pmnNext, uDepth, uWidth+1); // recurse left
+ }
+}
+
+
+// Returns one or more fMATCH_ flags.
+// Searches through all its siblings as well...
+// Recursive function, so keep locals to a minimum.
+// WARNING: Trashes dwLen and cb fields of pmr.
+DWORD mn_find_match(PMNODE pmn, PMATCHREC pmr)
+{
+ DWORD dwRet=0;
+ DWORD dwcbMin;
+ CHAR *pc;
+
+#ifdef DEBUG
+ DWORD dwcb;
+ CHAR rgchTmp[256];
+ DWORD dwcbTmp;
+#endif // DEBUG
+
+ if (!pmn || !pmr) goto end;
+
+#ifdef DEBUG
+# define DWCB dwcb
+# define DBGPSZ rgchTmp
+ DWCB = pmr->dwLen;
+ dwcbTmp = sizeof(DBGPSZ)-1;
+ if (dwcbTmp>DWCB) dwcbTmp=DWCB;
+ // We do this because pb is not null terminated.
+ CopyMemory(DBGPSZ, pmr->pb, dwcbTmp);
+ DBGPSZ[dwcbTmp]=0;
+#else // !DEBUG
+# define DBGPSZ ""
+# define DWCB 0
+#endif // !DEBUG
+
+ PRINTF1("Entering mn_find_match(-, [%s], -)\n", DBGPSZ);
+
+
+
+ // Iterate through siblings, looking for matches and partial matches.
+ // We stop when we find the first match or partial match, because all
+ // the substrings at the same level are unique and have the same length:
+ // so if we found a match we can't find a partial match among the siblings,
+ // and vice versa. Furthermore, if we find a partial match, we don't really
+ // care which (could be more than one) sibling it is a partial match for.
+ // If in the future we we *do* return the node for efficiency purposes
+ // (so that the next call can start where we left off),
+ // we would return the node for the *first* partial match we found.
+ pc = pmr->pb;
+ dwcbMin = pmn->mr.dwLen;
+ if (pmr->dwLen<dwcbMin)
+ {
+ dwcbMin=pmr->dwLen;
+ dwRet = fMATCH_PARTIAL;
+ }
+ else if (pmr->dwLen==dwcbMin)
+ {
+ dwRet = fMATCH_COMPLETE;
+ }
+ else
+ {
+ // pmr->dwLen>pmn->mr.dwU, dwRet==0, so do nothing
+ }
+
+ // WARNING: we trash pmr here, except for pmr->pv
+ pmr->dwLen-=dwcbMin;
+ pmr->pb+=dwcbMin;
+
+ while(pmn)
+ {
+ // Fundamental assumption is that all dwLens of siblings are equal.
+ ASSERT((pmn->pmnNext)? pmn->mr.dwLen==pmn->pmnNext->mr.dwLen:TRUE);
+
+ if (!_strnicmp(pc, pmn->mr.pb, dwcbMin))
+ {
+ PRINTF3("Match: dwcb=%lu; pmn->mr.dwLen=%lu; pc=[%s]\n",
+ (unsigned long) DWCB,
+ (unsigned long) pmn->mr.dwLen,
+ DBGPSZ);
+
+ // Note: dwRet is computed just once, out of the while loop.
+ // we were really overloading dwRet then. Now we compute the
+ // true return value.
+ switch(dwRet)
+ {
+ case 0: // i.e., (DWCB > pmn->mr.dwLen)
+ ASSERT(DWCB>pmn->mr.dwLen);
+ // Recurse down. WARNING: pmr is trashed, except for pmr->pv
+ dwRet = mn_find_match(pmn->pmnCh, pmr);
+ break;
+
+ case fMATCH_PARTIAL: // i.e., (DWCB < pmn->mr.dwLen)
+ ASSERT(DWCB<pmn->mr.dwLen);
+ break;
+
+ case fMATCH_COMPLETE: // i.e., (DWCB == pmn->mr.dwLen)
+ ASSERT(DWCB==pmn->mr.dwLen);
+ // Now let's see if we're truly a perfect macth: non-null
+ // pv indicates an actual response terminates in this node.
+ dwRet=0;
+ if (pmn->mr.pv)
+ {
+ pmr->pv = pmn->mr.pv;
+ dwRet = fMATCH_COMPLETE;
+ }
+ // Non-null pmnCh implies there are postfixes, i.e., longer
+ // responses
+ if (pmn->pmnCh)
+ {
+ dwRet |= fMATCH_PARTIAL;
+ }
+ break;
+
+ default:
+ ASSERT(FALSE);
+ dwRet=0;
+ goto end;
+ }
+ if (dwRet) break; // break out of while loop if we got something
+ }
+ pmn=pmn->pmnNext;
+
+ }
+
+ if (!pmn)
+ {
+ dwRet=0;
+ }
+ else
+ {
+ ASSERT(dwRet && !_strnicmp(pc, pmn->mr.pb, dwcbMin));
+ }
+
+ PRINTF2("Exiting mn_find_match(-, [%s], -) returing 0x%lx\n", DBGPSZ,
+ (unsigned long) dwRet);
+
+end:
+ return dwRet;
+}
diff --git a/private/unimodem/new/match/mt.h b/private/unimodem/new/match/mt.h
new file mode 100644
index 000000000..56028c84a
--- /dev/null
+++ b/private/unimodem/new/match/mt.h
@@ -0,0 +1,28 @@
+#ifndef _MT_
+#define _MT_
+
+#define fMATCH_PARTIAL (0x1<<0)
+#define fMATCH_COMPLETE (0x1<<1)
+
+
+typedef struct
+{
+ DWORD dwLen;
+ CHAR *pb;
+ LPVOID pv;
+
+} MATCHREC, *PMATCHREC;
+
+typedef DWORD HMATCHTREE;
+
+HMATCHTREE mtCreateTree(PMATCHREC rgmr, DWORD dwcmr);
+void mtFreeTree (HMATCHTREE hmt);
+DWORD mtFindMatch (HMATCHTREE hmt, PMATCHREC pmr);
+
+#ifdef DEBUG
+void mtDumpTree (HMATCHTREE hmt);
+#else // !DEBUG
+#define mtDumpTree(_mht) ((void) 0)
+#endif // !DEBUG
+
+#endif // _MT_
diff --git a/private/unimodem/new/match/resp.c b/private/unimodem/new/match/resp.c
new file mode 100644
index 000000000..de60e4c99
--- /dev/null
+++ b/private/unimodem/new/match/resp.c
@@ -0,0 +1,3535 @@
+#include <windows.h>
+
+CHAR *rgpszSimpleResp[] =
+{
+ "How",
+ "Now",
+ "Brown",
+ "Cow!",
+ NULL
+};
+
+CHAR *rgpszComplexResp[] =
+{
+"-SFA",
+"-SMD",
+"-SRA",
+"-SRC:",
+"-SRQ",
+"-SSV",
+"-STO",
+"-SVM",
+"+F4",
+"+F4/+FCERROR",
+"+F4@",
+"+FC-FCERROR",
+"+FC@",
+"+FCERROR",
+"+FCON",
+"@",
+"@#-SFA@#",
+"@#-SMD@#",
+"@#-SRA@#",
+"@#-SRC:@#",
+"@#-SRQ@#",
+"@#-SSV@#",
+"@#-STO@#",
+"@#-SVM@#",
+"@# CONNECT 1200 LAPM COMPRESSED@#",
+"@#+FCERROR@@#",
+"@#+FCERROR@#",
+"@#@#NO CARRIER@#",
+"@#ABORD@#",
+"@#ABORTED@#",
+"@#AUTOLOGON FAILED@#",
+"@#BLACKLISTED@#",
+"@#BUSY@#",
+"@#C@#",
+"@#CALL LOCKED:BLACKLISTED@#",
+"@#CARRIER 1200@#",
+"@#CARRIER 2400@#",
+"@#CARRIER 300@#",
+"@#CARRIER 600@#",
+"@#CARRIER 1200 V.34@#",
+"@#CARRIER 1200/75",
+"@#CARRIER 1200/75 V.23@#",
+"@#CARRIER 1200/75/VFC@#",
+"@#CARRIER 1200/75@#",
+"@#CARRIER 1200/VFC@#",
+"@#CARRIER 1200@#",
+"@#CARRIER 12000/VFC@#",
+"@#CARRIER 12000@#",
+"@#CARRIER 1200TX/75RX V.23@#",
+"@#CARRIER 14400 V.34@#",
+"@#CARRIER 14400/VFC@ @#",
+"@#CARRIER 14400/VFC@#",
+"@#CARRIER 14400@#",
+"@#CARRIER 16800 V.34@#",
+"@#CARRIER 16800/VFC@@#",
+"@#CARRIER 16800/VFC@#",
+"@#CARRIER 16800@#",
+"@#CARRIER 19200 V.34@#",
+"@#CARRIER 19200/VFC@@#",
+"@#CARRIER 19200/VFC@#",
+"@#CARRIER 19200@#",
+"@#CARRIER 21600 V.34@#",
+"@#CARRIER 21600/VFC@@#",
+"@#CARRIER 21600/VFC@#",
+"@#CARRIER 21600@#",
+"@#CARRIER 2400 V.34@#",
+"@#CARRIER 2400/VFC@#",
+"@#CARRIER 2400@#",
+"@#CARRIER 24000 V.34@#",
+"@#CARRIER 24000/VFC@@#",
+"@#CARRIER 24000/VFC@#",
+"@#CARRIER 24000@#",
+"@#CARRIER 26400 V.34@#",
+"@#CARRIER 26400/VFC@@#",
+"@#CARRIER 26400/VFC@#",
+"@#CARRIER 26400@#",
+"@#CARRIER 28800 V.34@#",
+"@#CARRIER 28800/VFC@@#",
+"@#CARRIER 28800/VFC@#",
+"@#CARRIER 28800@#",
+"@#CARRIER 300 V.34@#",
+"@#CARRIER 300/VFC@#",
+"@#CARRIER 300@#",
+"@#CARRIER 4800 V.34@#",
+"@#CARRIER 4800/VFC@#",
+"@#CARRIER 4800@#",
+"@#CARRIER 600@#",
+"@#CARRIER 64000@#",
+"@#CARRIER 7200 V.34@#",
+"@#CARRIER 7200/VFC@#",
+"@#CARRIER 7200@#",
+"@#CARRIER 75/1200",
+"@#CARRIER 75/1200 V.23@#",
+"@#CARRIER 75/1200/VFC@#",
+"@#CARRIER 75/1200@#",
+"@#CARRIER 75TX/1200RX V.23@#",
+"@#CARRIER 9600 V.34@#",
+"@#CARRIER 9600/VFC@#",
+"@#CARRIER 9600@#",
+"@#CED@# ",
+"@#COMPRESSION :CLASS5@#",
+"@#COMPRESSION NONE@#",
+"@#COMPRESSION V.42BIS@#",
+"@#COMPRESSION: ADC",
+"@#COMPRESSION: ADC@#",
+"@#COMPRESSION: CLASS 5@#",
+"@#COMPRESSION: CLASS5@#",
+"@#COMPRESSION: MNP5@#",
+"@#COMPRESSION: NONE@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V42BIS@#",
+"@#COMPRESSION:CLASS 5@#",
+"@#COMPRESSION:NONE@#",
+"@#COMPRESSION:V.42bis@#",
+"@#COMPRESSION:V.42BIS@#",
+"@#CONNECT 0600/ARQ@#",
+"@#CONNECT 0600/LAP-M/COMPRESSION@#",
+"@#CONNECT 0600/LAP-M@#",
+"@#CONNECT 0600/LAPM/COMP@#",
+"@#CONNECT 0600/LAPM@#",
+"@#CONNECT 0600/MNP@#",
+"@#CONNECT 0600/NONE@#",
+"@#CONNECT 0600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 0600/REL/COMP@#",
+"@#CONNECT 0600/REL@#",
+"@#CONNECT 0600/V42BIS@#",
+"@#CONNECT 0600@#",
+"@#CONNECT 112000/ARQ/MLP /V120/V42b@#",
+"@#CONNECT 112000/ARQ/MLP /V120@#",
+"@#CONNECT 112000@#",
+"@#CONNECT 115,200/ARQ@#",
+"@#CONNECT 115,200/LAP-M/COMPRESSION@#",
+"@#CONNECT 115,200/LAP-M@#",
+"@#CONNECT 115,200/LAPM/COMP@#",
+"@#CONNECT 115,200/LAPM@#",
+"@#CONNECT 115,200/MNP@#",
+"@#CONNECT 115,200/NONE@#",
+"@#CONNECT 115,200/REL/COMP@#",
+"@#CONNECT 115,200/REL@#",
+"@#CONNECT 115,200/V42@#",
+"@#CONNECT 115,200/V42BIS@#",
+"@#CONNECT 115,200@#",
+"@#CONNECT 115200 ALT / MNP5@#",
+"@#CONNECT 115200 ALT /MNP 5@#",
+"@#CONNECT 115200 ALT@#",
+"@#CONNECT 115200 LAPM / V.42bis@#",
+"@#CONNECT 115200 LAPM /V.42bis@#",
+"@#CONNECT 115200 LAPM@#",
+"@#CONNECT 115200 REL/MNP5@#",
+"@#CONNECT 115200 REL@#",
+"@#CONNECT 115200/ARQ@#",
+"@#CONNECT 115200/LAP-M/COMPRESSION@#",
+"@#CONNECT 115200/LAP-M@#",
+"@#CONNECT 115200/LAPM/COMP@#",
+"@#CONNECT 115200/LAPM@#",
+"@#CONNECT 115200/MNP COMPRESSED@#",
+"@#CONNECT 115200/MNP@#",
+"@#CONNECT 115200/NONE@#",
+"@#CONNECT 115200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 115200/REL-LAPM@#",
+"@#CONNECT 115200/REL-V.42@#",
+"@#CONNECT 115200/REL/COMP@#",
+"@#CONNECT 115200/REL@#",
+"@#CONNECT 115200/V42@#",
+"@#CONNECT 115200/V42BIS@#",
+"@#CONNECT 115200/VBIS@#",
+"@#CONNECT 115200@#",
+"@#CONNECT 115200T/V42BIS@#",
+"@#CONNECT 1200 ALT / MNP5@#",
+"@#CONNECT 1200 ALT /MNP 5@#",
+"@#CONNECT 1200 ALT@#",
+"@#CONNECT 1200 EC/V42BIS@#",
+"@#CONNECT 1200 EC@#",
+"@#CONNECT 1200 LAPM / V.42bis@#",
+"@#CONNECT 1200 LAPM /V.42bis@#",
+"@#CONNECT 1200 LAPM COMPRESSED@#",
+"@#CONNECT 1200 LAPM@#",
+"@#CONNECT 1200 NORMAL@#",
+"@#CONNECT 1200 REL/MNP5@#",
+"@#CONNECT 1200 REL/V42@#",
+"@#CONNECT 1200 REL/V42BIS@#",
+"@#CONNECT 1200 REL@#",
+"@#CONNECT 1200 RELIABLE COMPRESSED@#",
+"@#CONNECT 1200 RELIABLE@#",
+"@#CONNECT 1200 V.42@#",
+"@#CONNECT 1200/75",
+"@#CONNECT 1200/75/ARQ@#",
+"@#CONNECT 1200/75/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200/75/LAP-M@#",
+"@#CONNECT 1200/75/LAPM/COMP@#",
+"@#CONNECT 1200/75/LAPM@#",
+"@#CONNECT 1200/75/MNP@#",
+"@#CONNECT 1200/75/NONE@#",
+"@#CONNECT 1200/75/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200/75/REL/COMP@#",
+"@#CONNECT 1200/75/REL@#",
+"@#CONNECT 1200/75/V42@#",
+"@#CONNECT 1200/75/V42BIS@#",
+"@#CONNECT 1200/75@#",
+"@#CONNECT 1200/ARQ/MNP4@#",
+"@#CONNECT 1200/ARQ/MNP5@#",
+"@#CONNECT 1200/ARQ/V.42@#",
+"@#CONNECT 1200/ARQ/V.42bis@#",
+"@#CONNECT 1200/ARQ/V22 /MNP4@#",
+"@#CONNECT 1200/ARQ/V22 /MNP5@#",
+"@#CONNECT 1200/ARQ/V22 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22 /V42 @#",
+"@#CONNECT 1200/ARQ/V22 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22 /V42b@#",
+"@#CONNECT 1200/ARQ/V22/MNP4@#",
+"@#CONNECT 1200/ARQ/V22/MNP5@#",
+"@#CONNECT 1200/ARQ/V22/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22/V42 @#",
+"@#CONNECT 1200/ARQ/V22/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22/V42b@#",
+"@#CONNECT 1200/ARQ/V22b /MNP4@#",
+"@#CONNECT 1200/ARQ/V22b /MNP5@#",
+"@#CONNECT 1200/ARQ/V22b /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22b /V42 @#",
+"@#CONNECT 1200/ARQ/V22b /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22b /V42b@#",
+"@#CONNECT 1200/ARQ/V22b/MNP4@#",
+"@#CONNECT 1200/ARQ/V22b/MNP5@#",
+"@#CONNECT 1200/ARQ/V22b/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22b/V42 @#",
+"@#CONNECT 1200/ARQ/V22b/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22b/V42b@#",
+"@#CONNECT 1200/ARQ/V32 /MNP4@#",
+"@#CONNECT 1200/ARQ/V32 /MNP5@#",
+"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42 @#",
+"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42b@#",
+"@#CONNECT 1200/ARQ/V32 /MNP4@#",
+"@#CONNECT 1200/ARQ/V32 /MNP5@#",
+"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42 @#",
+"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42b@#",
+"@#CONNECT 1200/ARQ/V32b /MNP4@#",
+"@#CONNECT 1200/ARQ/V32b /MNP5@#",
+"@#CONNECT 1200/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32b /V42 @#",
+"@#CONNECT 1200/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32b /V42b@#",
+"@#CONNECT 1200/ARQ/V32b/MNP4@#",
+"@#CONNECT 1200/ARQ/V32b/MNP5@#",
+"@#CONNECT 1200/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32b/V42 @#",
+"@#CONNECT 1200/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32b/V42b@#",
+"@#CONNECT 1200/ARQ/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V42 @#",
+"@#CONNECT 1200/ARQ/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V42b@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 @#",
+"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42b@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 @#",
+"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42b@#",
+"@#CONNECT 1200/ARQ@#",
+"@#CONNECT 1200/COMP@#",
+"@#CONNECT 1200/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200/LAP-M@#",
+"@#CONNECT 1200/LAPM/COMP@#",
+"@#CONNECT 1200/LAPM/V42BIS@#",
+"@#CONNECT 1200/LAPM@#",
+"@#CONNECT 1200/MNP COMPRESSED@#",
+"@#CONNECT 1200/MNP@#",
+"@#CONNECT 1200/NONE@#",
+"@#CONNECT 1200/NOR@#",
+"@#CONNECT 1200/REL-LAPM-COMP@#",
+"@#CONNECT 1200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200/REL-LAPM@#",
+"@#CONNECT 1200/REL-MNP-COMP@#",
+"@#CONNECT 1200/REL-MNP@#",
+"@#CONNECT 1200/REL-V.42@#",
+"@#CONNECT 1200/REL 1@# ",
+"@#CONNECT 1200/REL 2@# ",
+"@#CONNECT 1200/REL 3@# ",
+"@#CONNECT 1200/REL 4@# ",
+"@#CONNECT 1200/REL 5@# ",
+"@#CONNECT 1200/REL COMP@#",
+"@#CONNECT 1200/REL COMPRESSED@#",
+"@#CONNECT 1200/REL/COMP@#",
+"@#CONNECT 1200/REL@#",
+"@#CONNECT 1200/RELC@#",
+"@#CONNECT 1200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 1200/RELIABLE/LAPM@#",
+"@#CONNECT 1200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 1200/RELIABLE/MNP@#",
+"@#CONNECT 1200/V42@#",
+"@#CONNECT 1200/V42B@#",
+"@#CONNECT 1200/V42BIS@#",
+"@#CONNECT 1200@#",
+"@#CONNECT 12000 ALT / MNP5@#",
+"@#CONNECT 12000 ALT /MNP 5@#",
+"@#CONNECT 12000 ALT@#",
+"@#CONNECT 12000 EC/V42@#",
+"@#CONNECT 12000 EC/V42BIS@#",
+"@#CONNECT 12000 EC@#",
+"@#CONNECT 12000 LAPM / V.42bis@#",
+"@#CONNECT 12000 LAPM /V.42bis@#",
+"@#CONNECT 12000 LAPM COMPRESSED@#",
+"@#CONNECT 12000 LAPM@#",
+"@#CONNECT 12000 REL/MNP5@#",
+"@#CONNECT 12000 REL/V42@#",
+"@#CONNECT 12000 REL/V42BIS@#",
+"@#CONNECT 12000 REL@#",
+"@#CONNECT 12000 RELIABLE COMPRESSED@#",
+"@#CONNECT 12000 RELIABLE@#",
+"@#CONNECT 12000/ARQ/CELL /MNP4@#",
+"@#CONNECT 12000/ARQ/CELL /MNP5@#",
+"@#CONNECT 12000/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/CELL /V42 @#",
+"@#CONNECT 12000/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/CELL /V42b@#",
+"@#CONNECT 12000/ARQ/CELL/MNP4@#",
+"@#CONNECT 12000/ARQ/CELL/MNP5@#",
+"@#CONNECT 12000/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/CELL/V42 @#",
+"@#CONNECT 12000/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/CELL/V42b@#",
+"@#CONNECT 12000/ARQ/MNP4@#",
+"@#CONNECT 12000/ARQ/MNP5@#",
+"@#CONNECT 12000/ARQ/V.34/MNP4@#",
+"@#CONNECT 12000/ARQ/V.34/MNP5@#",
+"@#CONNECT 12000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V.34/V42 @#",
+"@#CONNECT 12000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V.34/V42b@#",
+"@#CONNECT 12000/ARQ/V.42@#",
+"@#CONNECT 12000/ARQ/V.42bis@#",
+"@#CONNECT 12000/ARQ/V32b /MNP4@#",
+"@#CONNECT 12000/ARQ/V32b /MNP5@#",
+"@#CONNECT 12000/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V32b /V42 @#",
+"@#CONNECT 12000/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V32b /V42b@#",
+"@#CONNECT 12000/ARQ/V32b/MNP4@#",
+"@#CONNECT 12000/ARQ/V32b/MNP5@#",
+"@#CONNECT 12000/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V32b/V42 @#",
+"@#CONNECT 12000/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V32b/V42b@#",
+"@#CONNECT 12000/ARQ/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V42 @#",
+"@#CONNECT 12000/ARQ/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V42b@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP4@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP5@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 @#",
+"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42b@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP4@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP5@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 @#",
+"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42b@#",
+"@#CONNECT 12000/ARQ@#",
+"@#CONNECT 12000/COMP@#",
+"@#CONNECT 12000/LAP-M/COMPRESSION@#",
+"@#CONNECT 12000/LAP-M@#",
+"@#CONNECT 12000/LAPM/COMP@#",
+"@#CONNECT 12000/LAPM/V42BIS@#",
+"@#CONNECT 12000/LAPM@#",
+"@#CONNECT 12000/MNP COMPRESSED@#",
+"@#CONNECT 12000/MNP@#",
+"@#CONNECT 12000/NONE@#",
+"@#CONNECT 12000/NOR@#",
+"@#CONNECT 12000/REL-LAPM-COMP@#",
+"@#CONNECT 12000/REL-LAPM V.42 BIS@#",
+"@#CONNECT 12000/REL-LAPM@#",
+"@#CONNECT 12000/REL-MNP-COMP@#",
+"@#CONNECT 12000/REL-MNP@#",
+"@#CONNECT 12000/REL-V.42@#",
+"@#CONNECT 12000/REL COMP@#",
+"@#CONNECT 12000/REL COMPRESSED@#",
+"@#CONNECT 12000/REL/COMP@#",
+"@#CONNECT 12000/REL@#",
+"@#CONNECT 12000/RELC@#",
+"@#CONNECT 12000/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 12000/RELIABLE/LAPM@#",
+"@#CONNECT 12000/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 12000/RELIABLE/MNP@#",
+"@#CONNECT 12000/V42@#",
+"@#CONNECT 12000/V42B@#",
+"@#CONNECT 12000/V42BIS@#",
+"@#CONNECT 12000@#",
+"@#CONNECT 12000T/V42BIS@#",
+"@#CONNECT 1200T/V42BIS@#",
+"@#CONNECT 1200TX/75RX REL/MNP5@#",
+"@#CONNECT 1200TX/75RX REL@#",
+"@#CONNECT 1200TX/75RX/ARQ@#",
+"@#CONNECT 1200TX/75RX/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200TX/75RX/LAP-M@#",
+"@#CONNECT 1200TX/75RX/LAPM/COMP@#",
+"@#CONNECT 1200TX/75RX/LAPM@#",
+"@#CONNECT 1200TX/75RX/MNP@#",
+"@#CONNECT 1200TX/75RX/NONE@#",
+"@#CONNECT 1200TX/75RX/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200TX/75RX/REL/COMP@#",
+"@#CONNECT 1200TX/75RX/REL@#",
+"@#CONNECT 1200TX/75RX/V42@#",
+"@#CONNECT 1200TX/75RX/V42BIS@#",
+"@#CONNECT 1200TX/75RX@#",
+"@#CONNECT 12200/ARQ/V.34/MNP4@#",
+"@#CONNECT 12200/ARQ/V.34/MNP5@#",
+"@#CONNECT 12200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 12200/ARQ/V.34/V42 @#",
+"@#CONNECT 12200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 12200/ARQ/V.34/V42b@#",
+"@#CONNECT 12200@#",
+"@#CONNECT 1275@#",
+"@#CONNECT 128000/ARQ/MLP /X.75/V42b@#",
+"@#CONNECT 128000/ARQ/MLP /X.75@#",
+"@#CONNECT 128000@#",
+"@#CONNECT 14400 ALT / MNP5@#",
+"@#CONNECT 14400 ALT /MNP 5@#",
+"@#CONNECT 14400 ALT@#",
+"@#CONNECT 14400 EC/V42@#",
+"@#CONNECT 14400 EC/V42BIS@#",
+"@#CONNECT 14400 EC@#",
+"@#CONNECT 14400 LAPM / V.42bis@#",
+"@#CONNECT 14400 LAPM /V.42bis@#",
+"@#CONNECT 14400 LAPM COMPRESSED@#",
+"@#CONNECT 14400 LAPM@#",
+"@#CONNECT 14400 NORMAL@#",
+"@#CONNECT 14400 REL/MNP5@#",
+"@#CONNECT 14400 REL/V42@#",
+"@#CONNECT 14400 REL/V42BIS@#",
+"@#CONNECT 14400 REL@#",
+"@#CONNECT 14400 RELIABLE COMPRESSED@#",
+"@#CONNECT 14400 RELIABLE@#",
+"@#CONNECT 14400 V.42@#",
+"@#CONNECT 14400/ARQ/CELL /MNP4@#",
+"@#CONNECT 14400/ARQ/CELL /MNP5@#",
+"@#CONNECT 14400/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/CELL /V42 @#",
+"@#CONNECT 14400/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/CELL /V42b@#",
+"@#CONNECT 14400/ARQ/CELL/MNP4@#",
+"@#CONNECT 14400/ARQ/CELL/MNP5@#",
+"@#CONNECT 14400/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/CELL/V42 @#",
+"@#CONNECT 14400/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/CELL/V42b@#",
+"@#CONNECT 14400/ARQ/MNP4@#",
+"@#CONNECT 14400/ARQ/MNP5@#",
+"@#CONNECT 14400/ARQ/V.34/MNP4@#",
+"@#CONNECT 14400/ARQ/V.34/MNP5@#",
+"@#CONNECT 14400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V.34/V42 @#",
+"@#CONNECT 14400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V.34/V42b@#",
+"@#CONNECT 14400/ARQ/V.42@#",
+"@#CONNECT 14400/ARQ/V.42bis@#",
+"@#CONNECT 14400/ARQ/V32b /MNP4@#",
+"@#CONNECT 14400/ARQ/V32b /MNP5@#",
+"@#CONNECT 14400/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V32b /V42 @#",
+"@#CONNECT 14400/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V32b /V42b@#",
+"@#CONNECT 14400/ARQ/V32b/MNP4@#",
+"@#CONNECT 14400/ARQ/V32b/MNP5@#",
+"@#CONNECT 14400/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V32b/V42 @#",
+"@#CONNECT 14400/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V32b/V42b@#",
+"@#CONNECT 14400/ARQ/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V42 @#",
+"@#CONNECT 14400/ARQ/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V42b@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 @#",
+"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42b@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 @#",
+"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42b@#",
+"@#CONNECT 14400/ARQ@#",
+"@#CONNECT 14400/COMP@#",
+"@#CONNECT 14400/LAP-M/COMPRESSION@#",
+"@#CONNECT 14400/LAP-M@#",
+"@#CONNECT 14400/LAPM/COMP@#",
+"@#CONNECT 14400/LAPM/V42BIS@#",
+"@#CONNECT 14400/LAPM@#",
+"@#CONNECT 14400/MNP COMPRESSED@#",
+"@#CONNECT 14400/MNP@#",
+"@#CONNECT 14400/NONE@#",
+"@#CONNECT 14400/NOR@#",
+"@#CONNECT 14400/REL-LAPM-COMP@#",
+"@#CONNECT 14400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 14400/REL-LAPM@#",
+"@#CONNECT 14400/REL-MNP-COMP@#",
+"@#CONNECT 14400/REL-MNP@#",
+"@#CONNECT 14400/REL-V.42@#",
+"@#CONNECT 14400/REL COMP@#",
+"@#CONNECT 14400/REL COMPRESSED@#",
+"@#CONNECT 14400/REL/COMP@#",
+"@#CONNECT 14400/REL@#",
+"@#CONNECT 14400/RELC@#",
+"@#CONNECT 14400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 14400/RELIABLE/LAPM@#",
+"@#CONNECT 14400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 14400/RELIABLE/MNP@#",
+"@#CONNECT 14400/V42@#",
+"@#CONNECT 14400/V42B@#",
+"@#CONNECT 14400/V42BIS@#",
+"@#CONNECT 14400@#",
+"@#CONNECT 14400T RELIABLE@#",
+"@#CONNECT 14400T V.42@#",
+"@#CONNECT 14400T/V42BIS@#",
+"@#CONNECT 14600/ARQ/V.34/MNP4@#",
+"@#CONNECT 14600/ARQ/V.34/MNP5@#",
+"@#CONNECT 14600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 14600/ARQ/V.34/V42 @#",
+"@#CONNECT 14600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 14600/ARQ/V.34/V42b@#",
+"@#CONNECT 14600@#",
+"@#CONNECT 16000 EC/V42BIS@#",
+"@#CONNECT 16800 EC/V42@#",
+"@#CONNECT 16800 EC/V42BIS@#",
+"@#CONNECT 16800 EC@#",
+"@#CONNECT 16800 LAPM COMPRESSED@#",
+"@#CONNECT 16800 LAPM@#",
+"@#CONNECT 16800 REL/MNP5@#",
+"@#CONNECT 16800 REL/V42@#",
+"@#CONNECT 16800 REL/V42BIS@#",
+"@#CONNECT 16800 REL@#",
+"@#CONNECT 16800 RELIABLE COMPRESSED@#",
+"@#CONNECT 16800 RELIABLE@#",
+"@#CONNECT 16800/ARQ/MNP4@#",
+"@#CONNECT 16800/ARQ/MNP5@#",
+"@#CONNECT 16800/ARQ/V.34/MNP4@#",
+"@#CONNECT 16800/ARQ/V.34/MNP5@#",
+"@#CONNECT 16800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/V.34/V42 @#",
+"@#CONNECT 16800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/V.34/V42b@#",
+"@#CONNECT 16800/ARQ/V.42@#",
+"@#CONNECT 16800/ARQ/V.42bis@#",
+"@#CONNECT 16800/ARQ/V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/V42 @#",
+"@#CONNECT 16800/ARQ/V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/V42b@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 @#",
+"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42b@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 @#",
+"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42b@#",
+"@#CONNECT 16800/ARQ@#",
+"@#CONNECT 16800/COMP@#",
+"@#CONNECT 16800/LAP-M/COMPRESSION@#",
+"@#CONNECT 16800/LAP-M@#",
+"@#CONNECT 16800/LAPM/COMP@#",
+"@#CONNECT 16800/LAPM/V42BIS@#",
+"@#CONNECT 16800/LAPM@#",
+"@#CONNECT 16800/MNP COMPRESSED@#",
+"@#CONNECT 16800/MNP@#",
+"@#CONNECT 16800/NONE@#",
+"@#CONNECT 16800/NOR@#",
+"@#CONNECT 16800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 16800/REL-LAPM@#",
+"@#CONNECT 16800/REL-V.42@#",
+"@#CONNECT 16800/REL COMP@#",
+"@#CONNECT 16800/REL/COMP@#",
+"@#CONNECT 16800/REL@#",
+"@#CONNECT 16800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 16800/RELIABLE/LAPM@#",
+"@#CONNECT 16800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 16800/RELIABLE/MNP@#",
+"@#CONNECT 16800/V42@#",
+"@#CONNECT 16800/V42BIS@#",
+"@#CONNECT 16800@#",
+"@#CONNECT 16800T/V42BIS@#",
+"@#CONNECT 17000/ARQ/V.34/MNP4@#",
+"@#CONNECT 17000/ARQ/V.34/MNP5@#",
+"@#CONNECT 17000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 17000/ARQ/V.34/V42 @#",
+"@#CONNECT 17000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 17000/ARQ/V.34/V42b@#",
+"@#CONNECT 17000@#",
+"@#CONNECT 19200 ALT / MNP5@#",
+"@#CONNECT 19200 ALT /MNP 5@#",
+"@#CONNECT 19200 ALT@#",
+"@#CONNECT 19200 EC/BIS@#",
+"@#CONNECT 19200 EC/V42@#",
+"@#CONNECT 19200 EC/V42BIZ@#",
+"@#CONNECT 19200 EC@#",
+"@#CONNECT 19200 LAPM / V.42bis@#",
+"@#CONNECT 19200 LAPM /V.42bis@#",
+"@#CONNECT 19200 LAPM COMPRESSED@#",
+"@#CONNECT 19200 LAPM@#",
+"@#CONNECT 19200 REL/MNP5@#",
+"@#CONNECT 19200 REL/V42@#",
+"@#CONNECT 19200 REL/V42BIS@#",
+"@#CONNECT 19200 REL@#",
+"@#CONNECT 19200 RELIABLE COMPRESSED@#",
+"@#CONNECT 19200 RELIABLE@#",
+"@#CONNECT 19200/ARQ/MNP4@#",
+"@#CONNECT 19200/ARQ/MNP5@#",
+"@#CONNECT 19200/ARQ/V.34/MNP4@#",
+"@#CONNECT 19200/ARQ/V.34/MNP5@#",
+"@#CONNECT 19200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/V.34/V42 @#",
+"@#CONNECT 19200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/V.34/V42b@#",
+"@#CONNECT 19200/ARQ/V.42@#",
+"@#CONNECT 19200/ARQ/V.42bis@#",
+"@#CONNECT 19200/ARQ/V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/V42 @#",
+"@#CONNECT 19200/ARQ/V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/V42b@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 @#",
+"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42b@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 @#",
+"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42b@#",
+"@#CONNECT 19200/ARQ@#",
+"@#CONNECT 19200/COMP@#",
+"@#CONNECT 19200/LAP-M/COMPRESSION@#",
+"@#CONNECT 19200/LAP-M@#",
+"@#CONNECT 19200/LAPM/COMP@#",
+"@#CONNECT 19200/LAPM/V42BIS@#",
+"@#CONNECT 19200/LAPM@#",
+"@#CONNECT 19200/MNP COMPRESSED@#",
+"@#CONNECT 19200/MNP@#",
+"@#CONNECT 19200/NONE@#",
+"@#CONNECT 19200/NOR@#",
+"@#CONNECT 19200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 19200/REL-LAPM@#",
+"@#CONNECT 19200/REL-V.42@#",
+"@#CONNECT 19200/REL COMP@#",
+"@#CONNECT 19200/REL/COMP@#",
+"@#CONNECT 19200/REL@#",
+"@#CONNECT 19200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 19200/RELIABLE/LAPM@#",
+"@#CONNECT 19200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 19200/RELIABLE/MNP@#",
+"@#CONNECT 19200/V.110@#",
+"@#CONNECT 19200/V42@#",
+"@#CONNECT 19200/V42BIS@#",
+"@#CONNECT 19200@#",
+"@#CONNECT 19200T/V42BIS@#",
+"@#CONNECT 19400/ARQ/V.34/MNP4@#",
+"@#CONNECT 19400/ARQ/V.34/MNP5@#",
+"@#CONNECT 19400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 19400/ARQ/V.34/V42 @#",
+"@#CONNECT 19400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 19400/ARQ/V.34/V42b@#",
+"@#CONNECT 19400@#",
+"@#CONNECT 21600 LAPM COMPRESSED@#",
+"@#CONNECT 21600 LAPM@#",
+"@#CONNECT 21600 REL/MNP5@#",
+"@#CONNECT 21600 REL@#",
+"@#CONNECT 21600 RELIABLE COMPRESSED@#",
+"@#CONNECT 21600 RELIABLE@#",
+"@#CONNECT 21600/ARQ/V.34/MNP4@#",
+"@#CONNECT 21600/ARQ/V.34/MNP5@#",
+"@#CONNECT 21600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 21600/ARQ/V.34/V42 @#",
+"@#CONNECT 21600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 21600/ARQ/V.34/V42b@#",
+"@#CONNECT 21600/ARQ@#",
+"@#CONNECT 21600/COMP@#",
+"@#CONNECT 21600/LAP-M/COMPRESSION@#",
+"@#CONNECT 21600/LAP-M@#",
+"@#CONNECT 21600/LAPM/COMP@#",
+"@#CONNECT 21600/LAPM/V42BIS@#",
+"@#CONNECT 21600/LAPM@#",
+"@#CONNECT 21600/MNP COMPRESSED@#",
+"@#CONNECT 21600/MNP@#",
+"@#CONNECT 21600/NONE@#",
+"@#CONNECT 21600/NOR@#",
+"@#CONNECT 21600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 21600/REL-LAPM@#",
+"@#CONNECT 21600/REL-V.42@#",
+"@#CONNECT 21600/REL COMP@#",
+"@#CONNECT 21600/REL/COMP@#",
+"@#CONNECT 21600/REL@#",
+"@#CONNECT 21600/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 21600/RELIABLE/LAPM@#",
+"@#CONNECT 21600/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 21600/RELIABLE/MNP@#",
+"@#CONNECT 21600/V42@#",
+"@#CONNECT 21600/V42BIS@#",
+"@#CONNECT 21600@#",
+"@#CONNECT 21600T/V42BIS@#",
+"@#CONNECT 21800/ARQ/V.34/MNP4@#",
+"@#CONNECT 21800/ARQ/V.34/MNP5@#",
+"@#CONNECT 21800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 21800/ARQ/V.34/V42 @#",
+"@#CONNECT 21800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 21800/ARQ/V.34/V42b@#",
+"@#CONNECT 21800@#",
+"@#CONNECT 230400/ARQ@#",
+"@#CONNECT 230400/LAP-M@#",
+"@#CONNECT 230400/LAPM/COMP@#",
+"@#CONNECT 230400/LAPM@#",
+"@#CONNECT 230400/MNP@#",
+"@#CONNECT 230400/NONE@#",
+"@#CONNECT 230400/REL/COMP@#",
+"@#CONNECT 230400/REL@#",
+"@#CONNECT 230400/V42BIS@#",
+"@#CONNECT 230400@#",
+"@#CONNECT 240/MNP@#",
+"@#CONNECT 2400 @#",
+"@#CONNECT 2400 ALT / MNP5@#",
+"@#CONNECT 2400 ALT /MNP 5@#",
+"@#CONNECT 2400 ALT@#",
+"@#CONNECT 2400 EC/V42@#",
+"@#CONNECT 2400 EC/V42BIS@#",
+"@#CONNECT 2400 EC@#",
+"@#CONNECT 2400 LAPM / V.42bis@#",
+"@#CONNECT 2400 LAPM /V.42bis@#",
+"@#CONNECT 2400 LAPM COMPRESSED@#",
+"@#CONNECT 2400 LAPM@#",
+"@#CONNECT 2400 NORMAL@#",
+"@#CONNECT 2400 REL/MNP5@#",
+"@#CONNECT 2400 REL/V42@#",
+"@#CONNECT 2400 REL/V42BIS@#",
+"@#CONNECT 2400 REL@#",
+"@#CONNECT 2400 RELIABLE COMPRESSED@#",
+"@#CONNECT 2400 RELIABLE@#",
+"@#CONNECT 2400 V.42@#",
+"@#CONNECT 2400/ARQ/CELL /MNP4@#",
+"@#CONNECT 2400/ARQ/CELL /MNP5@#",
+"@#CONNECT 2400/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/CELL /V42 @#",
+"@#CONNECT 2400/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/CELL /V42b@#",
+"@#CONNECT 2400/ARQ/CELL/MNP4@#",
+"@#CONNECT 2400/ARQ/CELL/MNP5@#",
+"@#CONNECT 2400/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/CELL/V42 @#",
+"@#CONNECT 2400/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/CELL/V42b@#",
+"@#CONNECT 2400/ARQ/MNP4@#",
+"@#CONNECT 2400/ARQ/MNP5@#",
+"@#CONNECT 2400/ARQ/V.34/MNP4@#",
+"@#CONNECT 2400/ARQ/V.34/MNP5@#",
+"@#CONNECT 2400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V.34/V42 @#",
+"@#CONNECT 2400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V.34/V42b@#",
+"@#CONNECT 2400/ARQ/V.42@#",
+"@#CONNECT 2400/ARQ/V.42bis@#",
+"@#CONNECT 2400/ARQ/V22b /MNP4@#",
+"@#CONNECT 2400/ARQ/V22b /MNP5@#",
+"@#CONNECT 2400/ARQ/V22b /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V22b /V42 @#",
+"@#CONNECT 2400/ARQ/V22b /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V22b /V42b@#",
+"@#CONNECT 2400/ARQ/V22b/MNP4@#",
+"@#CONNECT 2400/ARQ/V22b/MNP5@#",
+"@#CONNECT 2400/ARQ/V22b/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V22b/V42 @#",
+"@#CONNECT 2400/ARQ/V22b/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V22b/V42b@#",
+"@#CONNECT 2400/ARQ/V32 /MNP4@#",
+"@#CONNECT 2400/ARQ/V32 /MNP5@#",
+"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42 @#",
+"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42b@#",
+"@#CONNECT 2400/ARQ/V32 /MNP4@#",
+"@#CONNECT 2400/ARQ/V32 /MNP5@#",
+"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42 @#",
+"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42b@#",
+"@#CONNECT 2400/ARQ/V32b /MNP4@#",
+"@#CONNECT 2400/ARQ/V32b /MNP5@#",
+"@#CONNECT 2400/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32b /V42 @#",
+"@#CONNECT 2400/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32b /V42b@#",
+"@#CONNECT 2400/ARQ/V32b/MNP4@#",
+"@#CONNECT 2400/ARQ/V32b/MNP5@#",
+"@#CONNECT 2400/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32b/V42 @#",
+"@#CONNECT 2400/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32b/V42b@#",
+"@#CONNECT 2400/ARQ/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V42 @#",
+"@#CONNECT 2400/ARQ/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V42b@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 @#",
+"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42b@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 @#",
+"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42b@#",
+"@#CONNECT 2400/ARQ@#",
+"@#CONNECT 2400/COMP@#",
+"@#CONNECT 2400/LAP-M/COMPRESSION@#",
+"@#CONNECT 2400/LAP-M@#",
+"@#CONNECT 2400/LAPM/COMP@#",
+"@#CONNECT 2400/LAPM/V42BIS@#",
+"@#CONNECT 2400/LAPM@#",
+"@#CONNECT 2400/MNP COMPRESSED@#",
+"@#CONNECT 2400/MNP@#",
+"@#CONNECT 2400/NONE@#",
+"@#CONNECT 2400/NOR@#",
+"@#CONNECT 2400/REL-LAPM-COMP@#",
+"@#CONNECT 2400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 2400/REL-LAPM@#",
+"@#CONNECT 2400/REL-MNP-COMP@#",
+"@#CONNECT 2400/REL-MNP@#",
+"@#CONNECT 2400/REL-V.42@#",
+"@#CONNECT 2400/REL 1@# ",
+"@#CONNECT 2400/REL 2@# ",
+"@#CONNECT 2400/REL 3@# ",
+"@#CONNECT 2400/REL 4@# ",
+"@#CONNECT 2400/REL 5@# ",
+"@#CONNECT 2400/REL COMP@#",
+"@#CONNECT 2400/REL COMPRESSED@#",
+"@#CONNECT 2400/REL/COMP@#",
+"@#CONNECT 2400/REL@#",
+"@#CONNECT 2400/RELC@#",
+"@#CONNECT 2400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 2400/RELIABLE/LAPM@#",
+"@#CONNECT 2400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 2400/RELIABLE/MNP@#",
+"@#CONNECT 2400/V42@#",
+"@#CONNECT 2400/V42B@#",
+"@#CONNECT 2400/V42BIS@#",
+"@#CONNECT 2400@#",
+"@#CONNECT 24000 LAPM COMPRESSED@#",
+"@#CONNECT 24000 LAPM@#",
+"@#CONNECT 24000 REL/MNP5@#",
+"@#CONNECT 24000 REL@#",
+"@#CONNECT 24000 RELIABLE COMPRESSED@#",
+"@#CONNECT 24000 RELIABLE@#",
+"@#CONNECT 24000/ARQ/V.34/MNP4@#",
+"@#CONNECT 24000/ARQ/V.34/MNP5@#",
+"@#CONNECT 24000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 24000/ARQ/V.34/V42 @#",
+"@#CONNECT 24000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 24000/ARQ/V.34/V42b@#",
+"@#CONNECT 24000/ARQ@#",
+"@#CONNECT 24000/COMP@#",
+"@#CONNECT 24000/LAP-M/COMPRESSION@#",
+"@#CONNECT 24000/LAP-M@#",
+"@#CONNECT 24000/LAPM/COMP@#",
+"@#CONNECT 24000/LAPM/V42BIS@#",
+"@#CONNECT 24000/LAPM@#",
+"@#CONNECT 24000/MNP COMPRESSED@#",
+"@#CONNECT 24000/MNP@#",
+"@#CONNECT 24000/NONE@#",
+"@#CONNECT 24000/NOR@#",
+"@#CONNECT 24000/REL-LAPM V.42 BIS@#",
+"@#CONNECT 24000/REL-LAPM@#",
+"@#CONNECT 24000/REL-V.42@#",
+"@#CONNECT 24000/REL COMP@#",
+"@#CONNECT 24000/REL/COMP@#",
+"@#CONNECT 24000/REL@#",
+"@#CONNECT 24000/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 24000/RELIABLE/LAPM@#",
+"@#CONNECT 24000/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 24000/RELIABLE/MNP@#",
+"@#CONNECT 24000/V42@#",
+"@#CONNECT 24000/V42BIS@#",
+"@#CONNECT 24000@#",
+"@#CONNECT 24000T/V42BIS@#",
+"@#CONNECT 2400T/V42BIS@#",
+"@#CONNECT 24200/ARQ/V.34/MNP4@#",
+"@#CONNECT 24200/ARQ/V.34/MNP5@#",
+"@#CONNECT 24200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 24200/ARQ/V.34/V42 @#",
+"@#CONNECT 24200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 24200/ARQ/V.34/V42b@#",
+"@#CONNECT 24200@#",
+"@#CONNECT 2600/ARQ/V.34/MNP4@#",
+"@#CONNECT 2600/ARQ/V.34/MNP5@#",
+"@#CONNECT 2600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 2600/ARQ/V.34/V42 @#",
+"@#CONNECT 2600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 2600/ARQ/V.34/V42b@#",
+"@#CONNECT 2600@#",
+"@#CONNECT 26400 LAPM COMPRESSED<cR>#",
+"@#CONNECT 26400 LAPM@#",
+"@#CONNECT 26400 REL/MNP5@#",
+"@#CONNECT 26400 REL@#",
+"@#CONNECT 26400 RELIABLE COMPRESSED<cR>#",
+"@#CONNECT 26400 RELIABLE@#",
+"@#CONNECT 26400/ARQ/V.34/MNP4@#",
+"@#CONNECT 26400/ARQ/V.34/MNP5@#",
+"@#CONNECT 26400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 26400/ARQ/V.34/V42 @#",
+"@#CONNECT 26400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 26400/ARQ/V.34/V42b@#",
+"@#CONNECT 26400/ARQ@#",
+"@#CONNECT 26400/COMP@#",
+"@#CONNECT 26400/LAP-M/COMPRESSION@#",
+"@#CONNECT 26400/LAP-M@#",
+"@#CONNECT 26400/LAPM/COMP@#",
+"@#CONNECT 26400/LAPM/V42BIS@#",
+"@#CONNECT 26400/LAPM@#",
+"@#CONNECT 26400/MNP COMPRESSED@#",
+"@#CONNECT 26400/MNP@#",
+"@#CONNECT 26400/NONE@#",
+"@#CONNECT 26400/NOR@#",
+"@#CONNECT 26400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 26400/REL-LAPM@#",
+"@#CONNECT 26400/REL-V.42@#",
+"@#CONNECT 26400/REL COMP@#",
+"@#CONNECT 26400/REL/COMP@#",
+"@#CONNECT 26400/REL@#",
+"@#CONNECT 26400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 26400/RELIABLE/LAPM@#",
+"@#CONNECT 26400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 26400/RELIABLE/MNP@#",
+"@#CONNECT 26400/V42@#",
+"@#CONNECT 26400/V42BIS@#",
+"@#CONNECT 26400@#",
+"@#CONNECT 26400T/V42BIS@#",
+"@#CONNECT 26600/ARQ/V.34/MNP4@#",
+"@#CONNECT 26600/ARQ/V.34/MNP5@#",
+"@#CONNECT 26600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 26600/ARQ/V.34/V42 @#",
+"@#CONNECT 26600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 26600/ARQ/V.34/V42b@#",
+"@#CONNECT 26600@#",
+"@#CONNECT 26800/MNP COMPRESSED@#",
+"@#CONNECT 28800 LAPM COMPRESSED@#",
+"@#CONNECT 28800 LAPM@#",
+"@#CONNECT 28800 REL/MNP5@#",
+"@#CONNECT 28800 REL@#",
+"@#CONNECT 28800 RELIABLE COMPRESSED@#",
+"@#CONNECT 28800 RELIABLE@#",
+"@#CONNECT 28800/ARQ/V.34/MNP4@#",
+"@#CONNECT 28800/ARQ/V.34/MNP5@#",
+"@#CONNECT 28800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 28800/ARQ/V.34/V42 @#",
+"@#CONNECT 28800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 28800/ARQ/V.34/V42b@#",
+"@#CONNECT 28800/ARQ@#",
+"@#CONNECT 28800/COMP@#",
+"@#CONNECT 28800/LAP-M/COMPRESSION@#",
+"@#CONNECT 28800/LAP-M@#",
+"@#CONNECT 28800/LAPM/COMP@#",
+"@#CONNECT 28800/LAPM/V42BIS@#",
+"@#CONNECT 28800/LAPM@#",
+"@#CONNECT 28800/MNP COMPRESSED@#",
+"@#CONNECT 28800/MNP@#",
+"@#CONNECT 28800/NONE@#",
+"@#CONNECT 28800/NOR@#",
+"@#CONNECT 28800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 28800/REL-LAPM@#",
+"@#CONNECT 28800/REL-V.42@#",
+"@#CONNECT 28800/REL COMP@#",
+"@#CONNECT 28800/REL/COMP@#",
+"@#CONNECT 28800/REL@#",
+"@#CONNECT 28800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 28800/RELIABLE/LAPM@#",
+"@#CONNECT 28800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 28800/RELIABLE/MNP@#",
+"@#CONNECT 28800/V42@#",
+"@#CONNECT 28800/V42BIS@#",
+"@#CONNECT 28800@#",
+"@#CONNECT 28800T/V42BIS@#",
+"@#CONNECT 29000/ARQ/V.34/MNP4@#",
+"@#CONNECT 29000/ARQ/V.34/MNP5@#",
+"@#CONNECT 29000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 29000/ARQ/V.34/V42 @#",
+"@#CONNECT 29000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 29000/ARQ/V.34/V42b@#",
+"@#CONNECT 29000@#",
+"@#CONNECT 300 ALT / MNP5@#",
+"@#CONNECT 300 ALT /MNP 5@#",
+"@#CONNECT 300 ALT@#",
+"@#CONNECT 300 EC/V42BIS@#",
+"@#CONNECT 300 EC@#",
+"@#CONNECT 300 LAPM / V.42bis@#",
+"@#CONNECT 300 LAPM /V.42bis@#",
+"@#CONNECT 300 LAPM@#",
+"@#CONNECT 300 REL/MNP5@#",
+"@#CONNECT 300 REL@#",
+"@#CONNECT 300/ARQ/MNP4@#",
+"@#CONNECT 300/ARQ/MNP5@#",
+"@#CONNECT 300/ARQ/V.42@#",
+"@#CONNECT 300/ARQ/V.42bis@#",
+"@#CONNECT 300/ARQ/V42 /SREJ@#",
+"@#CONNECT 300/ARQ/V42 @#",
+"@#CONNECT 300/ARQ/V42b@#",
+"@#CONNECT 300/ARQ@#",
+"@#CONNECT 300/COMP@#",
+"@#CONNECT 300/LAP-M/COMPRESSION@#",
+"@#CONNECT 300/LAP-M@#",
+"@#CONNECT 300/LAPM/COMP@#",
+"@#CONNECT 300/LAPM/V42BIS@#",
+"@#CONNECT 300/LAPM@#",
+"@#CONNECT 300/MNP COMPRESSED@#",
+"@#CONNECT 300/MNP@#",
+"@#CONNECT 300/NONE@#",
+"@#CONNECT 300/NOR@#",
+"@#CONNECT 300/REL-LAPM V.42 BIS@#",
+"@#CONNECT 300/REL-LAPM@#",
+"@#CONNECT 300/REL-MNP@#",
+"@#CONNECT 300/REL-V.42@#",
+"@#CONNECT 300/REL 1@# ",
+"@#CONNECT 300/REL 2@# ",
+"@#CONNECT 300/REL 3@# ",
+"@#CONNECT 300/REL 4@# ",
+"@#CONNECT 300/REL 5@# ",
+"@#CONNECT 300/REL COMP@#",
+"@#CONNECT 300/REL COMPRESSED@#",
+"@#CONNECT 300/REL/COMP@#",
+"@#CONNECT 300/REL@#",
+"@#CONNECT 300/V42@#",
+"@#CONNECT 300/V42BIS@#",
+"@#CONNECT 300@#",
+"@#CONNECT 300T/V42BIS@#",
+"@#CONNECT 31200/ARQ/V.34/MNP4@#",
+"@#CONNECT 31200/ARQ/V.34/MNP5@#",
+"@#CONNECT 31200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 31200/ARQ/V.34/V42 @#",
+"@#CONNECT 31200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 31200/ARQ/V.34/V42b@#",
+"@#CONNECT 31200@#",
+"@#CONNECT 31400/ARQ/V.34/MNP4@#",
+"@#CONNECT 31400/ARQ/V.34/MNP5@#",
+"@#CONNECT 31400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 31400/ARQ/V.34/V42 @#",
+"@#CONNECT 31400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 31400/ARQ/V.34/V42b@#",
+"@#CONNECT 31400@#",
+"@#CONNECT 33600/ARQ/V.34/MNP4@#",
+"@#CONNECT 33600/ARQ/V.34/MNP5@#",
+"@#CONNECT 33600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 33600/ARQ/V.34/V42 @#",
+"@#CONNECT 33600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 33600/ARQ/V.34/V42b@#",
+"@#CONNECT 33600@#",
+"@#CONNECT 33800/ARQ/V.34/MNP4@#",
+"@#CONNECT 33800/ARQ/V.34/MNP5@#",
+"@#CONNECT 33800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 33800/ARQ/V.34/V42 @#",
+"@#CONNECT 33800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 33800/ARQ/V.34/V42b@#",
+"@#CONNECT 33800@#",
+"@#CONNECT 38400 ALT / MNP5@#",
+"@#CONNECT 38400 ALT /MNP 5@#",
+"@#CONNECT 38400 ALT@#",
+"@#CONNECT 38400 EC/V42BIS@#",
+"@#CONNECT 38400 EC@#",
+"@#CONNECT 38400 LAPM / V.42bis@#",
+"@#CONNECT 38400 LAPM /V.42bis@#",
+"@#CONNECT 38400 LAPM@#",
+"@#CONNECT 38400 REL/MNP5@#",
+"@#CONNECT 38400 REL/V42@#",
+"@#CONNECT 38400 REL@#",
+"@#CONNECT 38400/ARQ/V42 /SREJ@#",
+"@#CONNECT 38400/ARQ/V42 @#",
+"@#CONNECT 38400/ARQ/V42b@#",
+"@#CONNECT 38400/ARQ@#",
+"@#CONNECT 38400/COMP@#",
+"@#CONNECT 38400/LAP-M/COMPRESSION@#",
+"@#CONNECT 38400/LAP-M@#",
+"@#CONNECT 38400/LAPM/COMP@#",
+"@#CONNECT 38400/LAPM@#",
+"@#CONNECT 38400/MNP COMPRESSED@#",
+"@#CONNECT 38400/MNP@#",
+"@#CONNECT 38400/NONE@#",
+"@#CONNECT 38400/NOR@#",
+"@#CONNECT 38400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 38400/REL-LAPM@#",
+"@#CONNECT 38400/REL-V.42@#",
+"@#CONNECT 38400/REL COMP@#",
+"@#CONNECT 38400/REL/COMP@#",
+"@#CONNECT 38400/REL@#",
+"@#CONNECT 38400/V.110@#",
+"@#CONNECT 38400/V42@#",
+"@#CONNECT 38400/V42BIS@#",
+"@#CONNECT 38400@#",
+"@#CONNECT 38400T/V42BIS@#",
+"@#CONNECT 4800 ALT / MNP5@#",
+"@#CONNECT 4800 ALT /MNP 5@#",
+"@#CONNECT 4800 ALT@#",
+"@#CONNECT 4800 EC/V42@#",
+"@#CONNECT 4800 EC/V42BIS@#",
+"@#CONNECT 4800 EC@#",
+"@#CONNECT 4800 LAPM / V.42bis@#",
+"@#CONNECT 4800 LAPM /V.42bis@#",
+"@#CONNECT 4800 LAPM COMPRESSED@#",
+"@#CONNECT 4800 LAPM@#",
+"@#CONNECT 4800 NORMAL@#",
+"@#CONNECT 4800 REL/MNP5@#",
+"@#CONNECT 4800 REL/V42@#",
+"@#CONNECT 4800 REL/V42BIS@#",
+"@#CONNECT 4800 REL@#",
+"@#CONNECT 4800 RELIABLE COMPRESSED@#",
+"@#CONNECT 4800 RELIABLE@#",
+"@#CONNECT 4800 V.42@#",
+"@#CONNECT 4800/ARQ/CELL /MNP4@#",
+"@#CONNECT 4800/ARQ/CELL /MNP5@#",
+"@#CONNECT 4800/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/CELL /V42 @#",
+"@#CONNECT 4800/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/CELL /V42b@#",
+"@#CONNECT 4800/ARQ/CELL/MNP4@#",
+"@#CONNECT 4800/ARQ/CELL/MNP5@#",
+"@#CONNECT 4800/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/CELL/V42 @#",
+"@#CONNECT 4800/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/CELL/V42b@#",
+"@#CONNECT 4800/ARQ/MNP4@#",
+"@#CONNECT 4800/ARQ/MNP5@#",
+"@#CONNECT 4800/ARQ/V.34/MNP4@#",
+"@#CONNECT 4800/ARQ/V.34/MNP5@#",
+"@#CONNECT 4800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V.34/V42 @#",
+"@#CONNECT 4800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V.34/V42b@#",
+"@#CONNECT 4800/ARQ/V.42@#",
+"@#CONNECT 4800/ARQ/V.42bis@#",
+"@#CONNECT 4800/ARQ/V32 /MNP4@#",
+"@#CONNECT 4800/ARQ/V32 /MNP5@#",
+"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42 @#",
+"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42b@#",
+"@#CONNECT 4800/ARQ/V32 /MNP4@#",
+"@#CONNECT 4800/ARQ/V32 /MNP5@#",
+"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42 @#",
+"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42b@#",
+"@#CONNECT 4800/ARQ/V32b /MNP4@#",
+"@#CONNECT 4800/ARQ/V32b /MNP5@#",
+"@#CONNECT 4800/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32b /V42 @#",
+"@#CONNECT 4800/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32b /V42b@#",
+"@#CONNECT 4800/ARQ/V32b/MNP4@#",
+"@#CONNECT 4800/ARQ/V32b/MNP5@#",
+"@#CONNECT 4800/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32b/V42 @#",
+"@#CONNECT 4800/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32b/V42b@#",
+"@#CONNECT 4800/ARQ/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V42 @#",
+"@#CONNECT 4800/ARQ/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V42b@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 @#",
+"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42b@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 @#",
+"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42b@#",
+"@#CONNECT 4800/ARQ@#",
+"@#CONNECT 4800/COMP@#",
+"@#CONNECT 4800/LAP-M/COMPRESSION@#",
+"@#CONNECT 4800/LAP-M@#",
+"@#CONNECT 4800/LAPM/COMP@#",
+"@#CONNECT 4800/LAPM/V42BIS@#",
+"@#CONNECT 4800/LAPM@#",
+"@#CONNECT 4800/MNP COMPRESSED@#",
+"@#CONNECT 4800/MNP@#",
+"@#CONNECT 4800/NONE@#",
+"@#CONNECT 4800/NOR@#",
+"@#CONNECT 4800/REL-LAPM-COMP@#",
+"@#CONNECT 4800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 4800/REL-LAPM@#",
+"@#CONNECT 4800/REL-MNP-COMP@#",
+"@#CONNECT 4800/REL-MNP@#",
+"@#CONNECT 4800/REL-V.42@#",
+"@#CONNECT 4800/REL 1@# ",
+"@#CONNECT 4800/REL 2@# ",
+"@#CONNECT 4800/REL 3@# ",
+"@#CONNECT 4800/REL 4@# ",
+"@#CONNECT 4800/REL 5@# ",
+"@#CONNECT 4800/REL COMP@#",
+"@#CONNECT 4800/REL COMPRESSED@#",
+"@#CONNECT 4800/REL/COMP@#",
+"@#CONNECT 4800/REL@#",
+"@#CONNECT 4800/RELC@#",
+"@#CONNECT 4800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 4800/RELIABLE/LAPM@#",
+"@#CONNECT 4800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 4800/RELIABLE/MNP@#",
+"@#CONNECT 4800/V42@#",
+"@#CONNECT 4800/V42B@#",
+"@#CONNECT 4800/V42BIS@#",
+"@#CONNECT 4800@#",
+"@#CONNECT 48000@#",
+"@#CONNECT 4800T/V42BIS@#",
+"@#CONNECT 5000/ARQ/V.34/MNP4@#",
+"@#CONNECT 5000/ARQ/V.34/MNP5@#",
+"@#CONNECT 5000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 5000/ARQ/V.34/V42 @#",
+"@#CONNECT 5000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 5000/ARQ/V.34/V42b@#",
+"@#CONNECT 5000@#",
+"@#CONNECT 56000/ARQ/SLP /V120/V42b@#",
+"@#CONNECT 56000/ARQ/SLP /V120@#",
+"@#CONNECT 56000/REL@#",
+"@#CONNECT 56000@#",
+"@#CONNECT 57600 ALT / MNP5@#",
+"@#CONNECT 57600 ALT /MNP 5@#",
+"@#CONNECT 57600 ALT@#",
+"@#CONNECT 57600 EC/V42BIS@#",
+"@#CONNECT 57600 EC@#",
+"@#CONNECT 57600 LAPM / V.42bis@#",
+"@#CONNECT 57600 LAPM /V.42bis@#",
+"@#CONNECT 57600 LAPM@#",
+"@#CONNECT 57600 REL/MNP5@#",
+"@#CONNECT 57600 REL@#",
+"@#CONNECT 57600/ARQ/V42 /SREJ@#",
+"@#CONNECT 57600/ARQ/V42 @#",
+"@#CONNECT 57600/ARQ/V42b@#",
+"@#CONNECT 57600/ARQ@#",
+"@#CONNECT 57600/COMP@#",
+"@#CONNECT 57600/LAP-M/COMPRESSION@#",
+"@#CONNECT 57600/LAP-M@#",
+"@#CONNECT 57600/LAPM/COMP@#",
+"@#CONNECT 57600/LAPM@#",
+"@#CONNECT 57600/MNP COMPRESSED@#",
+"@#CONNECT 57600/MNP@#",
+"@#CONNECT 57600/NONE@#",
+"@#CONNECT 57600/NOR@#",
+"@#CONNECT 57600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 57600/REL-LAPM@#",
+"@#CONNECT 57600/REL-V.42@#",
+"@#CONNECT 57600/REL COMP@#",
+"@#CONNECT 57600/REL/COMP@#",
+"@#CONNECT 57600/REL@#",
+"@#CONNECT 57600/V42@#",
+"@#CONNECT 57600/V42BIS@#",
+"@#CONNECT 57600@#",
+"@#CONNECT 57600@#@#@#*@#COM@#",
+"@#CONNECT 57600T/V42BIS@#",
+"@#CONNECT 600 ALT / MNP5@#",
+"@#CONNECT 600 ALT /MNP 5@#",
+"@#CONNECT 600 ALT@#",
+"@#CONNECT 600 EC/V42BIS@#",
+"@#CONNECT 600 EC@#",
+"@#CONNECT 600 LAPM / V.42bis@#",
+"@#CONNECT 600 LAPM /V.42bis@#",
+"@#CONNECT 600 LAPM@#",
+"@#CONNECT 600 REL/MNP5@#",
+"@#CONNECT 600 REL@#",
+"@#CONNECT 600/ARQ/MNP4@#",
+"@#CONNECT 600/ARQ/MNP5@#",
+"@#CONNECT 600/ARQ/V.42@#",
+"@#CONNECT 600/ARQ/V.42bis@#",
+"@#CONNECT 600/ARQ@#",
+"@#CONNECT 600/COMP@#",
+"@#CONNECT 600/LAP-M/COMPRESSION@#",
+"@#CONNECT 600/LAP-M@#",
+"@#CONNECT 600/LAPM/COMP@#",
+"@#CONNECT 600/LAPM@#",
+"@#CONNECT 600/MNP COMPRESSED@#",
+"@#CONNECT 600/MNP@#",
+"@#CONNECT 600/NONE@#",
+"@#CONNECT 600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 600/REL 1@# ",
+"@#CONNECT 600/REL 2@# ",
+"@#CONNECT 600/REL 3@# ",
+"@#CONNECT 600/REL 4@# ",
+"@#CONNECT 600/REL 5@# ",
+"@#CONNECT 600/REL COMPRESSED@#",
+"@#CONNECT 600/REL/COMP@#",
+"@#CONNECT 600/REL@#",
+"@#CONNECT 600/V42@#",
+"@#CONNECT 600/V42BIS@#",
+"@#CONNECT 600@#",
+"@#CONNECT 64000/ARQ/SLP /X.75/V42b@#",
+"@#CONNECT 64000/ARQ/SLP /X.75@#",
+"@#CONNECT 64000/MNP@#",
+"@#CONNECT 64000/REL@#",
+"@#CONNECT 64000/X.70 BTX@#",
+"@#CONNECT 64000/X.70NL@#",
+"@#CONNECT 64000/X.75@#",
+"@#CONNECT 64000@#",
+"@#CONNECT 7200 ALT / MNP5@#",
+"@#CONNECT 7200 ALT /MNP 5@#",
+"@#CONNECT 7200 ALT@#",
+"@#CONNECT 7200 EC/V42@#",
+"@#CONNECT 7200 EC/V42BIS@#",
+"@#CONNECT 7200 EC@#",
+"@#CONNECT 7200 LAPM / V.42bis@#",
+"@#CONNECT 7200 LAPM /V.42bis@#",
+"@#CONNECT 7200 LAPM COMPRESSED@#",
+"@#CONNECT 7200 LAPM@#",
+"@#CONNECT 7200 REL/MNP5@#",
+"@#CONNECT 7200 REL/V42@#",
+"@#CONNECT 7200 REL/V42BIS@#",
+"@#CONNECT 7200 REL@#",
+"@#CONNECT 7200 RELIABLE@#",
+"@#CONNECT 7200/ARQ/CELL /MNP4@#",
+"@#CONNECT 7200/ARQ/CELL /MNP5@#",
+"@#CONNECT 7200/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/CELL /V42 @#",
+"@#CONNECT 7200/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/CELL /V42b@#",
+"@#CONNECT 7200/ARQ/CELL/MNP4@#",
+"@#CONNECT 7200/ARQ/CELL/MNP5@#",
+"@#CONNECT 7200/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/CELL/V42 @#",
+"@#CONNECT 7200/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/CELL/V42b@#",
+"@#CONNECT 7200/ARQ/MNP4@#",
+"@#CONNECT 7200/ARQ/MNP5@#",
+"@#CONNECT 7200/ARQ/V.34/MNP4@#",
+"@#CONNECT 7200/ARQ/V.34/MNP5@#",
+"@#CONNECT 7200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V.34/V42 @#",
+"@#CONNECT 7200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V.34/V42b@#",
+"@#CONNECT 7200/ARQ/V.42@#",
+"@#CONNECT 7200/ARQ/V.42bis@#",
+"@#CONNECT 7200/ARQ/V32 /MNP4@#",
+"@#CONNECT 7200/ARQ/V32 /MNP5@#",
+"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42 @#",
+"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42b@#",
+"@#CONNECT 7200/ARQ/V32 /MNP4@#",
+"@#CONNECT 7200/ARQ/V32 /MNP5@#",
+"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42 @#",
+"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42b@#",
+"@#CONNECT 7200/ARQ/V32b /MNP4@#",
+"@#CONNECT 7200/ARQ/V32b /MNP5@#",
+"@#CONNECT 7200/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32b /V42 @#",
+"@#CONNECT 7200/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32b /V42b@#",
+"@#CONNECT 7200/ARQ/V32b/MNP4@#",
+"@#CONNECT 7200/ARQ/V32b/MNP5@#",
+"@#CONNECT 7200/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32b/V42 @#",
+"@#CONNECT 7200/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32b/V42b@#",
+"@#CONNECT 7200/ARQ/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V42 @#",
+"@#CONNECT 7200/ARQ/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V42b@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 @#",
+"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42b@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 @#",
+"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42b@#",
+"@#CONNECT 7200/ARQ@#",
+"@#CONNECT 7200/COMP@#",
+"@#CONNECT 7200/LAP-M/COMPRESSION@#",
+"@#CONNECT 7200/LAP-M@#",
+"@#CONNECT 7200/LAPM/COMP@#",
+"@#CONNECT 7200/LAPM/V42BIS@#",
+"@#CONNECT 7200/LAPM@#",
+"@#CONNECT 7200/MNP COMPRESSED@#",
+"@#CONNECT 7200/MNP@#",
+"@#CONNECT 7200/NONE@#",
+"@#CONNECT 7200/NOR@#",
+"@#CONNECT 7200/REL-LAPM-COMP@#",
+"@#CONNECT 7200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 7200/REL-LAPM@#",
+"@#CONNECT 7200/REL-MNP-COMP@#",
+"@#CONNECT 7200/REL-MNP@#",
+"@#CONNECT 7200/REL-V.42@#",
+"@#CONNECT 7200/REL 1@# ",
+"@#CONNECT 7200/REL 2@# ",
+"@#CONNECT 7200/REL 3@# ",
+"@#CONNECT 7200/REL 4@# ",
+"@#CONNECT 7200/REL 5@# ",
+"@#CONNECT 7200/REL COMP@#",
+"@#CONNECT 7200/REL/COMP@#",
+"@#CONNECT 7200/REL@#",
+"@#CONNECT 7200/RELC@#",
+"@#CONNECT 7200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 7200/RELIABLE/LAPM@#",
+"@#CONNECT 7200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 7200/RELIABLE/MNP@#",
+"@#CONNECT 7200/V42@#",
+"@#CONNECT 7200/V42B@#",
+"@#CONNECT 7200/V42BIS@#",
+"@#CONNECT 7200@#",
+"@#CONNECT 7200T/V42BIS@#",
+"@#CONNECT 7400/ARQ/V.34/MNP4@#",
+"@#CONNECT 7400/ARQ/V.34/MNP5@#",
+"@#CONNECT 7400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 7400/ARQ/V.34/V42 @#",
+"@#CONNECT 7400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 7400/ARQ/V.34/V42b@#",
+"@#CONNECT 7400@#",
+"@#CONNECT 75/1200",
+"@#CONNECT 75/1200/ARQ@#",
+"@#CONNECT 75/1200/LAP-M/COMPRESSION@#",
+"@#CONNECT 75/1200/LAP-M@#",
+"@#CONNECT 75/1200/LAPM/COMP@#",
+"@#CONNECT 75/1200/LAPM@#",
+"@#CONNECT 75/1200/MNP@#",
+"@#CONNECT 75/1200/NONE@#",
+"@#CONNECT 75/1200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 75/1200/REL/COMP@#",
+"@#CONNECT 75/1200/REL@#",
+"@#CONNECT 75/1200/REL#",
+"@#CONNECT 75/1200/V42@#",
+"@#CONNECT 75/1200/V42BIS@#",
+"@#CONNECT 75/1200@#",
+"@#CONNECT 75TX/1200RX REL/MNP5@#",
+"@#CONNECT 75TX/1200RX REL@#",
+"@#CONNECT 75TX/1200RX/ARQ@#",
+"@#CONNECT 75TX/1200RX/LAP-M/COMPRESSION@#",
+"@#CONNECT 75TX/1200RX/LAP-M@#",
+"@#CONNECT 75TX/1200RX/LAPM/COMP@#",
+"@#CONNECT 75TX/1200RX/LAPM@#",
+"@#CONNECT 75TX/1200RX/MNP@#",
+"@#CONNECT 75TX/1200RX/NONE@#",
+"@#CONNECT 75TX/1200RX/REL-LAPM V.42 BIS@#",
+"@#CONNECT 75TX/1200RX/REL/COMP@#",
+"@#CONNECT 75TX/1200RX/REL@#",
+"@#CONNECT 75TX/1200RX/V42@#",
+"@#CONNECT 75TX/1200RX/V42BIS@#",
+"@#CONNECT 75TX/1200RX@#",
+"@#CONNECT 76800/ARQ/V42 /SREJ@#",
+"@#CONNECT 76800/ARQ/V42 @#",
+"@#CONNECT 76800/ARQ/V42b@#",
+"@#CONNECT 76800@#",
+"@#CONNECT 9600 ALT / MNP5@#",
+"@#CONNECT 9600 ALT /MNP 5@#",
+"@#CONNECT 9600 ALT@#",
+"@#CONNECT 9600 EC/V42@#",
+"@#CONNECT 9600 EC/V42BIS@#",
+"@#CONNECT 9600 EC@#",
+"@#CONNECT 9600 LAPM / V.42bis@#",
+"@#CONNECT 9600 LAPM /V.42bis@#",
+"@#CONNECT 9600 LAPM COMPRESSED@#",
+"@#CONNECT 9600 LAPM@#",
+"@#CONNECT 9600 NORMAL@#",
+"@#CONNECT 9600 REL/MNP5@#",
+"@#CONNECT 9600 REL/V42@#",
+"@#CONNECT 9600 REL/V42BIS@#",
+"@#CONNECT 9600 REL@#",
+"@#CONNECT 9600 RELIABLE COMPRESSED@#",
+"@#CONNECT 9600 RELIABLE@#",
+"@#CONNECT 9600 V.42@#",
+"@#CONNECT 9600/ARQ/CELL /MNP4@#",
+"@#CONNECT 9600/ARQ/CELL /MNP5@#",
+"@#CONNECT 9600/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/CELL /V42 @#",
+"@#CONNECT 9600/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/CELL /V42b@#",
+"@#CONNECT 9600/ARQ/CELL/MNP4@#",
+"@#CONNECT 9600/ARQ/CELL/MNP5@#",
+"@#CONNECT 9600/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/CELL/V42 @#",
+"@#CONNECT 9600/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/CELL/V42b@#",
+"@#CONNECT 9600/ARQ/MNP4@#",
+"@#CONNECT 9600/ARQ/MNP5@#",
+"@#CONNECT 9600/ARQ/V.34/MNP4@#",
+"@#CONNECT 9600/ARQ/V.34/MNP5@#",
+"@#CONNECT 9600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V.34/V42 @#",
+"@#CONNECT 9600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V.34/V42b@#",
+"@#CONNECT 9600/ARQ/V.42@#",
+"@#CONNECT 9600/ARQ/V.42bis@#",
+"@#CONNECT 9600/ARQ/V32 /MNP4@#",
+"@#CONNECT 9600/ARQ/V32 /MNP5@#",
+"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42 @#",
+"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42b@#",
+"@#CONNECT 9600/ARQ/V32 /MNP4@#",
+"@#CONNECT 9600/ARQ/V32 /MNP5@#",
+"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42 @#",
+"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42b@#",
+"@#CONNECT 9600/ARQ/V32b /MNP4@#",
+"@#CONNECT 9600/ARQ/V32b /MNP5@#",
+"@#CONNECT 9600/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32b /V42 @#",
+"@#CONNECT 9600/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32b /V42b@#",
+"@#CONNECT 9600/ARQ/V32b/MNP4@#",
+"@#CONNECT 9600/ARQ/V32b/MNP5@#",
+"@#CONNECT 9600/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32b/V42 @#",
+"@#CONNECT 9600/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32b/V42b@#",
+"@#CONNECT 9600/ARQ/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V42 @#",
+"@#CONNECT 9600/ARQ/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V42b@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP4@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP5@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 @#",
+"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42b@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP4@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP5@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 @#",
+"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42b@#",
+"@#CONNECT 9600/ARQ@#",
+"@#CONNECT 9600/COMP@#",
+"@#CONNECT 9600/LAP-M/COMPRESSION@#",
+"@#CONNECT 9600/LAP-M@#",
+"@#CONNECT 9600/LAPM/COMP@#",
+"@#CONNECT 9600/LAPM/V42BIS@#",
+"@#CONNECT 9600/LAPM@#",
+"@#CONNECT 9600/MNP COMPRESSED@#",
+"@#CONNECT 9600/MNP@#",
+"@#CONNECT 9600/NONE@#",
+"@#CONNECT 9600/NOR@#",
+"@#CONNECT 9600/REL-LAPM-COMP@#",
+"@#CONNECT 9600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 9600/REL-LAPM@#",
+"@#CONNECT 9600/REL-MNP-COMP@#",
+"@#CONNECT 9600/REL-MNP@#",
+"@#CONNECT 9600/REL-V.42@#",
+"@#CONNECT 9600/REL 1@# ",
+"@#CONNECT 9600/REL 2@# ",
+"@#CONNECT 9600/REL 3@# ",
+"@#CONNECT 9600/REL 4@# ",
+"@#CONNECT 9600/REL 5@# ",
+"@#CONNECT 9600/REL COMP@#",
+"@#CONNECT 9600/REL COMPRESSED@#",
+"@#CONNECT 9600/REL/COMP@#",
+"@#CONNECT 9600/REL@#",
+"@#CONNECT 9600/RELC@#",
+"@#CONNECT 9600/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 9600/RELIABLE/LAPM@#",
+"@#CONNECT 9600/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 9600/RELIABLE/MNP@#",
+"@#CONNECT 9600/V.110@#",
+"@#CONNECT 9600/V42@#",
+"@#CONNECT 9600/V42B@#",
+"@#CONNECT 9600/V42BIS@#",
+"@#CONNECT 9600@#",
+"@#CONNECT 9600T RELIABLE@#",
+"@#CONNECT 9600T V.42@#",
+"@#CONNECT 9600T/V42BIS@#",
+"@#CONNECT 9800/ARQ/V.34/MNP4@#",
+"@#CONNECT 9800/ARQ/V.34/MNP5@#",
+"@#CONNECT 9800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 9800/ARQ/V.34/V42 @#",
+"@#CONNECT 9800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 9800/ARQ/V.34/V42b@#",
+"@#CONNECT 9800@#",
+"@#CONNECT EC@#",
+"@#CONNECT FAST@#",
+"@#CONNECT LAPM COMPRESSED@#",
+"@#CONNECT LAPM@#",
+"@#CONNECT REL/MNP5@#",
+"@#CONNECT REL@#",
+"@#CONNECT RELIABLE COMPRESSED@#",
+"@#CONNECT RELIABLE@#",
+"@#CONNECT V.21/REL@#",
+"@#CONNECT/ARQ@#",
+"@#CONNECT/LAP-M/COMPRESSION@#",
+"@#CONNECT/LAP-M@#",
+"@#CONNECT/LAPM/COMP@#",
+"@#CONNECT/LAPM@#",
+"@#CONNECT/MNP@#",
+"@#CONNECT/NONE@#",
+"@#CONNECT/REL/COMP@#",
+"@#CONNECT/REL@#",
+"@#CONNECT/V42@#",
+"@#CONNECT/V42BIS@#",
+"@#CONNECT@#",
+"@#DALAYED@#",
+"@#DATA@#",
+"@#DATE = ",
+"@#DELAYED",
+"@#Delayed@#",
+"@#DELAYED@#",
+"@#Delayed@#",
+"@#DELAYED@#",
+"@#DIALING@#",
+"@#DISCONNECT@#",
+"@#Don't use this command at this situation @#",
+"@#ERROR SERIAL SPEED SETUP@#",
+"@#ERROR@#",
+"@#FAX@#",
+"@#LIB DER 00@#",
+"@#LOCKED@#",
+"@#NO ANSWER@#",
+"@#NO CARRIER@#",
+"@#NO DIAL TONE@#",
+"@#NO DIALTONE@#",
+"@#NO USER RESPONDING@#",
+"@#NOTUSED@#",
+"@#NUMBER DELAYED:TIMER@#",
+"@#NUMBER LOCKED OUT@#",
+"@#OFF HOOK@#",
+"@#OK@#",
+"@#PROTOCOL: ALT-+FCERROR@#",
+"@#PROTOCOL: ALT-CELLULAR@#",
+"@#PROTOCOL: ALT-DATA@#",
+"@#PROTOCOL: ALT-FAX@#",
+"@#PROTOCOL: ALT - CELLULAR@#",
+"@#PROTOCOL: ALT CELLULAR@#",
+"@#PROTOCOL: ALT@#",
+"@#PROTOCOL: ERROR-CONTROL/LAP-B@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB/AFT@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB/HDX@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB@#",
+"@#PROTOCOL: LAP-M/AFT@#",
+"@#PROTOCOL: LAP-M/HDX@#",
+"@#PROTOCOL: LAP-M@#",
+"@#PROTOCOL: LAP_M@#",
+"@#PROTOCOL: LAPM/AFT@#",
+"@#PROTOCOL: LAPM/HDX@#",
+"@#PROTOCOL: LAPM@#",
+"@#PROTOCOL: MNP 3,4@#",
+"@#PROTOCOL: MNP ALT@#",
+"@#PROTOCOL: MNP REL 1@#",
+"@#PROTOCOL: MNP REL 2@#",
+"@#PROTOCOL: MNP REL 3@#",
+"@#PROTOCOL: MNP REL 4@#",
+"@#PROTOCOL: MNP REL 5@#",
+"@#PROTOCOL: MNP REL@#",
+"@#PROTOCOL: MNP@#",
+"@#PROTOCOL: MNP1@#",
+"@#PROTOCOL: MNP2@#",
+"@#PROTOCOL: MNP3@#",
+"@#PROTOCOL: MNP4@#",
+"@#PROTOCOL: NONE@#",
+"@#PROTOCOL: PAD@#",
+"@#PROTOCOL: V.42BIS@#",
+"@#PROTOCOL: V42@#",
+"@#PROTOCOL: V42BIS@#",
+"@#PROTOCOL: X.25/LAPB/AFT@#",
+"@#PROTOCOL: X.25/LAPB/HDX@#",
+"@#PROTOCOL: X.25/LAPB@#",
+"@#PROTOCOL:ALT-+FCERROR@#",
+"@#PROTOCOL:ALT-CELLULAR@#",
+"@#PROTOCOL:ALT-DATA@#",
+"@#PROTOCOL:ALT-FAX@#",
+"@#PROTOCOL:ALT@#",
+"@#PROTOCOL:LAP-M@#",
+"@#PROTOCOL:LAPM@#",
+"@#PROTOCOL:MNP@#",
+"@#PROTOCOL:MNP2@#",
+"@#PROTOCOL:MNP3@#",
+"@#PROTOCOL:MNP4@#",
+"@#PROTOCOL:NONE@#",
+"@#PROTOCOL:V.42BIS@#",
+"@#PROTOCOL:V42BIS@#",
+"@#RING@#",
+"@#RING1@#",
+"@#RING2@#",
+"@#RING3@#",
+"@#RINGING@#",
+"@#RRING@#",
+"@#TEST FAILED@#",
+"@#TEST PASSED@#",
+"@#VCON@#",
+"@#VOICE@#",
+"@#Wait 5 seconds,then dial@#",
+"@OK#",
+"<ff>@",
+"<ff>@@#OK@#",
+"<h00>CLIENT",
+"#",
+"0@",
+"0<CR>",
+"0@",
+"00@",
+"01@",
+"02@",
+"03@",
+"04@",
+"05@",
+"06@",
+"07@",
+"08@",
+"1<CR>",
+"1@",
+"10@",
+"10<CR>",
+"10@",
+"10@#",
+"10@66@",
+"10@67@",
+"10@69@",
+"100@",
+"101@",
+"102@",
+"103@",
+"104@",
+"105@",
+"10L@#",
+"10LC@#",
+"10R@#",
+"10RC@#",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11@#",
+"11@66@",
+"11@67@",
+"11@69@",
+"111@",
+"112@",
+"113@",
+"114@",
+"115@",
+"116@",
+"117@",
+"118@",
+"119@",
+"11L@#",
+"11LC@#",
+"11R@#",
+"11RC@#",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12@#",
+"12@66@",
+"12@67@",
+"12@69@",
+"120@",
+"121@",
+"122@",
+"123@",
+"124@",
+"125@",
+"126@",
+"127@",
+"128@",
+"129@",
+"12L@#",
+"12LC@#",
+"12R@#",
+"12RC@#",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@#",
+"13@66@",
+"13@67@",
+"13@69@",
+"13L@#",
+"13LC@#",
+"13R@#",
+"13RC@#",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@66@",
+"14@67@",
+"14@69@",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15@66@",
+"15@67@",
+"15@69@",
+"16@",
+"16<CR>",
+"16@",
+"16@66@",
+"16@67@",
+"16@69@",
+"17@",
+"18@",
+"18<CR>",
+"18@",
+"19@",
+"19@#",
+"19L@#",
+"19LC@#",
+"19R@#",
+"19RC@#",
+"1L@#",
+"1LC@#",
+"1R@#",
+"1RC@#",
+"2@",
+"2<CR>",
+"2@",
+"20@",
+"21@",
+"21@#",
+"21L@#",
+"21LC@#",
+"21R@#",
+"21RC@#",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24@#",
+"24L@#",
+"24LC@#",
+"24R@#",
+"24RC@#",
+"25@",
+"25<CR>",
+"25@",
+"25<CR>",
+"25@",
+"25<CR>",
+"26<CR>",
+"26@",
+"26<CR>",
+"26@",
+"26<CR>",
+"26@",
+"26@#",
+"26L@#",
+"26LC@#",
+"26R@#",
+"26RC<cR>#",
+"27@",
+"28@",
+"28<CR>",
+"28@",
+"28<CR>",
+"28@",
+"28<CR>",
+"28@",
+"28@#",
+"28L@#",
+"28LC@#",
+"28R@#",
+"28RC@#",
+"29@",
+"29<CR>",
+"29@",
+"3@",
+"3<CR>",
+"3@",
+"30@",
+"31@",
+"31<CR>",
+"31@",
+"32@",
+"33@",
+"34<CR>",
+"34@",
+"35@",
+"36@",
+"36<CR>",
+"36@",
+"37@",
+"37<CR>",
+"37@",
+"38<CR>",
+"38@",
+"39@",
+"4@",
+"4<CR>",
+"4@",
+"40@",
+"40<CR>",
+"40@",
+"40@70@01@",
+"40@70@66@01@",
+"40@70@67@01@",
+"40@70@69@01@",
+"40@77@01@",
+"40@77@66@01@",
+"40@77@67@01@",
+"40@77@69@01@",
+"40@80@01@",
+"40@80@66@01@",
+"40@80@67@01@",
+"40@80@69@01@",
+"40@81@01@",
+"40@81@66@01@",
+"40@81@67@01@",
+"40@81@69@01@",
+"41@",
+"42@",
+"43@",
+"44@",
+"44<CR>",
+"44@",
+"44@70@05@",
+"44@70@66@05@",
+"44@70@67@05@",
+"44@70@69@05@",
+"44@77@05@",
+"44@77@66@05@",
+"44@77@67@05@",
+"44@77@69@05@",
+"44@80@05@",
+"44@80@66@05@",
+"44@80@67@05@",
+"44@80@69@05@",
+"44@81@05@",
+"44@81@66@05@",
+"44@81@67@05@",
+"44@81@69@05@",
+"45@",
+"45<CR>",
+"45@",
+"45@70@05@",
+"45@70@66@05@",
+"45@70@67@05@",
+"45@70@69@05@",
+"45@77@05@",
+"45@77@66@05@",
+"45@77@67@05@",
+"45@77@69@05@",
+"45@80@05@",
+"45@80@66@05@",
+"45@80@67@05@",
+"45@80@69@05@",
+"45@81@05@",
+"45@81@66@05@",
+"45@81@67@05@",
+"45@81@69@05@",
+"46@",
+"46<CR>",
+"46@",
+"46@70@05@",
+"46@70@66@05@",
+"46@70@67@05@",
+"46@70@69@05@",
+"46@77@05@",
+"46@77@66@05@",
+"46@77@67@05@",
+"46@77@69@05@",
+"46@80@05@",
+"46@80@66@05@",
+"46@80@67@05@",
+"46@80@69@05@",
+"46@81@05@",
+"46@81@66@05@",
+"46@81@67@05@",
+"46@81@69@05@",
+"47@",
+"47<CR>",
+"47@",
+"47@70@10@",
+"47@70@66@10@",
+"47@70@67@10@",
+"47@70@69@10@",
+"47@77@10@",
+"47@77@66@10@",
+"47@77@67@10@",
+"47@77@69@10@",
+"47@80@10@",
+"47@80@66@10@",
+"47@80@67@10@",
+"47@80@69@10@",
+"47@81@10@",
+"47@81@66@10@",
+"47@81@67@10@",
+"47@81@69@10@",
+"48@",
+"48<CR>",
+"48@",
+"48@70@11@",
+"48@70@66@11@",
+"48@70@67@11@",
+"48@70@69@11@",
+"48@77@11@",
+"48@77@66@11@",
+"48@77@67@11@",
+"48@77@69@11@",
+"48@80@11@",
+"48@80@66@11@",
+"48@80@67@11@",
+"48@80@69@11@",
+"48@81@11@",
+"48@81@66@11@",
+"48@81@67@11@",
+"48@81@69@11@",
+"49@",
+"49<CR>",
+"49@",
+"49@70@13@",
+"49@70@66@13@",
+"49@70@67@13@",
+"49@70@69@13@",
+"49@77@13@",
+"49@77@66@13@",
+"49@77@67@13@",
+"49@77@69@13@",
+"49@80@13@",
+"49@80@66@13@",
+"49@80@67@13@",
+"49@80@69@13@",
+"49@81@13@",
+"49@81@66@13@",
+"49@81@67@13@",
+"49@81@69@13@",
+"5@",
+"5<CR>",
+"5@",
+"5@66@",
+"5@67@",
+"5@69@",
+"50@",
+"50<CR>",
+"50@",
+"50@70@12@",
+"50@70@66@12@",
+"50@70@67@12@",
+"50@70@69@12@",
+"50@77@12@",
+"50@77@66@12@",
+"50@77@67@12@",
+"50@77@69@12@",
+"50@80@12@",
+"50@80@66@12@",
+"50@80@67@12@",
+"50@80@69@12@",
+"50@81@12@",
+"50@81@66@12@",
+"50@81@67@12@",
+"50@81@69@12@",
+"51@",
+"51<CR>",
+"51@",
+"51@70@14@",
+"51@70@66@14@",
+"51@70@67@14@",
+"51@70@69@14@",
+"51@77@14@",
+"51@77@66@14@",
+"51@77@67@14@",
+"51@77@69@14@",
+"51@80@14@",
+"51@80@66@14@",
+"51@80@67@14@",
+"51@80@69@14@",
+"51@81@14@",
+"51@81@66@14@",
+"51@81@67@14@",
+"51@81@69@14@",
+"52@",
+"52<CR>",
+"52@",
+"52@70@15@",
+"52@70@66@15@",
+"52@70@67@15@",
+"52@70@69@15@",
+"52@77@15@",
+"52@77@66@15@",
+"52@77@67@15@",
+"52@77@69@15@",
+"52@80@15@",
+"52@80@66@15@",
+"52@80@67@15@",
+"52@80@69@15@",
+"52@81@15@",
+"52@81@66@15@",
+"52@81@67@15@",
+"52@81@69@15@",
+"53@",
+"53<CR>",
+"53@",
+"53@70@59@",
+"53@70@66@59@",
+"53@70@67@59@",
+"53@70@69@59@",
+"53@77@59@",
+"53@77@66@59@",
+"53@77@67@59@",
+"53@77@69@59@",
+"53@80@59@",
+"53@80@66@59@",
+"53@80@67@59@",
+"53@80@69@59@",
+"53@81@59@",
+"53@81@66@59@",
+"53@81@67@59@",
+"53@81@69@59@",
+"54@",
+"54<CR>",
+"54@70@16@",
+"54@70@66@16@",
+"54@70@67@16@",
+"54@70@69@16@",
+"54@77@16@",
+"54@77@66@16@",
+"54@77@67@16@",
+"54@77@69@16@",
+"54@80@16@",
+"54@80@66@16@",
+"54@80@67@16@",
+"54@80@69@16@",
+"54@81@16@",
+"54@81@66@16@",
+"54@81@67@16@",
+"54@81@69@16@",
+"55@",
+"55<CR>",
+"55@",
+"55@70@61@",
+"55@70@66@61@",
+"55@70@67@61@",
+"55@70@69@61@",
+"55@77@61@",
+"55@77@66@61@",
+"55@77@67@61@",
+"55@77@69@61@",
+"55@80@61@",
+"55@80@66@61@",
+"55@80@67@61@",
+"55@80@69@61@",
+"55@81@61@",
+"55@81@66@61@",
+"55@81@67@61@",
+"55@81@69@61@",
+"56@",
+"56@70@62@",
+"56@70@66@62@",
+"56@70@67@62@",
+"56@70@69@62@",
+"56@77@62@",
+"56@77@66@62@",
+"56@77@67@62@",
+"56@77@69@62@",
+"56@80@62@",
+"56@80@66@62@",
+"56@80@67@62@",
+"56@80@69@62@",
+"56@81@62@",
+"56@81@66@62@",
+"56@81@67@62@",
+"56@81@69@62@",
+"57@",
+"57@70@63@",
+"57@70@66@63@",
+"57@70@67@63@",
+"57@70@69@63@",
+"57@77@63@",
+"57@77@66@63@",
+"57@77@67@63@",
+"57@77@69@63@",
+"57@80@63@",
+"57@80@66@63@",
+"57@80@67@63@",
+"57@80@69@63@",
+"57@81@63@",
+"57@81@66@63@",
+"57@81@67@63@",
+"57@81@69@63@",
+"58@",
+"58@70@64@",
+"58@70@66@64@",
+"58@70@67@64@",
+"58@70@69@64@",
+"58@77@64@",
+"58@77@66@64@",
+"58@77@67@64@",
+"58@77@69@64@",
+"58@80@64@",
+"58@80@66@64@",
+"58@80@67@64@",
+"58@80@69@64@",
+"58@81@64@",
+"58@81@66@64@",
+"58@81@67@64@",
+"58@81@69@64@",
+"59@",
+"5L@#",
+"5LC@#",
+"5R@#",
+"5RC@#",
+"6@",
+"6<CR>",
+"6@",
+"60@",
+"60<CR>",
+"60@",
+"61@",
+"62@",
+"63@",
+"63@66@",
+"63@67@",
+"63@69@",
+"64@",
+"64@66@",
+"64@67@",
+"64@69@",
+"65@",
+"66@",
+"66<CR>",
+"66@",
+"67@",
+"67<CR>",
+"67@",
+"68@",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"7@",
+"7<CR>",
+"7@",
+"70@",
+"70<CR>",
+"70@",
+"71@",
+"72@",
+"73@",
+"74@",
+"75@",
+"76@",
+"77@",
+"77<CR>",
+"77@",
+"78@",
+"79@",
+"8@",
+"8<CR>",
+"8@",
+"80@",
+"80<CR>",
+"80@",
+"81@",
+"82@",
+"83@",
+"84@",
+"85@",
+"86@",
+"87@",
+"88@",
+"89@",
+"9@",
+"9<CR>",
+"9@",
+"9@#",
+"90@",
+"91@",
+"92@",
+"93@",
+"94@",
+"95@",
+"96@",
+"97@",
+"98@",
+"99@",
+"9L@#",
+"9LC@#",
+"9R@#",
+"9RC@#",
+"ATE0V0",
+"AUTOSTREAM: LEVEL 1",
+"AUTOSTREAM: LEVEL 2",
+"AUTOSTREAM: LEVEL 3",
+"BLACKLISTED",
+"BUSY",
+"CARRIER",
+"CARRIER 0300",
+"CARRIER 1200",
+"CARRIER 1200/75",
+"CARRIER 1200/75/VFC",
+"CARRIER 1200/VFC",
+"CARRIER 12000",
+"CARRIER 12000/VFC",
+"CARRIER 14400",
+"CARRIER 14400/VFC",
+"CARRIER 16800",
+"CARRIER 16800 V.34",
+"CARRIER 16800/VFC",
+"CARRIER 19200",
+"CARRIER 19200 V.34",
+"CARRIER 19200/VFC",
+"CARRIER 21600",
+"CARRIER 21600 V.34",
+"CARRIER 21600/VFC",
+"CARRIER 2400",
+"CARRIER 2400/VFC",
+"CARRIER 24000",
+"CARRIER 24000 V.34",
+"CARRIER 24000/VFC",
+"CARRIER 26400",
+"CARRIER 26400 V.34",
+"CARRIER 26400/VFC",
+"CARRIER 28800",
+"CARRIER 28800 V.34",
+"CARRIER 28800/VFC",
+"CARRIER 300",
+"CARRIER 300/VFC",
+"CARRIER 4800",
+"CARRIER 4800/VFC",
+"CARRIER 7200",
+"CARRIER 7200/VFC",
+"CARRIER 75/1200",
+"CARRIER 75/1200/VFC",
+"CARRIER 9600",
+"CARRIER 9600/VFC",
+"CLIENT",
+"CLIENTSERVER",
+"COMPRESSION: ADC",
+"COMPRESSION: CLASS 5",
+"COMPRESSION: CLASS5",
+"COMPRESSION: MNP5",
+"COMPRESSION: NONE",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V42BIS",
+"COMPRESSION:CLASS5",
+"COMPRESSION:MNP5",
+"COMPRESSION:NONE",
+"COMPRESSION:V.42bis",
+"CONNECT",
+"CONNECT 0300",
+"CONNECT 0300/ARQ",
+"CONNECT 0300/LAP-M",
+"CONNECT 0300/MNP",
+"CONNECT 0300/REL",
+"CONNECT 0300/REL-5",
+"CONNECT 0300/REL-LAPM",
+"CONNECT 0300/REL-LAPM-COMP",
+"CONNECT 0300/REL-MNP",
+"CONNECT 0300/REL-MNP-COMP",
+"CONNECT 0300/REL-V.42",
+"CONNECT 0300/V42b",
+"CONNECT 0300/V42BIS",
+"CONNECT 0600",
+"CONNECT 0600/ARQ",
+"CONNECT 0600/LAP-M",
+"CONNECT 0600/LAPM",
+"CONNECT 0600/MNP",
+"CONNECT 0600/NONE",
+"CONNECT 0600/REL",
+"CONNECT 0600/REL-5",
+"CONNECT 0600/REL-LAPM",
+"CONNECT 0600/REL-LAPM-COMP",
+"CONNECT 0600/REL-MNP",
+"CONNECT 0600/REL-MNP-COMP",
+"CONNECT 0600/REL-V.42",
+"CONNECT 0600/V42",
+"CONNECT 0600/V42b",
+"CONNECT 0600/V42BIS",
+"CONNECT 115,200",
+"CONNECT 115,200/ARQ",
+"CONNECT 115,200/LAP-M",
+"CONNECT 115,200/MNP",
+"CONNECT 115,200/NONE",
+"CONNECT 115,200/REL",
+"CONNECT 115,200/REL-5",
+"CONNECT 115,200/REL-V.42",
+"CONNECT 115,200/V42",
+"CONNECT 115,200/V42b",
+"CONNECT 115,200/V42BIS",
+"CONNECT 115200",
+"CONNECT 115200/ARQ",
+"CONNECT 115200/LAP-M",
+"CONNECT 115200/LAPM",
+"CONNECT 115200/MNP",
+"CONNECT 115200/NONE",
+"CONNECT 115200/REL",
+"CONNECT 115200/REL-5",
+"CONNECT 115200/REL-LAPM",
+"CONNECT 115200/REL-LAPM-COMP",
+"CONNECT 115200/REL-MNP",
+"CONNECT 115200/REL-MNP-COMP",
+"CONNECT 115200/REL-V.42",
+"CONNECT 115200/REL/VFC",
+"CONNECT 115200/V42",
+"CONNECT 115200/V42b",
+"CONNECT 115200/V42BIS",
+"CONNECT 115200/VFC",
+"CONNECT 1200",
+"CONNECT 1200/75",
+"CONNECT 1200/75/ARQ",
+"CONNECT 1200/75/LAP-M",
+"CONNECT 1200/75/LAPM",
+"CONNECT 1200/75/MNP",
+"CONNECT 1200/75/NONE",
+"CONNECT 1200/75/REL",
+"CONNECT 1200/75/REL-5",
+"CONNECT 1200/75/REL-LAPM",
+"CONNECT 1200/75/REL-LAPM-COMP",
+"CONNECT 1200/75/REL-MNP",
+"CONNECT 1200/75/REL-MNP-COMP",
+"CONNECT 1200/75/REL-V.42",
+"CONNECT 1200/75/V42",
+"CONNECT 1200/75/V42b",
+"CONNECT 1200/75/V42BIS",
+"CONNECT 1200/ARQ",
+"CONNECT 1200/ECL",
+"CONNECT 1200/ECLC",
+"CONNECT 1200/LAP-M",
+"CONNECT 1200/LAPM",
+"CONNECT 1200/MNP",
+"CONNECT 1200/NONE",
+"CONNECT 1200/REL",
+"CONNECT 1200/REL-5",
+"CONNECT 1200/REL-LAPM",
+"CONNECT 1200/REL-LAPM-COMP",
+"CONNECT 1200/REL-LAPM V.42 BIS",
+"CONNECT 1200/REL-MNP",
+"CONNECT 1200/REL-MNP-COMP",
+"CONNECT 1200/REL-MNP 5",
+"CONNECT 1200/REL-V.42",
+"CONNECT 1200/V42",
+"CONNECT 1200/V42b",
+"CONNECT 1200/V42BIS",
+"CONNECT 12000",
+"CONNECT 12000/ARQ",
+"CONNECT 12000/ECL",
+"CONNECT 12000/ECLC",
+"CONNECT 12000/LAP-M",
+"CONNECT 12000/LAPM",
+"CONNECT 12000/MNP",
+"CONNECT 12000/NONE",
+"CONNECT 12000/REL",
+"CONNECT 12000/REL-5",
+"CONNECT 12000/REL-LAPM",
+"CONNECT 12000/REL-LAPM-COMP",
+"CONNECT 12000/REL-LAPM V.42 BIS",
+"CONNECT 12000/REL-MNP",
+"CONNECT 12000/REL-MNP-COMP",
+"CONNECT 12000/REL-MNP 5",
+"CONNECT 12000/REL-V.42",
+"CONNECT 12000/V42",
+"CONNECT 12000/V42b",
+"CONNECT 12000/V42BIS",
+"CONNECT 1200TX/75RX",
+"CONNECT 1200TX/75RX/ARQ",
+"CONNECT 1200TX/75RX/LAP-M",
+"CONNECT 1200TX/75RX/LAPM",
+"CONNECT 1200TX/75RX/MNP",
+"CONNECT 1200TX/75RX/NONE",
+"CONNECT 1200TX/75RX/REL",
+"CONNECT 1200TX/75RX/REL-5",
+"CONNECT 1200TX/75RX/REL-LAPM",
+"CONNECT 1200TX/75RX/REL-LAPM-COMP",
+"CONNECT 1200TX/75RX/REL-MNP",
+"CONNECT 1200TX/75RX/REL-MNP-COMP",
+"CONNECT 1200TX/75RX/REL-V.42",
+"CONNECT 1200TX/75RX/V42",
+"CONNECT 1200TX/75RX/V42b",
+"CONNECT 1200TX/75RX/V42BIS",
+"CONNECT 14400",
+"CONNECT 14400/ARQ",
+"CONNECT 14400/ECL",
+"CONNECT 14400/ECLC",
+"CONNECT 14400/LAP-M",
+"CONNECT 14400/LAPM",
+"CONNECT 14400/MNP",
+"CONNECT 14400/NONE",
+"CONNECT 14400/REL",
+"CONNECT 14400/REL-5",
+"CONNECT 14400/REL-LAPM",
+"CONNECT 14400/REL-LAPM-COMP",
+"CONNECT 14400/REL-LAPM V.42 BIS",
+"CONNECT 14400/REL-MNP",
+"CONNECT 14400/REL-MNP-COMP",
+"CONNECT 14400/REL-MNP 5",
+"CONNECT 14400/REL-V.42",
+"CONNECT 14400/V42",
+"CONNECT 14400/V42b",
+"CONNECT 14400/V42BIS",
+"CONNECT 14400/VFC",
+"CONNECT 16800",
+"CONNECT 16800/ARQ",
+"CONNECT 16800/ECL",
+"CONNECT 16800/ECLC",
+"CONNECT 16800/LAP-M",
+"CONNECT 16800/LAPM",
+"CONNECT 16800/MNP",
+"CONNECT 16800/NONE",
+"CONNECT 16800/REL",
+"CONNECT 16800/REL-5",
+"CONNECT 16800/REL-LAPM",
+"CONNECT 16800/REL-LAPM-COMP",
+"CONNECT 16800/REL-MNP",
+"CONNECT 16800/REL-MNP-COMP",
+"CONNECT 16800/REL-V.42",
+"CONNECT 16800/V42",
+"CONNECT 16800/V42b",
+"CONNECT 16800/V42BIS",
+"CONNECT 16800/VFC",
+"CONNECT 19200",
+"CONNECT 19200/ARQ",
+"CONNECT 19200/ECL",
+"CONNECT 19200/ECLC",
+"CONNECT 19200/LAP-M",
+"CONNECT 19200/LAPM",
+"CONNECT 19200/MNP",
+"CONNECT 19200/NONE",
+"CONNECT 19200/REL",
+"CONNECT 19200/REL-5",
+"CONNECT 19200/REL-LAPM",
+"CONNECT 19200/REL-LAPM-COMP",
+"CONNECT 19200/REL-MNP",
+"CONNECT 19200/REL-MNP-COMP",
+"CONNECT 19200/REL-V.42",
+"CONNECT 19200/V42",
+"CONNECT 19200/V42b",
+"CONNECT 19200/V42BIS",
+"CONNECT 19200/VFC",
+"CONNECT 21600",
+"CONNECT 21600/ARQ",
+"CONNECT 21600/ECL",
+"CONNECT 21600/ECLC",
+"CONNECT 21600/LAP-M",
+"CONNECT 21600/LAPM",
+"CONNECT 21600/MNP",
+"CONNECT 21600/NONE",
+"CONNECT 21600/REL",
+"CONNECT 21600/REL-5",
+"CONNECT 21600/REL-LAPM-COMP",
+"CONNECT 21600/REL-MNP",
+"CONNECT 21600/REL-MNP-COMP",
+"CONNECT 21600/REL-REL-LAPM",
+"CONNECT 21600/REL-V.42",
+"CONNECT 21600/V42",
+"CONNECT 21600/V42b",
+"CONNECT 21600/V42BIS",
+"CONNECT 21600/VFC",
+"CONNECT 230400",
+"CONNECT 230400/ARQ",
+"CONNECT 230400/LAP-M",
+"CONNECT 230400/MNP",
+"CONNECT 230400/NONE",
+"CONNECT 230400/REL",
+"CONNECT 230400/V42",
+"CONNECT 230400/V42b",
+"CONNECT 230400/V42BIS",
+"CONNECT 2400",
+"CONNECT 2400/ARQ",
+"CONNECT 2400/ECL",
+"CONNECT 2400/ECLC",
+"CONNECT 2400/LAP-M",
+"CONNECT 2400/LAPM",
+"CONNECT 2400/MNP",
+"CONNECT 2400/NONE",
+"CONNECT 2400/REL",
+"CONNECT 2400/REL-5",
+"CONNECT 2400/REL-LAPM",
+"CONNECT 2400/REL-LAPM-COMP",
+"CONNECT 2400/REL-LAPM V.42 BIS",
+"CONNECT 2400/REL-MNP",
+"CONNECT 2400/REL-MNP-COMP",
+"CONNECT 2400/REL-MNP 5",
+"CONNECT 2400/REL-V.42",
+"CONNECT 2400/V42",
+"CONNECT 2400/V42b",
+"CONNECT 2400/V42BIS",
+"CONNECT 24000",
+"CONNECT 24000/ARQ",
+"CONNECT 24000/ECL",
+"CONNECT 24000/ECLC",
+"CONNECT 24000/LAP-M",
+"CONNECT 24000/LAPM",
+"CONNECT 24000/MNP",
+"CONNECT 24000/NONE",
+"CONNECT 24000/REL",
+"CONNECT 24000/REL-5",
+"CONNECT 24000/REL-LAPM",
+"CONNECT 24000/REL-LAPM-COMP",
+"CONNECT 24000/REL-MNP",
+"CONNECT 24000/REL-MNP-COMP",
+"CONNECT 24000/REL-V.42",
+"CONNECT 24000/V42",
+"CONNECT 24000/V42b",
+"CONNECT 24000/V42BIS",
+"CONNECT 24000/VFC",
+"CONNECT 26400",
+"CONNECT 26400/ARQ",
+"CONNECT 26400/ECL",
+"CONNECT 26400/ECLC",
+"CONNECT 26400/LAP-M",
+"CONNECT 26400/LAPM",
+"CONNECT 26400/MNP",
+"CONNECT 26400/NONE",
+"CONNECT 26400/REL",
+"CONNECT 26400/REL-5",
+"CONNECT 26400/REL-LAPM",
+"CONNECT 26400/REL-LAPM-COMP",
+"CONNECT 26400/REL-MNP",
+"CONNECT 26400/REL-MNP-COMP",
+"CONNECT 26400/REL-V.42",
+"CONNECT 26400/V42",
+"CONNECT 26400/V42b",
+"CONNECT 26400/V42BIS",
+"CONNECT 26400/VFC",
+"CONNECT 28800",
+"CONNECT 28800/ARQ",
+"CONNECT 28800/ARQ/VFC",
+"CONNECT 28800/ECL",
+"CONNECT 28800/ECLC",
+"CONNECT 28800/LAP-M",
+"CONNECT 28800/LAPM",
+"CONNECT 28800/MNP",
+"CONNECT 28800/NONE",
+"CONNECT 28800/REL",
+"CONNECT 28800/REL-5",
+"CONNECT 28800/REL-LAPM",
+"CONNECT 28800/REL-LAPM-COMP",
+"CONNECT 28800/REL-MNP",
+"CONNECT 28800/REL-MNP-COMP",
+"CONNECT 28800/REL-V.42",
+"CONNECT 28800/REL/VFC",
+"CONNECT 28800/V42",
+"CONNECT 28800/V42b",
+"CONNECT 28800/V42BIS",
+"CONNECT 28800/VFC",
+"CONNECT 300",
+"CONNECT 300/ARQ",
+"CONNECT 300/ECL",
+"CONNECT 300/ECLC",
+"CONNECT 300/LAP-M",
+"CONNECT 300/LAPM",
+"CONNECT 300/MNP",
+"CONNECT 300/NONE",
+"CONNECT 300/REL",
+"CONNECT 300/REL-5",
+"CONNECT 300/REL-LAPM",
+"CONNECT 300/REL-LAPM-COMP",
+"CONNECT 300/REL-LAPM V.42 BIS",
+"CONNECT 300/REL-MNP",
+"CONNECT 300/REL-MNP-COMP",
+"CONNECT 300/REL-MNP 5",
+"CONNECT 300/REL-V.42",
+"CONNECT 300/V42",
+"CONNECT 300/V42b",
+"CONNECT 300/V42BIS",
+"CONNECT 38400",
+"CONNECT 38400/ARQ",
+"CONNECT 38400/LAP-M",
+"CONNECT 38400/LAPM",
+"CONNECT 38400/MNP",
+"CONNECT 38400/NONE",
+"CONNECT 38400/REL",
+"CONNECT 38400/REL-5",
+"CONNECT 38400/REL-LAPM",
+"CONNECT 38400/REL-LAPM-COMP",
+"CONNECT 38400/REL-MNP",
+"CONNECT 38400/REL-MNP-COMP",
+"CONNECT 38400/REL-V.42",
+"CONNECT 38400/REL/VFC",
+"CONNECT 38400/V42",
+"CONNECT 38400/V42b",
+"CONNECT 38400/V42BIS",
+"CONNECT 38400/VFC",
+"CONNECT 4800",
+"CONNECT 4800/ARQ",
+"CONNECT 4800/ECL",
+"CONNECT 4800/ECLC",
+"CONNECT 4800/LAP-M",
+"CONNECT 4800/LAPM",
+"CONNECT 4800/MNP",
+"CONNECT 4800/NONE",
+"CONNECT 4800/REL",
+"CONNECT 4800/REL-5",
+"CONNECT 4800/REL-LAPM",
+"CONNECT 4800/REL-LAPM-COMP",
+"CONNECT 4800/REL-LAPM V.42 BIS",
+"CONNECT 4800/REL-MNP",
+"CONNECT 4800/REL-MNP-COMP",
+"CONNECT 4800/REL-MNP 5",
+"CONNECT 4800/REL-V.42",
+"CONNECT 4800/V42",
+"CONNECT 4800/V42b",
+"CONNECT 4800/V42BIS",
+"CONNECT 57600",
+"CONNECT 57600/ARQ",
+"CONNECT 57600/LAP-M",
+"CONNECT 57600/LAPM",
+"CONNECT 57600/MNP",
+"CONNECT 57600/NONE",
+"CONNECT 57600/REL",
+"CONNECT 57600/REL-5",
+"CONNECT 57600/REL-LAPM",
+"CONNECT 57600/REL-LAPM-COMP",
+"CONNECT 57600/REL-MNP",
+"CONNECT 57600/REL-MNP-COMP",
+"CONNECT 57600/REL-V.42",
+"CONNECT 57600/REL/VFC",
+"CONNECT 57600/V42",
+"CONNECT 57600/V42b",
+"CONNECT 57600/V42BIS",
+"CONNECT 57600/VFC",
+"CONNECT 600",
+"CONNECT 600/ARQ",
+"CONNECT 600/ECL",
+"CONNECT 600/ECLC",
+"CONNECT 600/LAP-M",
+"CONNECT 600/LAPM",
+"CONNECT 600/MNP",
+"CONNECT 600/NONE",
+"CONNECT 600/REL",
+"CONNECT 600/REL-5",
+"CONNECT 600/REL-LAPM",
+"CONNECT 600/REL-LAPM-COMP",
+"CONNECT 600/REL-LAPM V.42 BIS",
+"CONNECT 600/REL-MNP",
+"CONNECT 600/REL-MNP-COMP",
+"CONNECT 600/REL-MNP 5",
+"CONNECT 600/REL-V.42",
+"CONNECT 600/V42",
+"CONNECT 600/V42b",
+"CONNECT 600/V42BIS",
+"CONNECT 7200",
+"CONNECT 7200/ARQ",
+"CONNECT 7200/ECL",
+"CONNECT 7200/ECLC",
+"CONNECT 7200/LAP-M",
+"CONNECT 7200/LAPM",
+"CONNECT 7200/MNP",
+"CONNECT 7200/NONE",
+"CONNECT 7200/REL",
+"CONNECT 7200/REL-5",
+"CONNECT 7200/REL-LAPM",
+"CONNECT 7200/REL-LAPM-COMP",
+"CONNECT 7200/REL-LAPM V.42 BIS",
+"CONNECT 7200/REL-MNP",
+"CONNECT 7200/REL-MNP-COMP",
+"CONNECT 7200/REL-MNP 5",
+"CONNECT 7200/REL-V.42",
+"CONNECT 7200/V42",
+"CONNECT 7200/V42b",
+"CONNECT 7200/V42BIS",
+"CONNECT 75/1200",
+"CONNECT 75/1200/ARQ",
+"CONNECT 75/1200/LAP-M",
+"CONNECT 75/1200/MNP",
+"CONNECT 75/1200/NONE",
+"CONNECT 75/1200/REL",
+"CONNECT 75/1200/REL-5",
+"CONNECT 75/1200/REL-LAPM",
+"CONNECT 75/1200/REL-LAPM-COMP",
+"CONNECT 75/1200/REL-MNP",
+"CONNECT 75/1200/REL-MNP-COMP",
+"CONNECT 75/1200/REL-V.42",
+"CONNECT 75/1200/V42",
+"CONNECT 75/1200/V42b",
+"CONNECT 75/1200/V42BIS",
+"CONNECT 75TX/1200RX",
+"CONNECT 75TX/1200RX/ARQ",
+"CONNECT 75TX/1200RX/LAP-M",
+"CONNECT 75TX/1200RX/LAPM",
+"CONNECT 75TX/1200RX/MNP",
+"CONNECT 75TX/1200RX/NONE",
+"CONNECT 75TX/1200RX/REL",
+"CONNECT 75TX/1200RX/REL-5",
+"CONNECT 75TX/1200RX/REL-LAPM",
+"CONNECT 75TX/1200RX/REL-LAPM-COMP",
+"CONNECT 75TX/1200RX/REL-MNP",
+"CONNECT 75TX/1200RX/REL-MNP-COMP",
+"CONNECT 75TX/1200RX/REL-V.42",
+"CONNECT 75TX/1200RX/V42",
+"CONNECT 75TX/1200RX/V42b",
+"CONNECT 75TX/1200RX/V42BIS",
+"CONNECT 9600",
+"CONNECT 9600/ARQ",
+"CONNECT 9600/ECL",
+"CONNECT 9600/ECLC",
+"CONNECT 9600/LAP-M",
+"CONNECT 9600/LAPM",
+"CONNECT 9600/MNP",
+"CONNECT 9600/NONE",
+"CONNECT 9600/REL",
+"CONNECT 9600/REL-5",
+"CONNECT 9600/REL-LAPM",
+"CONNECT 9600/REL-LAPM-COMP",
+"CONNECT 9600/REL-LAPM V.42 BIS",
+"CONNECT 9600/REL-MNP",
+"CONNECT 9600/REL-MNP-COMP",
+"CONNECT 9600/REL-MNP 5",
+"CONNECT 9600/REL-V.42",
+"CONNECT 9600/V42",
+"CONNECT 9600/V42b",
+"CONNECT 9600/V42BIS",
+"CONNECT ECL",
+"CONNECT ECLC",
+"CONNECT/ARQ",
+"CONNECT/LAP-M",
+"CONNECT/LAPM",
+"CONNECT/MNP",
+"CONNECT/NONE",
+"CONNECT/REL",
+"CONNECT/V42",
+"CONNECT/V42b",
+"CONNECT/V42BIS",
+"DATA",
+"DELAYED",
+"DIALING",
+"ERROR",
+"FAX",
+"HOST DRIVER TIMEOUT",
+"mdmblatz.inf:HKR, Responses,",
+"mdmbsb.inf:HKR, Responses,",
+"mdmbsch.inf:HKR, Responses,",
+"mdmhaeus.inf:HKR, Responses,",
+"mdmico.inf:HKR, Responses,",
+"mdminsys.inf:HKR, Responses,",
+"mdmke.inf:HKR, Responses,",
+"mdmmart.inf:HKR, Responses,",
+"mdmneuhs.inf:HKR, Responses,",
+"mdmrfi.inf:HKR, Responses,",
+"mdmtelnk.inf:HKR, Responses,",
+"mdmtger.inf:HKR, Responses,",
+"mdmtkr.inf:HKR, Responses,",
+"mdmusrcr.inf:HKR,Responses,",
+"mdmusrg.inf:HKR,Responses,",
+"mdmusrsp.inf:HKR,Responses,",
+"mdmusrwp.inf:HKR,Responses,",
+"mdmwoer.inf:HKR, Responses,",
+"MESG = ",
+"NAME = ",
+"NMBR = ",
+"NO ANSWER",
+"NO CARRIER",
+"NO DIAL TONE",
+"NO DIALTONE",
+"NoResponse",
+"OK",
+"PROTOCOL: ALT",
+"PROTOCOL: ALT-CELLULAR",
+"PROTOCOL: ALT - CELLULAR",
+"PROTOCOL: ERROR-CONTROL/LAPB",
+"PROTOCOL: ERROR-CONTROL/LAPB/AFT",
+"PROTOCOL: ERROR-CONTROL/LAPB/HDX",
+"PROTOCOL: LAP-M",
+"PROTOCOL: LAP-M/AFT",
+"PROTOCOL: LAP-M/ETC",
+"PROTOCOL: LAP-M/HDX",
+"PROTOCOL: LAPM",
+"PROTOCOL: LAPM/AFT",
+"PROTOCOL: LAPM/HDX",
+"PROTOCOL: MNP",
+"PROTOCOL: MNP 2",
+"PROTOCOL: MNP 2, 4",
+"PROTOCOL: MNP 3",
+"PROTOCOL: MNP 3, 4",
+"PROTOCOL: MNP 4",
+"PROTOCOL: MNP10",
+"PROTOCOL: MNP2",
+"PROTOCOL: MNP3",
+"PROTOCOL: MNP4",
+"PROTOCOL: NONE",
+"PROTOCOL: X.25/LAPB",
+"PROTOCOL: X.25/LAPB/AFT",
+"PROTOCOL: X.25/LAPB/HDX",
+"PROTOCOL:MNP 2, 4",
+"PROTOCOL:MNP 3, 4",
+"PROTOCOL:NONE",
+"RING",
+"RINGING",
+"RRING",
+"TIME = ",
+"VOICE",
+NULL
+};
+
+
+CHAR *rgpszActualResp[] =
+{
+ "0@",
+ "2@",
+ "3@",
+ "4@",
+ "6@",
+ "7@",
+ "8@",
+ "@",
+ "@#BUSY@#",
+ "@#CONNECT 1200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 1200/ARQ/LAPM/MNP5@#",
+ "@#CONNECT 1200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 1200/ARQ/LAPM@#",
+ "@#CONNECT 1200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 1200/ARQ/MNP/V42BIS@#",
+ "@#CONNECT 1200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 1200/ARQ/V32/LAPM@#",
+ "@#CONNECT 1200/ARQ/V32/MNP@#",
+ "@#CONNECT 1200/ARQ/V34/LAPM@#",
+ "@#CONNECT 1200/ARQ/V34/MNP@#",
+ "@#CONNECT 1200/ARQ@#",
+ "@#CONNECT 1200/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 12000/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V32/MNP@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V34/MNP@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ@#",
+ "@#CONNECT 12000/HST/NONE@#",
+ "@#CONNECT 12000/V32/NONE@#",
+ "@#CONNECT 12000/V34/NONE@#",
+ "@#CONNECT 12000/VFC/NONE@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 14400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V32/MNP@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V34/MNP@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ@#",
+ "@#CONNECT 14400/HST/NONE@#",
+ "@#CONNECT 14400/V32/NONE@#",
+ "@#CONNECT 14400/V34/NONE@#",
+ "@#CONNECT 14400/VFC/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 16800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V32/MNP@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V34/MNP@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ@#",
+ "@#CONNECT 16800/HST/NONE@#",
+ "@#CONNECT 16800/V32/NONE@#",
+ "@#CONNECT 16800/V34/NONE@#",
+ "@#CONNECT 16800/VFC/NONE@#",
+ "@#CONNECT 19200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 19200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V32/MNP@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V34/MNP@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ@#",
+ "@#CONNECT 19200/V32/NONE@#",
+ "@#CONNECT 19200/V34/NONE@#",
+ "@#CONNECT 19200/VFC/NONE@#",
+ "@#CONNECT 21600/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 21600/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V32/MNP@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V34/MNP@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ@#",
+ "@#CONNECT 21600/V32/NONE@#",
+ "@#CONNECT 21600/V34/NONE@#",
+ "@#CONNECT 21600/VFC/NONE@#",
+ "@#CONNECT 2400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 2400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/LAPM@#",
+ "@#CONNECT 2400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 2400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V32/LAPM@#",
+ "@#CONNECT 2400/ARQ/V32/MNP@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V34/MNP@#",
+ "@#CONNECT 2400/ARQ@#",
+ "@#CONNECT 2400/NONE@#",
+ "@#CONNECT 2400/V34/NONE@#",
+ "@#CONNECT 24000/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 24000/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V32/LAPM@#",
+ "@#CONNECT 24000/ARQ/V32/MNP@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V34/MNP@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 24000/ARQ@#",
+ "@#CONNECT 24000/V34/NONE@#",
+ "@#CONNECT 24000/VFC/NONE@#",
+ "@#CONNECT 26400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 26400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V32/LAPM@#",
+ "@#CONNECT 26400/ARQ/V32/MNP@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V34/MNP@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 26400/ARQ@#",
+ "@#CONNECT 26400/V34/NONE@#",
+ "@#CONNECT 26400/VFC/NONE@#",
+ "@#CONNECT 28800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 28800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V32/LAPM@#",
+ "@#CONNECT 28800/ARQ/V32/MNP@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V34/MNP@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 28800/ARQ@#",
+ "@#CONNECT 28800/V34/NONE@#",
+ "@#CONNECT 28800/VFC/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 4800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/LAPM@#",
+ "@#CONNECT 4800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V32/MNP@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V34/MNP@#",
+ "@#CONNECT 4800/ARQ@#",
+ "@#CONNECT 4800/HST/NONE@#",
+ "@#CONNECT 4800/V32/NONE@#",
+ "@#CONNECT 4800/V34/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 7200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/LAPM@#",
+ "@#CONNECT 7200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V32/MNP@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V34/MNP@#",
+ "@#CONNECT 7200/ARQ@#",
+ "@#CONNECT 7200/HST/NONE@#",
+ "@#CONNECT 7200/V32/NONE@#",
+ "@#CONNECT 7200/V34/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 9600/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V32/MNP@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V34/MNP@#",
+ "@#CONNECT 9600/ARQ@#",
+ "@#CONNECT 9600/HST/NONE@#",
+ "@#CONNECT 9600/V32/NONE@#",
+ "@#CONNECT 9600/V34/NONE@#",
+ "@#CONNECT@#",
+ "@#ERROR@#",
+ "@#NO ANSWER@#",
+ "@#NO CARRIER@#",
+ "@#NO DIAL TONE@#",
+ "@#NO DIALTONE@#",
+ "@#OK@#",
+ "@#RING@#",
+ "@#RINGING@#",
+ "@#VOICE@#",
+ "#",
+ NULL
+};
diff --git a/private/unimodem/new/mic/alloc.h b/private/unimodem/new/mic/alloc.h
new file mode 100644
index 000000000..ae5637608
--- /dev/null
+++ b/private/unimodem/new/mic/alloc.h
@@ -0,0 +1,86 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// ALLOC.H -- Header for Classes:
+// CAllococator
+//
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+#if (TODO)
+
+
+class CAllocator
+{
+ Allocator(UINT uSize) : m_uSize(uSize)
+ {
+ ASSERT(!(uSize %sizeof(void *)));
+ m_uBlockSize = (uSize+sizeof(void *))
+ if (uSize<1000)
+ m_uBlockSize = m_uBlockSize*10 + sizeof(void *)
+
+ m_uBlockSize += sizeof (void*);
+ }
+
+ ~Allocator()
+ {
+ void *pList = m_pBlockList;
+ while(pList)
+ {
+ void *pOld = pList;
+ pList = (void *) *pList;
+ GlobalFree(pOld);
+ }
+ }
+
+ void * Alloc(void)
+ {
+ m_sync.EnterCrit();
+
+ void *pvRet = m_pFreeList;
+
+ if (!m_pFreeList)
+ {
+ void *pv = GlobalAlloc(LPTR, m_uBlockSize);
+ void *pvEnd = pv+m_uBlockSize;
+ if (pv)
+ {
+ *pv = m_pvBlockList;
+ m_pvBlockList = pv;
+ m_pFreeList = ++pv;
+ for(;;pv = *pv)
+ {
+ *pv = pv + m_uSize + sizeof (void *);
+ if (*pv >= pvEnd) {*pv=NULL;break;}
+ pv = *pv;
+ }
+ pvRet = m_pFreeList;
+ }
+ }
+
+ m_sync.LeaveCrit();
+
+ return pvRet;
+ }
+
+ void Free(void *pv)
+ {
+ m_sync.EnterCrit();
+ pv--;
+ *pv = m_pFreeList;
+ m_pFreeList=*pv;
+ m_sync.LeaveCrit();
+ }
+
+private:
+
+ void * m_pFreeList;
+ void * m_pBlockList;
+ const UINT m_uSize;
+ UINT m_uBlockSize;
+ CSync m_sync;
+}
+#endif (TODO)
diff --git a/private/unimodem/new/mic/chksum.cpp b/private/unimodem/new/mic/chksum.cpp
new file mode 100644
index 000000000..55e936eaa
--- /dev/null
+++ b/private/unimodem/new/mic/chksum.cpp
@@ -0,0 +1,57 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// CHKSUM.CPP -- Implementation Checksum()
+//
+// History:
+// 05/24/96 JosephJ Created
+//
+//
+#include "common.h"
+
+//---------------- ::Checksum -----------------------------------
+// Compute a 32-bit checksum of the specified bytes
+// 0 is retured if pb==NULL or cb==0
+DWORD Checksum(const BYTE *pb, UINT cb)
+{
+ const UINT MAXSIZE = 1024;
+ DWORD dwRet = 0;
+ //DWORD rgdwBuf[MAXSIZE/sizeof(DWORD)];
+
+
+ if (!pb) goto end;
+
+
+ // TODO: replace by crc32
+ while(cb--) {dwRet ^= dwRet<<1 ^ *pb++;}
+
+#if (TODO)
+ // If buffer not dword aligned, we copy it over to a buffer which is,
+ // and pad it
+ if (cb & 0x3)
+ {
+ if (cb>=MAXSIZE)
+ {
+ ASSERT(FALSE);
+ goto end;
+ }
+ CopyMemory(rgdwBuf, pb, cb);
+ }
+#endif (TODO)
+
+end:
+ return dwRet;
+}
+
+
+//---------------- ::AddToChecksumDW ----------------------------
+// Set *pdwChkSum to a new checksum, computed using it's previous value and dw.
+void AddToChecksumDW(DWORD *pdwChkSum, DWORD dw)
+{
+ DWORD rgdw[2];
+ rgdw[0] = *pdwChkSum;
+ rgdw[1] = dw;
+
+ *pdwChkSum = Checksum((const BYTE *) rgdw, sizeof(rgdw));
+}
diff --git a/private/unimodem/new/mic/chksum.h b/private/unimodem/new/mic/chksum.h
new file mode 100644
index 000000000..e5af9e49f
--- /dev/null
+++ b/private/unimodem/new/mic/chksum.h
@@ -0,0 +1,23 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// CHKSUM.H -- Header for Checksum computation
+//
+// History:
+// 05/24/96 JosephJ Created
+//
+//
+#ifndef _CHKSUM_H_
+#define _CHKSUM_H_
+
+//---------------- ::Checksum -----------------------------------
+// Compute a 32-bit checksum of the specified bytes
+// 0 is retured if pb==NULL or cb==0
+DWORD Checksum(const BYTE *pb, UINT cb);
+
+//---------------- ::AddToChecksumDW ----------------------------
+// Set *pdwChkSum to a new checksum, computed using it's previous value and dw.
+void AddToChecksumDW(DWORD *pdwChkSum, DWORD dw);
+
+#endif // _CHKSUM_H_
diff --git a/private/unimodem/new/mic/common.h b/private/unimodem/new/mic/common.h
new file mode 100644
index 000000000..6dfe74c45
--- /dev/null
+++ b/private/unimodem/new/mic/common.h
@@ -0,0 +1,32 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+// COMMON.H -- Common header
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+
+#ifndef _COMMON_H_
+#define _COMMON_H_
+
+#include <windows.h>
+#include <stdio.h>
+
+#define ASSERT(_c) \
+ ((_c) ? 0: printf( \
+ "\n***Assertion failed in %s:%d\n***\n",\
+ __FILE__,\
+ __LINE__\
+ ))
+
+#include "consts.h"
+#include "chksum.h"
+#include "ilist.h"
+#include "sync.h"
+#include "sym.h"
+#include "globals.h"
+
+
+#endif // _COMMON_H_
diff --git a/private/unimodem/new/mic/consts.h b/private/unimodem/new/mic/consts.h
new file mode 100644
index 000000000..68d39d3b7
--- /dev/null
+++ b/private/unimodem/new/mic/consts.h
@@ -0,0 +1,30 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+// CONSTS.H -- Common constants
+//
+// History:
+// 06/13/96 JosephJ Created
+//
+//
+#ifndef _CONSTS_H_
+#define _CONSTS_H_
+
+// Platforms
+enum ePLATFORM
+{
+ ePLAT_ALL,
+ ePLAT_NT_ALL,
+ ePLAT_NT_ALPHA,
+ ePLAT_NT_PPC,
+ ePLAT_NT_MIPS
+};
+
+// Object signatures.
+enum eOBJSIG
+{
+ eOBJSIG_INVALID = 0,
+ eOBJSIG_CInfManufacturerSection = 1234
+};
+
+#endif // _CONSTS_H_
diff --git a/private/unimodem/new/mic/dev.cpp b/private/unimodem/new/mic/dev.cpp
new file mode 100644
index 000000000..051632a5c
--- /dev/null
+++ b/private/unimodem/new/mic/dev.cpp
@@ -0,0 +1,1103 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// DEV.C -- Implementation for Classes:
+// CInfDevice
+//
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+#include "common.h"
+#include "ini.h"
+#include "inf.h"
+#include "dev.h"
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfDevice
+///////////////////////////////////////////////////////////////////////////
+
+
+//-------------- Dump ------------------
+// Dump state
+void CInfDevice::Dump(void) const
+{
+ // Dump Version
+ m_pVersion->Dump();
+
+ // Dump manufacturer name
+ m_pSymManufacturerName->Dump();
+
+ // Dump model name
+ m_pSymDeviceName->Dump();
+
+ // Dump AddRegList
+ {
+ const CInfList *pList = m_pAddRegList;
+
+ for (;pList; pList=pList->Next())
+ {
+ const CInfAddRegEntry * pAddRegEntry =
+ (const CInfAddRegEntry *) pList->GetData();
+ pAddRegEntry->Dump();
+ }
+
+ }
+
+ // Dump CopyFilesList
+ {
+ const CInfList *pList = m_pCopyFilesList;
+
+ for (;pList; pList=pList->Next())
+ {
+ const CInfCopyFilesEntry * pCopyFilesEntry =
+ (const CInfCopyFilesEntry *) pList->GetData();
+ pCopyFilesEntry->Dump();
+ }
+
+ }
+
+ // NoResDup section
+ {
+ // [Modem6.NoResDup]
+ // UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15
+
+ // TODO: unimplemented
+
+ }
+
+ // PosDup section
+ {
+ // [Modem12.PosDup]
+ // *PNP0500
+
+ // TODO: unimplemented
+ }
+ // TODO: UpdateInis, Uninstall, NoResDup, PosDup
+
+}
+
+
+//-------------- Load ------------------
+// Load (init), using information from the specified inf file and model entry.
+BOOL CInfDevice::Load
+(
+ const CInfFile *pInf,
+ const CInfManufacturerEntry *pManuE,
+ const CInfModelEntry *pModelE
+)
+{
+ BOOL fRet = FALSE;
+
+ mfn_EnterCrit();
+
+ // TODO: call m_sync.BeginLoad
+
+ ASSERT
+ (
+ !m_pvInfSession
+ && !m_pInfFile
+ && !m_pManufacturerEntry
+ && !m_pModelEntry
+ && !m_pVersion
+ && !m_pSymManufacturerName
+ && !m_pSymDeviceName
+ && !m_pCopyFilesList
+ && !m_pAddRegList
+ );
+
+ if (!pInf || !pManuE || !pModelE) goto end;
+
+ // Keep a reference to the Inf file and manufacturer and model entry
+ m_pInfFile = pInf;
+ m_pModelEntry = pModelE;
+ m_pManufacturerEntry = pManuE;
+
+ // Open a session with the inf file.
+ m_pvInfSession = pInf->OpenSession ();
+
+ if (!m_pvInfSession)
+ {
+ printf("Error calling pInf->OpenSession()\n");
+ goto end;
+ }
+
+ // version
+ m_pVersion = pInf->GetVersion();
+
+ // manufacturer name
+ m_pSymManufacturerName = pManuE->GetName();
+
+ // model name
+ m_pSymDeviceName = pModelE->GetName();
+
+ // TODO: UpdateInis, Uninstall
+
+ if (
+ m_pvInfSession
+ && m_pInfFile
+ && m_pModelEntry
+ && m_pManufacturerEntry
+ && m_pVersion
+ && m_pSymManufacturerName
+ && m_pSymDeviceName
+ )
+ {
+ fRet = mfn_CreateAddRegList(pModelE);
+ fRet = fRet && mfn_CreateCopyFilesList(pModelE);
+ }
+
+ // Create signatures
+
+ // Version
+ m_dwSigVersion = m_pVersion->Checksum();
+
+ // Make and Model
+ m_dwSigManuAndModel = m_pSymManufacturerName->Checksum();
+ AddToChecksumDW(&m_dwSigManuAndModel, m_pSymDeviceName->Checksum());
+
+ // Control Flags
+ m_dwSigFlags = m_pModelEntry->GetControlFlags(ePLAT_ALL);
+ AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_ALL));
+ AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_ALPHA));
+ AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_PPC));
+ AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_MIPS));
+
+ // AddReg -- got created by mfn_CreateAddRegList
+
+ // Copy files -- got created by mfn_CreateCopyFilesList
+
+ // NoResDup and PosDup
+ {
+ const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection();
+ DWORD dwSigNoResDup=0;
+ DWORD dwSigPosDup=0;
+ const CInfList *pSymList = pInstall->GetNoResDupIDList();
+ while(pSymList)
+ {
+ const CInfSymbol *pSym = (const CInfSymbol *) pSymList->GetData();
+ // We use XOR to combine the checksum, because we don't care about
+ // order.
+ dwSigNoResDup ^= pSym->Checksum();
+ pSymList = pSymList->Next();
+ }
+
+ pSymList = pInstall->GetPosDupIDList();
+ while(pSymList)
+ {
+ const CInfSymbol *pSym = (const CInfSymbol *) pSymList->GetData();
+ // We use XOR to combine the checksum, because we don't care about
+ // order.
+ dwSigPosDup ^= pSym->Checksum();
+ pSymList = pSymList->Next();
+ }
+
+ // Combine, and this time we *are* sensitive to the order.
+ m_dwSigDup = dwSigNoResDup;
+ AddToChecksumDW(&m_dwSigDup, dwSigPosDup);
+ }
+
+ // Rank0
+ m_dwSigRank0 = (m_pModelEntry->GetRank0ID())->Checksum();
+
+ // All ranks
+ m_dwSigRanks = m_dwSigRank0;
+ AddToChecksumDW(&m_dwSigRanks, (m_pModelEntry->GetRank1ID())->Checksum());
+ AddToChecksumDW(&m_dwSigRanks, (m_pModelEntry->GetRank2ID())->Checksum());
+
+ // Signature of everything.
+ m_dwSigAll = m_dwSigVersion;
+ AddToChecksumDW(&m_dwSigAll, m_dwSigManuAndModel);
+ AddToChecksumDW(&m_dwSigAll, m_dwSigFlags);
+ AddToChecksumDW(&m_dwSigAll, m_dwSigAddReg);
+ AddToChecksumDW(&m_dwSigAll, m_dwSigCopyFiles);
+ AddToChecksumDW(&m_dwSigAll, m_dwSigDup);
+ AddToChecksumDW(&m_dwSigAll, m_dwSigRanks);
+
+end:
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ mfn_LeaveCrit();
+
+ return fRet;
+}
+
+//-------------- Unload ------------------
+// Unloads a previously loaded file.
+HANDLE CInfDevice::Unload (void)
+{
+ HANDLE hUnload = NULL;
+
+ mfn_EnterCrit();
+
+ // TODO: call m_sync.BeginUnload to try to put us in unloadable state.
+
+ mfn_Cleanup();
+
+ mfn_LeaveCrit();
+
+ return hUnload;
+}
+
+//-------------- WriteInf ------------------
+// Creates an inf file with all the information of this device.
+BOOL CInfDevice::WriteInf(LPCTSTR lpctszIniFile) const
+{
+ // String-related constants
+ LPCTSTR lpctszStrings = TEXT("Strings");
+
+ BOOL fRet = FALSE;
+ const CInfSymbol * pSym=NULL;
+
+ printf(TEXT("Writing inf [%s]\n"), lpctszIniFile);
+
+ // Create/truncate file, and write header comment
+ if (!mfn_write_header(lpctszIniFile)) goto end;
+
+end:
+ return fRet;
+}
+
+
+// Cleanup by freeing any allocated resources.
+void CInfDevice::mfn_Cleanup (void)
+{
+ mfn_EnterCrit();
+
+ // TODO: ASSERT(state == loading or state == unloading)
+
+ if (m_pAddRegList)
+ {
+ // Explicitly cast to non-const because we're deleting it.
+ CInfList::FreeList((CInfList *) m_pAddRegList);
+ }
+
+ if (m_pCopyFilesList)
+ {
+ // Explicitly cast to non-const because we're deleting it.
+ CInfList::FreeList((CInfList *) m_pCopyFilesList);
+ }
+
+ if (m_pvInfSession)
+ {
+ ASSERT(m_pInfFile);
+ m_pInfFile->CloseSession(m_pvInfSession);
+ }
+
+ m_pAddRegList = NULL;
+ m_pCopyFilesList = NULL;
+ m_pvInfSession = NULL;
+ m_pInfFile = NULL;
+ m_pModelEntry = NULL;
+ m_pManufacturerEntry = NULL;
+ m_pVersion = NULL;
+ m_pSymManufacturerName = NULL;
+ m_pSymDeviceName = NULL;
+
+ m_dwSigVersion = 0;
+ m_dwSigManuAndModel = 0;
+ m_dwSigFlags = 0;
+ m_dwSigAddReg = 0;
+ m_dwSigCopyFiles = 0;
+ m_dwSigRank0 = 0;
+ m_dwSigRanks = 0;
+
+
+ mfn_LeaveCrit();
+}
+
+
+// Initializes m_pAddRegList to list of addreg entries.
+BOOL CInfDevice::mfn_CreateAddRegList(const CInfModelEntry *pModelE)
+{
+ const CInfInstallSection * pInstall = pModelE->GetInstallSection();
+ const CInfList * pAddRegList = pInstall->GetAddRegSectionList();
+
+ ASSERT(!m_pAddRegList);
+
+ // Initialize this here -- it is modified by mfn_AddToAddRegList.
+ m_dwSigAddReg = 0;
+
+ // Walk AddReg list, adding each entry for each addreg section.
+ for (;pAddRegList; pAddRegList=pAddRegList->Next())
+ {
+ const CInfAddRegSection * pAddRegSection =
+ (const CInfAddRegSection *) pAddRegList->GetData();
+
+ ASSERT(pAddRegSection);
+
+ // Add all the entries in the section, overwriting previous entries
+ // with the same subkey/value-name.
+ const CInfAddRegEntry * pAddRegEntry =
+ pAddRegSection->GetFirstAddRegEntry ();
+ for(;pAddRegEntry; pAddRegEntry = pAddRegEntry->Next())
+ {
+ mfn_AddToAddRegList(pAddRegEntry);
+ }
+ }
+
+ return TRUE;
+}
+
+void CInfDevice::mfn_AddToAddRegList (const CInfAddRegEntry *pAddRegEntry)
+{
+ // TODO: need to overwrite or not, depending on the addreg flags.
+ // for now, simply add to front of list.
+ m_pAddRegList = new CInfList ((void *) pAddRegEntry, m_pAddRegList);
+ AddToChecksumDW(&m_dwSigAddReg, pAddRegEntry->Checksum());
+}
+
+BOOL CInfDevice::mfn_CreateCopyFilesList(const CInfModelEntry *pModelE)
+{
+
+ const CInfInstallSection * pInstall = pModelE->GetInstallSection();
+ const CInfList * pCopyFilesList = pInstall->GetCopyFilesSectionList();
+
+ ASSERT(!m_pCopyFilesList);
+
+ // Initialize this here -- it is modified by mfn_AddToCopyFilesList.
+ m_dwSigCopyFiles = 0;
+
+ // Walk CopyFiles list, adding each entry for each copyfile section.
+ for (;pCopyFilesList; pCopyFilesList=pCopyFilesList->Next())
+ {
+ const CInfCopyFilesSection * pCopyFilesSection =
+ (const CInfCopyFilesSection *) pCopyFilesList->GetData();
+
+ ASSERT(pCopyFilesSection);
+
+ // Add all the entries in the section, overwriting previous entries
+ // with the name and destination.
+ const CInfCopyFilesEntry * pCopyFilesEntry =
+ pCopyFilesSection->GetFirstCopyFilesEntry();
+ for(;pCopyFilesEntry; pCopyFilesEntry = pCopyFilesEntry->Next())
+ {
+ mfn_AddToCopyFilesList(pCopyFilesEntry);
+ }
+ }
+
+ return TRUE;
+}
+
+void CInfDevice::mfn_AddToCopyFilesList (
+ const CInfCopyFilesEntry *pCopyFilesEntry
+ )
+{
+ // TODO: need to overwrite or not, depending on the addreg flags.
+ // for now, simply add to front of list.
+ m_pCopyFilesList = new CInfList (
+ (void *) pCopyFilesEntry,
+ m_pCopyFilesList
+ );
+ AddToChecksumDW(&m_dwSigCopyFiles, pCopyFilesEntry->Checksum());
+}
+
+
+
+// Create/Truncate inf file for just this device, and write header.
+BOOL CInfDevice::mfn_write_header (
+ LPCTSTR lpctszIniFile
+ )
+const
+{
+ LPCTSTR lpctszOrigFile = TEXT("");
+ LPCTSTR lpctszManuS = TEXT("");
+ LPCTSTR lpctszManuName = TEXT("");
+ LPCTSTR lpctszModelLHS = TEXT("");
+ LPCTSTR lpctszModelName = TEXT("");
+ LPCTSTR lpctszRank0 = TEXT("");
+ LPCTSTR lpctszRank1 = TEXT("");
+ LPCTSTR lpctszRank2 = TEXT("");
+ LPCTSTR lpctszProviderName = TEXT("");
+
+ BOOL fRet = FALSE;
+ const CInfSymbol * pSym=NULL;
+
+ TCHAR rgchBuf[4098];
+ HANDLE hFile=NULL;
+
+ SYSTEMTIME st;
+ UINT u = 0;
+ GetLocalTime(&st);
+
+ // Open file
+ {
+ TCHAR rgchPathName[MAX_PATH];
+ const TCHAR tchBack = (TCHAR) '\\';
+ const TCHAR tchColon = (TCHAR) ':';
+ const uLen = lstrlen(lpctszIniFile);
+
+ if (!uLen || (uLen+2) > sizeof(rgchPathName)/sizeof(TCHAR)) goto end;
+
+ rgchPathName[0] = 0;
+
+ u=0;
+ // Append %windir% if file name is not of the form
+ // "\.*" or "?:.*"
+ #if 0 // Don't do this anymore.
+ if ( (lpctszIniFile[0] != tchBack)
+ && (uLen<2 || lpctszIniFile[1]!=tchColon))
+ {
+ const UINT uMax = sizeof(rgchPathName)/sizeof(TCHAR) - uLen - 2;
+ u = GetWindowsDirectory
+ (
+ rgchPathName,
+ uMax
+ );
+
+ if (!u || u >= uMax) goto end;
+ lstrcpy(rgchPathName+u, TEXT("\\"));
+ u++;
+ }
+ #endif // 0
+
+ ASSERT((u+uLen+1)<(sizeof(rgchPathName)/sizeof(TCHAR)));
+ lstrcpy(rgchPathName+u, lpctszIniFile);
+ printf("Ini Path Name = [%s]\n", rgchPathName);
+
+
+ // Open file, nuke it if it exists.
+ hFile = CreateFile
+ (
+ rgchPathName,
+ GENERIC_WRITE,
+ 0, // deny sharing
+ NULL,
+ CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL
+ );
+
+ if (hFile==INVALID_HANDLE_VALUE)
+ {
+ printf("Create file fails with error %08lu\n", GetLastError());
+ hFile = NULL;
+ goto end;
+ }
+ else
+ {
+ printf("File opened\n");
+ }
+ }
+
+ // write header.
+ {
+ //;
+ //; OUT.INF
+ //;
+ //; Inf generated for a single modem.
+ //;
+ //; Created: Fri 05-24-1996 12:13:42
+ //; Checksum: 12507659
+ //; Original Inf: mdmgen.inf/[Rockwell]/%Rockwell1%
+ //; Manufacturer: "Rockwell"
+ //; Model: "14400 bps PCMCIA Data-Fax Modem"
+ //; Rank0ID: GEN_Apex1
+ //; Rank1ID: PCMCIA\RIPICAA-RC144ACL-845A
+ //; Rank2ID: PCMCIA\RIPICAA-YYY-ZZZ
+ //;
+ //; Rank0 Version M&M Flags AddReg CopyFile Ranks
+ //; SIG= 12342412 12222233 12334444 12234444 12244444 53265123 52366664
+ //;
+
+ const CInfSymbol *pSym = NULL;
+
+ // File name
+ pSym = m_pInfFile->GetFileName();
+ lpctszOrigFile = pSym->GetText();
+
+ // Manufacturer section name
+ {
+ const CInfManufacturerSection * pManuS =
+ m_pManufacturerEntry->GetManufacturerSection();
+ if (pManuS)
+ {
+ pSym = pManuS->GetSectionName();
+ lpctszManuS = pSym->GetText();
+ }
+ }
+
+ // Model entry name (LHS)
+ pSym = m_pModelEntry->GetLHS();
+ lpctszModelLHS = pSym->GetText();
+
+ // Manufacturer name
+ pSym = m_pSymManufacturerName;
+ lpctszManuName = pSym->GetText();
+
+ // Model name
+ pSym = m_pSymDeviceName;
+ lpctszModelName = pSym->GetText();
+
+ // Rank 0
+ pSym = m_pModelEntry->GetRank0ID();
+ lpctszRank0 = pSym->GetText();
+
+
+ // Rank 1
+ pSym = m_pModelEntry->GetRank1ID();
+ lpctszRank1 = pSym->GetText();
+
+ // Rank 1
+ pSym = m_pModelEntry->GetRank1ID();
+ lpctszRank1 = pSym->GetText();
+
+ u = wsprintf
+ (
+ rgchBuf,
+ TEXT
+ (
+ ";\r\n"
+ "; OUT.INF\r\n"
+ ";\r\n"
+ "; Inf generated for a single modem.\r\n"
+ ";\r\n"
+ "; Created: %02u-%02u-%04u %02u:%02u:%02u\r\n"
+ "; Checksum: %08lx\r\n"
+ ),
+ st.wMonth,
+ st.wDay,
+ st.wYear,
+ st.wHour,
+ st.wMinute,
+ st.wSecond,
+ m_dwSigAll
+ );
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "; Original Inf: %s/[%s]/%s\r\n"
+ "; Manufacturer: \"%s\"\r\n"
+ "; Model: \"%s\"\r\n"
+ "; Rank0ID: %s\r\n"
+ "; Rank1ID: %s\r\n"
+ "; Rank2ID: %s\r\n"
+ ),
+ lpctszOrigFile, // original inf file
+ lpctszManuS, // manufacturer section
+ lpctszModelLHS, // model entry name
+ lpctszManuName, // manufacturer name
+ lpctszModelName,// model name
+ lpctszRank0, // Rank0 ID
+ lpctszRank1, // Rank1 ID
+ lpctszRank2 // Rank2 ID
+ );
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ ";\r\n"
+"; Rank0 Version M&M Flags AddReg CopyFile Dup Ranks\r\n"
+ "; SIG= %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\r\n"
+ ";\r\n"
+ ),
+ m_dwSigRank0,
+ m_dwSigVersion,
+ m_dwSigManuAndModel,
+ m_dwSigFlags,
+ m_dwSigAddReg,
+ m_dwSigCopyFiles,
+ m_dwSigDup, // NoResDup and PosDup
+ m_dwSigRanks
+ );
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+ } // end write header
+
+ // Write Version
+ {
+ // Sample:
+ //; ---------------------- VERSION ------------------------------
+ //[Version]
+ //LayoutFile=layout.inf
+ //Signature="$CHICAGO$"
+ //Class=Modem
+ //ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+ //Provider=%provider%
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ---------------------- VERSION ------------------------------\r\n"
+ "[Version]\r\n"
+ )
+ );
+
+ // LayoutFile
+ pSym = m_pVersion->GetLayoutFile();
+ if (pSym)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("LayoutFile=%s\r\n"),
+ pSym->GetText()
+ );
+ }
+
+ // Signature
+ pSym = m_pVersion->GetSignature();
+ if (pSym)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("Signature=%s\r\n"),
+ pSym->GetText()
+ );
+ }
+
+ // Class
+ pSym = m_pVersion->GetClass();
+ if (pSym)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("Class=%s\r\n"),
+ pSym->GetText()
+ );
+ }
+
+ // ClassGUID
+ pSym = m_pVersion->GetClassGUID();
+ if (pSym)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ClassGUID=%s\r\n"),
+ pSym->GetText()
+ );
+ }
+
+ // Provider
+ pSym = m_pVersion->GetProvider();
+ if (pSym)
+ {
+ lpctszProviderName = pSym->GetText();
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("Provider=%%provider%%\r\n")
+ );
+ }
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End writing version info
+
+
+ // Write Control flags section
+ // Sample:
+ // -------------------- CONTROLFLAGS ---------------------------
+ // [ControlFlags]
+ // ExcludeFromSelect=SERENUM\MNP0281
+ // ExcludeFromSelect.NT=LPTENUM\MICROCOMTRAVELPORTE_1FF4
+ {
+ DWORD dwFlagsAll;
+ DWORD dwFlagsNTAll;
+ DWORD dwFlagsNTAlpha;
+ DWORD dwFlagsNTPPC;
+ DWORD dwFlagsNTMips;
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT(
+ "\r\n"
+ "\r\n"
+ "; -------------------- CONTROLFLAGS ---------------------------\r\n"
+ "[ControlFlags]\r\n"
+ )
+ );
+
+ dwFlagsAll = m_pModelEntry->GetControlFlags(ePLAT_ALL);
+ dwFlagsNTAll = m_pModelEntry->GetControlFlags(ePLAT_NT_ALL);
+ dwFlagsNTAlpha = m_pModelEntry->GetControlFlags(ePLAT_NT_ALPHA);
+ dwFlagsNTPPC = m_pModelEntry->GetControlFlags(ePLAT_NT_PPC);
+ dwFlagsNTMips = m_pModelEntry->GetControlFlags(ePLAT_NT_MIPS);
+
+ if(dwFlagsAll & dwCF_EXCLUDE_FROM_SELECT)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ExcludeFromSelect=%s\r\n"),
+ lpctszRank0
+ );
+ }
+
+ if(dwFlagsNTAll & dwCF_EXCLUDE_FROM_SELECT)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ExcludeFromSelect.NT=%s\r\n"),
+ lpctszRank0
+ );
+ }
+
+ if(dwFlagsNTAlpha & dwCF_EXCLUDE_FROM_SELECT)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ExcludeFromSelect.NT.Alpha=%s\r\n"),
+ lpctszRank0
+ );
+ }
+
+ if(dwFlagsNTPPC & dwCF_EXCLUDE_FROM_SELECT)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ExcludeFromSelect.NT.PPC=%s\r\n"),
+ lpctszRank0
+ );
+ }
+
+ if(dwFlagsNTMips & dwCF_EXCLUDE_FROM_SELECT)
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT("ExcludeFromSelect.NT.Mips=%s\r\n"),
+ lpctszRank0
+ );
+ }
+
+ // TODO: unimplemented: Other control flags.
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End writing control flags section
+
+
+ // Write Manufacturer section
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; -------------------- MANUFACTURER ---------------------------\r\n"
+ "[Manufacturer]\r\n"
+ "%%make%%= Make\r\n"
+ )
+ );
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End writing Manufacturer section
+
+
+ // Write make section
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ----------------------- MAKE --------------------------------\r\n"
+ "[Make]\r\n"
+ "%%model%%= Model, %s"
+ ),
+ lpctszRank0
+ );
+ if (*lpctszRank1 || *lpctszRank2)
+ {
+ u+= wsprintf (rgchBuf+u, ", %s", lpctszRank1);
+ }
+ if (*lpctszRank2)
+ {
+ u+= wsprintf (rgchBuf+u, ", %s", lpctszRank2);
+ }
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End writing make section
+
+ // Write Model section
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "\r\n"
+ "; ----------------------- MODEL -------------------------------\r\n"
+ "[Model]\r\n"
+ "AddReg=AddReg\r\n"
+ "CopyFiles=CopyFiles\r\n"
+ )
+ );
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End writing Model section
+
+
+ // NoResDup section
+ {
+ // [Make.NoResDup]
+ // UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15
+ const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection();
+ const CInfList *pSymList = pInstall->GetNoResDupIDList();
+ const CInfSymbol *pSym = NULL;
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ---------------------- NORESDUP -----------------------------\r\n"
+ "[Model.NoResDup]\r\n"
+ )
+ );
+
+ while(pSymList)
+ {
+ if (pSym) { u+= wsprintf (rgchBuf+u, TEXT(",")); }
+ pSym = (const CInfSymbol *) pSymList->GetData();
+ u+= wsprintf (rgchBuf+u, TEXT("%s"), pSym->GetText());
+
+ pSymList = pSymList->Next();
+ }
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ }
+
+
+ // PosDup section
+ {
+ // [Make.PosDup]
+ // *PNP0500
+ const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection();
+ const CInfList *pSymList = pInstall->GetPosDupIDList();
+ const CInfSymbol *pSym = NULL;
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ---------------------- POSDUP -------------------------------\r\n"
+ "[Model.PosDup]\r\n"
+ )
+ );
+
+ while(pSymList)
+ {
+ if (pSym) { u+= wsprintf (rgchBuf+u, TEXT(",")); }
+ pSym = (const CInfSymbol *) pSymList->GetData();
+ u+= wsprintf (rgchBuf+u, TEXT("%s"), pSym->GetText());
+
+ pSymList = pSymList->Next();
+ }
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+ }
+
+
+ // Write CopyFiles section
+ // BUGBUG: we need the concept of muliple copy-file sections, because
+ // each section can have a different destination dir.
+ // Also: the CopyFiles.NT, etc sections.
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; --------------------- COPYFILES -----------------------------\r\n"
+ "[CopyFiles]\r\n"
+ )
+ );
+
+ // Now write each copyfile entry
+ {
+ const CInfList *pList = m_pCopyFilesList;
+
+ for (;pList; pList=pList->Next())
+ {
+ // TODO: unimplemented
+ }
+
+ }
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+
+ } // End writing CopyFiles section
+
+
+ // Write DestinationDirs section
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ------------------- DESTINATIONDIRS -------------------------\r\n"
+ "[DestinationDirs]\r\n"
+ )
+ );
+
+ // Now write each copyfile entry
+ // TODO: Need to construct destination-dirs entries
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+
+ } // End writing DestinationDirs section
+
+
+ // TODO: UpdateInis, Uninstall
+
+
+ // Write Addreg section
+ {
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ---------------------- ADDREG -------------------------------\r\n"
+ "[AddReg]\r\n"
+ )
+ );
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+
+ // Now write each addreg entry
+ {
+ const CInfList *pList = m_pAddRegList;
+
+ for (;pList; pList=pList->Next())
+ {
+ LPCTSTR lpctszRegRoot = TEXT("");
+ LPCTSTR lpctszSubKey = TEXT("");
+ LPCTSTR lpctszValueName = TEXT("");
+ TCHAR rgchFlag[20] = TEXT("");
+ LPCTSTR lpctszValue = TEXT("");
+ DWORD dwFlag = MAXDWORD;
+ const CInfSymbol *pSym = NULL;
+ const CInfAddRegEntry * pARE =
+ (const CInfAddRegEntry *) pList->GetData();
+ ASSERT(pARE);
+
+ pSym = pARE->GetRegRoot();
+ lpctszRegRoot = pSym->GetText();
+
+ pSym = pARE->GetSubKey();
+ lpctszSubKey = pSym->GetText();
+
+ pSym = pARE->GetValueName();
+ lpctszValueName = pSym->GetText();
+
+ dwFlag = pARE->GetFlag();
+ if (dwFlag!=MAXDWORD)
+ {
+ wsprintf(rgchFlag, TEXT("%lu"), dwFlag);
+ }
+
+ pSym = pARE->GetValue();
+ lpctszValue = pSym->GetText();
+
+//HKR, Settings, Prefix,, "AT"
+//HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "%s, %s, %s, %s, %s\r\n"
+ ),
+ lpctszRegRoot,
+ lpctszSubKey,
+ lpctszValueName,
+ rgchFlag,
+ lpctszValue
+ );
+ }
+
+ }
+ } // End writing addreg section
+
+
+ // Write Strings section
+ {
+
+ u+= wsprintf
+ (
+ rgchBuf+u,
+ TEXT
+ (
+ "\r\n"
+ "\r\n"
+ "; ---------------------- STRINGS ------------------------------\r\n"
+ "[Strings]\r\n"
+ "provider=\"%s\"\r\n"
+ "make=\"%s\"\r\n"
+ "model=\"%s\"\r\n"
+ ),
+ lpctszProviderName,
+ lpctszManuName,
+ lpctszModelName
+ );
+
+ ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR));
+
+ } // End Strings flags section
+
+ DWORD dwWr;
+ if (!WriteFile(hFile, (LPBYTE) rgchBuf, u*sizeof(TCHAR), &dwWr, NULL))
+ {
+ printf("Write file fails with error %08lu\n", GetLastError());
+ goto end;
+ }
+ else
+ {
+ printf("Write file succeeded\n");
+ }
+
+ fRet = TRUE;
+
+end:
+ if (hFile) CloseHandle(hFile);
+
+ return fRet;
+}
diff --git a/private/unimodem/new/mic/dev.h b/private/unimodem/new/mic/dev.h
new file mode 100644
index 000000000..695571f35
--- /dev/null
+++ b/private/unimodem/new/mic/dev.h
@@ -0,0 +1,136 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// DEV.H -- Header for Classes:
+// CInfDevice
+//
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+
+
+class CInfDevice;
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfDevice
+///////////////////////////////////////////////////////////////////////////
+//
+// Represents a single device, as specified by an inf (device information)
+// file.
+//
+
+class CInfDevice
+{
+
+public:
+
+ CInfDevice(const CInfDevice *pNext)
+ : m_pNext(pNext),
+ m_sync(),
+
+ m_pvInfSession(NULL),
+ m_pInfFile(NULL),
+ m_pManufacturerEntry(NULL),
+ m_pModelEntry(NULL),
+ m_pVersion(NULL),
+ m_pSymManufacturerName(NULL),
+ m_pSymDeviceName(NULL),
+ m_pAddRegList(NULL),
+ m_pCopyFilesList(NULL),
+
+ m_dwSigVersion(101),
+ m_dwSigManuAndModel(102),
+ m_dwSigFlags(103),
+ m_dwSigAddReg(104),
+ m_dwSigCopyFiles(105),
+ m_dwSigDup(106),
+ m_dwSigRank0(107),
+ m_dwSigRanks(108),
+ m_dwSigAll(109)
+ {}
+
+ ~CInfDevice() {}
+
+ // --------------- Dump ---------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- Load ---------------
+ // Load (init) the device specifed by the inf file and model entry.
+ BOOL Load (
+ const CInfFile *pInf,
+ const CInfManufacturerEntry *pManuE,
+ const CInfModelEntry *pModelE
+ );
+
+ //-------------- Unload ------------------
+ // Unloads a previously loaded file. If there are open sessions to this
+ // object, Unload returns a handle which will be signalled when all
+ // sessions are closed. New sessions will not be allowed after this
+ // function returns. The call should free the handle.
+ HANDLE Unload (void);
+
+ //-------------- WriteInf ------------------
+ // Creates an inf file with all the information of this device.
+ BOOL WriteInf(LPCTSTR lpctszIniFile) const;
+
+ //-------------- GetRank0Checksum ----------
+ // Returns signature of the rank0 ID
+ DWORD Rank0Checksum(void) const {return m_dwSigRank0;}
+
+ //-------------- Checksum --------------
+ // Returns combined checksum for this device.
+ DWORD Checksum(void) const {return m_dwSigAll;}
+
+ #if (TODO)
+ UpdateInisSection
+ UninstallSection
+ NoResDupIDList
+ PosDupIDList
+ #endif // (TODO)
+
+
+private:
+
+ const CInfDevice * m_pNext;
+ CSync m_sync;
+
+ const void * m_pvInfSession;
+
+ const CInfFile * m_pInfFile;
+ const CInfManufacturerEntry *m_pManufacturerEntry;
+ const CInfModelEntry * m_pModelEntry;
+
+ const CInfVersionSection * m_pVersion;
+ const CInfSymbol * m_pSymManufacturerName;
+ const CInfSymbol * m_pSymDeviceName;
+
+ const CInfList * m_pAddRegList;
+ const CInfList * m_pCopyFilesList;
+
+ BOOL mfn_CreateAddRegList (const CInfModelEntry *);
+ BOOL mfn_CreateCopyFilesList (const CInfModelEntry *);
+ void mfn_AddToAddRegList (const CInfAddRegEntry *);
+ void mfn_AddToCopyFilesList (const CInfCopyFilesEntry *);
+ void mfn_Cleanup (void);
+ BOOL mfn_write_header (LPCTSTR lpctszIniFile) const;
+
+ void mfn_EnterCrit(void) const {m_sync.EnterCrit();}
+ void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();}
+
+ DWORD m_dwSigVersion; // Checksum of version section
+ DWORD m_dwSigManuAndModel;// Checksum of manufacturer name & model name
+ DWORD m_dwSigFlags; // Group-checksum of control flags.
+ DWORD m_dwSigAddReg; // Group-checksum of add reg section
+ DWORD m_dwSigCopyFiles; // Group-checksum of copyfile section
+ DWORD m_dwSigDup; // Group-checksum of NoResDup and PosDup.
+ DWORD m_dwSigRank0; // Group-checksum of all ranks.
+ DWORD m_dwSigRanks; // Group-checksum of all ranks.
+ DWORD m_dwSigAll; // Checksum of all the info of this device
+ // including version, manufacturer-name &
+ // model-name
+};
diff --git a/private/unimodem/new/mic/globals.cpp b/private/unimodem/new/mic/globals.cpp
new file mode 100644
index 000000000..b25209b6d
--- /dev/null
+++ b/private/unimodem/new/mic/globals.cpp
@@ -0,0 +1,53 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// GLOBALS.CPP -- Defines global data:
+// CInfSymbolTable gSymtab;
+//
+// History:
+// 05/27/96 JosephJ Created
+//
+//
+#include "common.h"
+
+//----------------------- gSymtab -------------------------------
+// Global symbol table.
+CInfSymbolTable gSymtab;
+
+
+
+// --------------------- Global Property Symbols ----------------
+const CInfSymbol *g_pSymPropCopyFilesSection;
+const CInfSymbol *g_pSymPropManufacturerSection;
+const CInfSymbol *g_pSymPropAddRegSection;
+
+LPCTSTR lpctszPropCopyFilesSection = TEXT("InfCFS");
+LPCTSTR lpctszPropManufacturerSection = TEXT("InfMS");
+LPCTSTR lpctszPropAddRegSection = TEXT("InfARS");
+
+BOOL InitializePropertySymbols(void);
+
+
+BOOL InitGlobals(void)
+{
+ return InitializePropertySymbols();
+}
+
+
+BOOL InitializePropertySymbols(void)
+{
+ g_pSymPropCopyFilesSection = gSymtab.Lookup(
+ lpctszPropCopyFilesSection,
+ TRUE
+ );
+ g_pSymPropManufacturerSection = gSymtab.Lookup(
+ lpctszPropManufacturerSection,
+ TRUE
+ );
+ g_pSymPropAddRegSection = gSymtab.Lookup(lpctszPropAddRegSection, TRUE);
+
+ return g_pSymPropCopyFilesSection
+ && g_pSymPropManufacturerSection
+ && g_pSymPropAddRegSection;
+}
diff --git a/private/unimodem/new/mic/globals.h b/private/unimodem/new/mic/globals.h
new file mode 100644
index 000000000..b1bf94e22
--- /dev/null
+++ b/private/unimodem/new/mic/globals.h
@@ -0,0 +1,28 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// GLOBALS.H -- Declares global data:
+// CInfSymbolTable gSymtab;
+//
+// History:
+// 05/27/96 JosephJ Created
+//
+//
+
+//----------------------- gSymtab -------------------------------
+// Global symbol table.
+// This symbol table maintains a global pool of strings -- only one copy of
+// each unique string is maintained.
+extern CInfSymbolTable gSymtab;
+
+// --------------------- Global Property Symbols ----------------
+extern const CInfSymbol *g_pSymPropCopyFilesSection;
+extern const CInfSymbol *g_pSymPropManufacturerSection;
+extern const CInfSymbol *g_pSymPropAddRegSection;
+#define PROP_INFSECTION_MANUFACTURER g_pSymPropManufacturerSection
+#define PROP_INFSECTION_COPYFILES g_pSymPropCopyFilesSection
+#define PROP_INFSECTION_ADDREG g_pSymPropAddRegSection
+
+
+BOOL InitGlobals(void);
diff --git a/private/unimodem/new/mic/ilist.cpp b/private/unimodem/new/mic/ilist.cpp
new file mode 100644
index 000000000..64350a621
--- /dev/null
+++ b/private/unimodem/new/mic/ilist.cpp
@@ -0,0 +1,58 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// ILIST.CPP -- Implementation for Classes:
+// CInfList
+//
+//
+// History:
+// 05/27/96 JosephJ Created
+//
+//
+#include "common.h"
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfList
+///////////////////////////////////////////////////////////////////////////
+
+// Simple singly-linked list which can not be modified once it's been
+// created. Assumes creation and eventual deletion are protected by some
+// external critical section.
+//
+// Sample:
+// for (; pList; pList = pList->Next())
+// {
+// const CInfAddregSection *pAS = (CInfAddregSection *) pList->GetData();
+// }
+
+//-------------- FreeList ------------------
+// Distroys the list.
+void
+CInfList::FreeList (CInfList *pList)
+{
+ while(pList)
+ {
+ // Cast to get rid of the const declaration of pList->Next().
+ CInfList *pNext = (CInfList *) pList->Next();
+ delete pList;
+ pList = pNext;
+ }
+}
+
+//-------------- ReverseList ------------------
+// Reverses the specified list.
+void
+CInfList::ReverseList (const CInfList **ppList)
+{
+ CInfList *pList = (CInfList *) *ppList; // override const
+ const CInfList *pPrev = NULL;
+ while(pList)
+ {
+ const CInfList *pTmp = pList->Next();
+ pList->mfn_SetNext(pPrev);
+ pPrev = pList;
+ pList = (CInfList *) pTmp; // override const
+ }
+ *ppList = pPrev;
+}
diff --git a/private/unimodem/new/mic/ilist.h b/private/unimodem/new/mic/ilist.h
new file mode 100644
index 000000000..ee91756f5
--- /dev/null
+++ b/private/unimodem/new/mic/ilist.h
@@ -0,0 +1,66 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// ILIST.H -- Header for Classes:
+// CInfList
+//
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+
+
+class CInfList;
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfList
+///////////////////////////////////////////////////////////////////////////
+
+// Simple singly-linked list which can not be modified once it's been
+// created. Assumes creation and eventual deletion are protected by some
+// external critical section.
+//
+// Sample:
+// for (; pList; pList = pList->Next())
+// {
+// const CInfAddregSection *pAS = (CInfAddregSection *) pList->GetData();
+// }
+
+class CInfList
+{
+
+public:
+
+ CInfList(void *pvData, const CInfList *pNext)
+ : m_pvData(pvData), m_pNext(pNext) {}
+ ~CInfList() {}
+
+ //-------------- GetData ------------------
+ const void * GetData (void) const {return m_pvData;}
+
+ //-------------- Next ------------------
+ const CInfList * Next (void) const {return m_pNext;}
+
+ //-------------- FreeList ------------------
+ // Distroys the specified list.
+ static void FreeList(CInfList *);
+
+ //-------------- ReverseList ------------------
+ // Reverses the specified list.
+ static void ReverseList(const CInfList **);
+
+private:
+
+ void mfn_SetNext(const CInfList * pNewNext)
+ {
+ m_pNext = pNewNext;
+ }
+
+ void * m_pvData;
+ const CInfList * m_pNext;
+
+};
+
diff --git a/private/unimodem/new/mic/inf.cpp b/private/unimodem/new/mic/inf.cpp
new file mode 100644
index 000000000..471530a1d
--- /dev/null
+++ b/private/unimodem/new/mic/inf.cpp
@@ -0,0 +1,903 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// INF.CPP -- Implemtation for Classes:
+// CInfFile
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+#include "common.h"
+#include "ini.h"
+#include "inf.h"
+
+// Version-related constants
+LPCTSTR lpctszVersion = TEXT("Version");
+LPCTSTR lpctszLayoutFile = TEXT("LayoutFile");
+LPCTSTR lpctszSignature = TEXT("Signature");
+LPCTSTR lpctszClass = TEXT("Class");
+LPCTSTR lpctszClassGUID = TEXT("ClassGUID");
+LPCTSTR lpctszProvider = TEXT("Provider");
+
+
+LPCTSTR lpctszManufacturer = TEXT("Manufacturer");
+LPCTSTR lpctszControlFlags = TEXT("ControlFlags");
+LPCTSTR lpctszStrings = TEXT("Strings");
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfFile
+///////////////////////////////////////////////////////////////////////////
+
+
+CInfFile::CInfFile(void)
+{
+ m_pVersion=NULL;
+ m_pFirstManuE=NULL;
+ m_pSymFileName=NULL;
+ m_pIniFile=NULL;
+}
+
+
+CInfFile::~CInfFile()
+{
+ mfn_EnterCrit();
+
+ // Free resources -- there should be none to free...
+ ASSERT(!m_pVersion);
+ ASSERT(!m_pFirstManuE);
+ ASSERT(!m_pIniFile);
+
+}
+
+
+//-------------- Load ------------------
+// Loads the specified file. (Obviously) only one file can be loaded at
+// a time.
+BOOL CInfFile::Load (const TCHAR rgchPathname[])
+{
+ BOOL fRet = FALSE;
+
+ mfn_EnterCrit();
+
+ // TODO: call m_sync.BeginLoad
+
+ ASSERT(!m_pVersion);
+ ASSERT(!m_pFirstManuE);
+ ASSERT(!m_pIniFile);
+
+ // Save file name
+ m_pSymFileName = gSymtab.Lookup(rgchPathname, TRUE);
+ if (!m_pSymFileName) goto end;
+
+ // Create and Load Ini File
+ m_pIniFile = new CIniFile;
+ if (m_pIniFile)
+ {
+ if (!m_pIniFile->Load(rgchPathname))
+ {
+ delete m_pIniFile;
+ m_pIniFile=NULL;
+ }
+ }
+ if (!m_pIniFile) goto end;
+
+ // Create and Load version
+ {
+ CInfVersionSection *pVS = new CInfVersionSection;
+ if (pVS)
+ {
+ // Override const * declaration of m_pVersion
+ if (!pVS->Load(m_pIniFile))
+ {
+ delete pVS;
+ pVS=NULL;
+ }
+ }
+ m_pVersion = pVS;
+ }
+ if (!m_pVersion) goto end;
+
+ // Create and load Manufacturer list...
+ m_pFirstManuE = sfn_CreateManufacturerList(m_pIniFile);
+ if (!m_pFirstManuE) goto end;
+
+ fRet = TRUE;
+
+end:
+
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ mfn_LeaveCrit();
+
+ return fRet;
+}
+
+
+//-------------- Unload ------------------
+// Unloads a previously loaded file. If there are open sessions to this
+// object, Unload returns a handle which will be signalled when all
+// sessions are closed. New sessions will not be allowed after this
+// function returns. The call should free the handle.
+HANDLE CInfFile::Unload (void)
+{
+ HANDLE hUnload = NULL;
+
+ mfn_EnterCrit();
+
+ // TODO: call m_sync.BeginUnload to try to put us in unloadable state.
+
+ mfn_Cleanup();
+
+ mfn_LeaveCrit();
+
+
+ return hUnload;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfVersionSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Version section:
+// [Version]
+// LayoutFile=layout.inf
+// Signature="$CHICAGO$"
+// Class=Modem
+// ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+// Provider=%MS%
+
+
+//-------------- Load ------------------
+// TODO: unimplemented
+BOOL CInfVersionSection::Load (const CIniFile *pIniFile)
+{
+ BOOL fRet = FALSE;
+ const CIniFileSection *pISVer = pIniFile->LookupSection(lpctszVersion);
+ const CIniFileSection *pISStr = pIniFile->LookupSection(lpctszStrings);
+ const CIniFileEntry *pIE = NULL;
+
+#if 0
+ m_pSymLayoutFile = gSymtab.Lookup(TEXT("layout.inf"), TRUE);
+ m_pSymSignature = gSymtab.Lookup(TEXT("\"$CHICAGO$\""), TRUE);
+ m_pSymClass = gSymtab.Lookup(TEXT("Modem"), TRUE);
+ m_pSymClassGUID = gSymtab.Lookup
+ (
+ TEXT("{4D36E96D-E325-11CE-BFC1-08002BE10318}"),
+ TRUE
+ );
+ m_pSymProvider = gSymtab.Lookup(TEXT("Microsoft"), TRUE);
+
+ m_dwChecksum = 0x12345678L;
+#endif
+
+ ASSERT
+ (
+ !m_pSymLayoutFile
+ && !m_pSymSignature
+ && !m_pSymClass
+ && !m_pSymClassGUID
+ && !m_pSymProvider
+ && !m_dwChecksum
+ );
+
+ if (!pISVer || !pISStr) goto end;
+
+ // LayoutFile=layout.inf
+ pIE = pISVer->LookupEntry(lpctszLayoutFile);
+ if (pIE)
+ {
+ m_pSymLayoutFile = pIE->GetRHS();
+ pIE->Release();pIE=NULL;
+ // TODO: further checks here
+ }
+
+ // Signature="$CHICAGO$"
+ pIE = pISVer->LookupEntry(lpctszSignature);
+ if (pIE)
+ {
+ m_pSymSignature = pIE->GetRHS();
+ pIE->Release();pIE=NULL;
+ // TODO: further checks here
+ }
+
+ // Class=Modem
+ pIE = pISVer->LookupEntry(lpctszClass);
+ if (pIE)
+ {
+ m_pSymClass = pIE->GetRHS();
+ pIE->Release();pIE=NULL;
+ // TODO: further checks here
+ }
+
+ // ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+ pIE = pISVer->LookupEntry(lpctszClassGUID);
+ if (pIE)
+ {
+ m_pSymClassGUID = pIE->GetRHS();
+ pIE->Release();pIE=NULL;
+ // TODO: further checks here
+ }
+
+ // Provider=%MS%
+ pIE = pISVer->LookupEntry(lpctszProvider);
+ if (pIE)
+ {
+ const CInfSymbol *pSymLHS = pIE->GetLHS();
+ pIE->Release();pIE=NULL;
+
+ if (pSymLHS)
+ {
+ pIE = pISStr->LookupEntry(pSymLHS->GetText());
+ if (pIE)
+ {
+ m_pSymProvider = pIE->GetRHS();
+ pIE->Release();pIE=NULL;
+ }
+ }
+ // TODO: further checks here
+ }
+
+ // Compute checksum of entire version structure
+ m_dwChecksum = m_pSymLayoutFile->Checksum();
+ AddToChecksumDW(&m_dwChecksum, m_pSymSignature->Checksum());
+ AddToChecksumDW(&m_dwChecksum, m_pSymClass->Checksum());
+ AddToChecksumDW(&m_dwChecksum, m_pSymClassGUID->Checksum());
+ AddToChecksumDW(&m_dwChecksum, m_pSymProvider->Checksum());
+
+ fRet =TRUE;
+
+end:
+
+ if (pIE) { pIE->Release(); pIE=NULL; }
+ if (pISVer) { pISVer->Release(); pISVer=NULL; }
+ if (pISStr) { pISStr->Release(); pISStr=NULL; }
+
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ return fRet;
+}
+
+
+//-------------- Unload ------------------
+void CInfVersionSection::Unload (void)
+{
+ // TODO: call m_sync.BeginUnload to try to put us in unloadable state.
+
+ mfn_Cleanup();
+
+ return;
+}
+
+
+
+//-------------- Dump ------------------
+// Dump state
+void
+CInfVersionSection::Dump(void)
+const
+{
+}
+
+// Cleanup by freeing any allocated resources.
+void CInfVersionSection::mfn_Cleanup (void)
+{
+ m_pSymLayoutFile = NULL;
+ m_pSymSignature = NULL;
+ m_pSymClass = NULL;;
+ m_pSymClassGUID = NULL;
+ m_pSymProvider = NULL;
+ m_dwChecksum = 0;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer list section:
+// [Manufacturer]
+// %Generic% = Generic
+// %MagicRam% = MagicRam
+// ..
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer section:
+// [Generic]
+// %Gen% = Gen, MDMGEN
+// %Gen3% = Gen3, MDMGEN3
+// %Gen12% = Gen12, MDMGEN12
+// %Gen24% = Gen24, MDMGEN24
+// ...
+
+
+// --------------- GetFirstModelEntry --------------
+// Get first model entry
+const CInfModelEntry *
+CInfManufacturerSection::GetFirstModelEntry (void)
+const
+{
+ return m_pFirstModelE;
+}
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfInstallSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Install section:
+// [Modem29]
+// AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, INTERNAL
+// CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+// UpdateInis = VView.Inis
+// Uninstall = VoiceView_remove
+//
+// Also contains info from the related PosDup and NoResDup sections.
+
+
+// --------------- GetAddRegSectionList ----------
+// Get generic list whose data items are pointers to
+// CInfAddRegSection objects
+const CInfList *
+CInfInstallSection::GetAddRegSectionList (void)
+const
+{
+ // TODO: unimplemented
+
+ static const CInfAddRegSection AddRegSection;
+ static const CInfList AddRegSectionList((void *) &AddRegSection, NULL);
+
+ return &AddRegSectionList;
+}
+
+
+// --------------- GetCopyFilesSectionList ----------
+// Get generic list whose data items are pointers to
+// CInfCopyFilesSection objects
+const CInfList *
+CInfInstallSection::GetCopyFilesSectionList (void)
+const
+{
+ // TODO: unimplemented
+
+ static const CInfCopyFilesSection CopyFilesSection;
+ static const CInfList CopyFilesSectionList((void *) &CopyFilesSection, NULL);
+
+ return &CopyFilesSectionList;
+}
+
+
+// --------------- GetNoResDupIDList ----------
+// Get generic list whose data items are pointers to
+// InfSymbol objects representing the Rank0 IDs in the corresponding
+// NoResDup section.
+const CInfList *
+CInfInstallSection::GetNoResDupIDList (void)
+const
+{
+ // TODO: unimplemented
+
+ static const CInfList NoResDupIDList
+ (
+ (void *) gSymtab.Lookup(TEXT("NORESDUP-ID"), TRUE),
+ NULL
+ );
+
+ return &NoResDupIDList;
+}
+
+
+// --------------- GetPosDupIDList ----------
+// Get generic list whose data items are pointers to
+// InfSymbol objects representing the Rank0 IDs in the corresponding
+// PosDup section.
+// const CInfList * GetPosDupIDList (void) const;
+const CInfList *
+CInfInstallSection::GetPosDupIDList (void)
+const
+{
+ // TODO: unimplemented
+ static const CInfList PosDupIDList1
+ (
+ (void *) gSymtab.Lookup(TEXT("POSDUP-ID1"), TRUE),
+ NULL
+ );
+ static const CInfList PosDupIDList
+ (
+ (void *) gSymtab.Lookup(TEXT("POSDUP-ID0"), TRUE),
+ &PosDupIDList1
+ );
+
+ return &PosDupIDList;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfAddRegSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample AddReg section:
+// [All]
+// HKR,,FriendlyDriver,,Unimodem.vxd
+// HKR,,DevLoader,,*vcomm
+// HKR,,ConfigDialog,,modemui.dll
+// HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+// HKR,,PortSubClass,1,02
+// HKR, Init, 1,, "AT<cr>"
+// HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, ...etc.
+// HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00, ...etc.
+
+
+// Get first addreg entry
+const CInfAddRegEntry *
+CInfAddRegSection::GetFirstAddRegEntry (void)
+const
+{
+ // TODO -- fake static entries
+ static const CInfAddRegEntry FirstAddRegEntry;
+ return &FirstAddRegEntry;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfCopyFilesSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample DestinationDirs section:
+// [DestinationDirs]
+// Register.Copy = 17 ;LDID_INF
+// VV_Sys = 11
+// VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+// VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+// VV_App = 10
+// VV_Help = 18 ;LDID_HELP
+
+// Sample Copyfiles section:
+// [VV_Sys]
+// fte.dll
+// vvexe32.exe
+// wsvv.vxd
+
+
+// --------------- GetFirstCopyFilesEntry ----------
+// Get first copyfiles entry
+const CInfCopyFilesEntry *
+CInfCopyFilesSection::GetFirstCopyFilesEntry (void) const
+{
+ // TODO -- fake static entries
+ static const CInfCopyFilesEntry FirstCopyFilesEntry;
+ return &FirstCopyFilesEntry;
+}
+
+
+// Cleanup by freeing any allocated resources.
+// TODO: unimplemented
+void CInfFile::mfn_Cleanup (void)
+{
+ mfn_EnterCrit();
+
+ // TODO: ASSERT(state == loading or state == unloading)
+
+ // Unload and free version
+ if (m_pVersion)
+ {
+ // override const *
+ CInfVersionSection *pVS = (CInfVersionSection *) m_pVersion;
+ pVS->Unload();
+ delete pVS;
+ m_pVersion=NULL;
+ }
+
+
+ // Unload and free Manufacturerlist.
+ if (m_pFirstManuE)
+ {
+ sfn_DeleteManufacturerList(m_pFirstManuE);
+ m_pFirstManuE=NULL;
+ }
+
+ if (m_pIniFile)
+ {
+ m_pIniFile->Unload();
+ delete (CIniFile *) m_pIniFile; // override const *
+ m_pIniFile=NULL;
+ }
+
+ m_pSymFileName=NULL;
+
+ mfn_LeaveCrit();
+}
+
+// static helper function...
+const CInfManufacturerEntry *
+CInfFile::sfn_CreateManufacturerList (CIniFile *pIniFile)
+{
+ CInfManufacturerEntry * pManuE = NULL;
+ const CIniFileSection *pISStr = pIniFile->LookupSection(lpctszStrings);
+ const CIniFileSection *pISManL =
+ pIniFile->LookupSection(lpctszManufacturer);
+ CIniFileEntry *pIE = NULL;
+
+ if (!pISManL || !pISStr) goto end;
+
+ pIE = pISManL->GetFirstEntry();
+ if (!pIE) goto end;
+
+ // Iterate through manufacturers, building manufacturer entries...
+ do
+ {
+ pManuE = new CInfManufacturerEntry(pManuE);
+ if (!pManuE || !pManuE->Load(pIniFile, pISStr, pIE))
+ {
+ // TODO: warning; for now break out.
+ if (pManuE)
+ {
+ // TODO delete previously-created elements of the list as well!
+ // (Or leave them there and deal with a partial list).
+ delete pManuE;
+ pManuE = NULL;
+ }
+ goto end;
+ }
+
+ } while(pIE->BecomeNext());
+
+ // Reverse list
+ CInfManufacturerEntry::ReverseList(&pManuE);
+
+end:
+ if (pIE) {pIE->Release(); pIE=NULL;}
+ if (pISManL) { pISManL->Release(); pISManL=NULL; }
+ if (pISStr) { pISStr->Release(); pISStr=NULL; }
+
+ return pManuE;
+}
+
+// Static helper function
+void
+CInfFile::sfn_DeleteManufacturerList
+(
+ const CInfManufacturerEntry * pManuEFirst
+)
+{
+ // TODO
+}
+
+// --------------- Load ------------------
+BOOL
+CInfManufacturerEntry::Load
+(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+)
+{
+ BOOL fRet = FALSE;
+ const CInfSymbol *pSymLHS = pIE->GetLHS();
+ const CInfSymbol *pSymManuName = NULL;
+ // TODO need to make manu-section case insensitive!
+ // Basically pSymManuSection should be created based on an upper-case'd
+ // version of pIE->GetRHS().
+ const CInfSymbol *pSymManuSection = pIE->GetRHS();
+ CInfManufacturerSection *pManuS = NULL;
+ BOOL fNew=FALSE;
+
+ ASSERT(!m_pManuS);
+ ASSERT(!m_pSymManuName);
+
+ // Get manufacturer name ...
+ if (pSymLHS)
+ {
+ const CIniFileEntry *pIEStr = pISStr->LookupEntry(pSymLHS->GetText());
+ if (pIEStr)
+ {
+ pSymManuName = pIE->GetRHS();
+ pIEStr->Release();pIEStr=NULL;
+ }
+ }
+
+ pManuS=NULL;
+
+ // Look up/create manufacturer section
+ {
+ void **ppv=NULL;
+ BOOL fExists=FALSE;
+ BOOL fRet = pSymManuSection->GetOrCreatePropLoc(
+ PROP_INFSECTION_MANUFACTURER,
+ &ppv,
+ &fExists);
+ if (fRet)
+ {
+ if (fExists)
+ {
+ // This section already exists...
+ pManuS = (CInfManufacturerSection *) *ppv;
+ ASSERT(pManuS->Validate());
+ }
+ else
+ {
+ // This section doesn't exist -- create it.
+ pManuS = new CInfManufacturerSection();
+ if (pManuS)
+ {
+ if (pManuS->Load(pIniFile, pISStr, pSymManuSection))
+ {
+ // set the property data
+ *ppv = (void *) pManuS;
+ }
+ else
+ {
+ delete pManuS;
+ pManuS=NULL;
+ pSymManuSection->DelProp(PROP_INFSECTION_MANUFACTURER);
+ }
+ }
+ }
+ }
+ }
+
+ if (pManuS)
+ {
+ m_pManuS = pManuS;
+ m_pSymManuName = pSymManuName;
+ fRet = TRUE;
+ }
+
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ return fRet;
+
+}
+
+// --------------- Unload ------------------
+void CInfManufacturerEntry::Unload(void)
+// TODO
+{
+ m_pManuS = NULL;
+ m_pSymManuName = NULL;
+ // TODO: decrement ref count for the section and delete it and delprop
+ // it when done.
+ mfn_Cleanup();
+
+}
+
+
+// --------------- Cleanup ------------------
+// Cleanup by freeing any allocated resources.
+void CInfManufacturerEntry::mfn_Cleanup (void)
+{
+ m_pManuS = NULL;
+ m_pSymManuName = NULL;
+}
+
+
+// --------------- Load ------------------
+BOOL
+CInfManufacturerSection::Load
+(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CInfSymbol *pSymManuSection
+)
+{
+ BOOL fRet = FALSE;
+ const CIniFileSection *pIS =
+ pIniFile->LookupSection(pSymManuSection->GetText());
+
+ ASSERT(!m_pSymSectionName);
+ ASSERT(!m_pFirstModelE);
+ ASSERT(m_eObjSig==eOBJSIG_CInfManufacturerSection);
+
+ if (!pIS)
+ {
+ goto end;
+ }
+
+ m_pSymSectionName = pSymManuSection;
+
+ // Create and load model list
+ m_pFirstModelE = sfn_CreateModelList(pIniFile, pISStr, pIS);
+
+ if (!m_pFirstModelE)
+ {
+ goto end;
+ }
+
+ fRet = TRUE;
+
+end:
+
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ return fRet;
+}
+
+// --------------- Unload ------------------
+void CInfManufacturerSection::Unload(void)
+{
+ mfn_Cleanup();
+}
+
+
+// --------------- Cleanup ------------------
+// Cleanup by freeing any allocated resources.
+void CInfManufacturerSection::mfn_Cleanup (void)
+// TODO
+{
+ m_pSymSectionName = NULL;
+ m_pFirstModelE = NULL;
+}
+
+
+// Static helper function to create the list of models for this manufacturer
+const CInfModelEntry *
+CInfManufacturerSection::sfn_CreateModelList
+(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileSection *pISManuS
+)
+{
+ CInfModelEntry * pModelE = NULL;
+ CIniFileEntry *pIE = NULL;
+
+ if (!pISManuS || !pISStr) goto end;
+
+ pIE = pISManuS->GetFirstEntry();
+ if (!pIE) goto end;
+
+ // Iterate through models, building model entries...
+ do
+ {
+ pModelE = new CInfModelEntry(pModelE);
+ if (!pModelE || !pModelE->Load(pIniFile, pISStr, pIE))
+ {
+ // TODO: warning; for now break out.
+ if (pModelE)
+ {
+ // TODO delete previously-created elements of the list as well!
+ // (Or leave them there and deal with a partial list).
+ delete pModelE;
+ pModelE = NULL;
+ }
+ goto end;
+ }
+
+ } while(pIE->BecomeNext());
+
+ // Reverse list
+ CInfModelEntry::ReverseList(&pModelE);
+
+end:
+ if (pIE) {pIE->Release(); pIE=NULL;}
+ //if (pISManL) { pISManL->Release(); pISManL=NULL; }
+ //if (pISStr) { pISStr->Release(); pISStr=NULL; }
+
+ return pModelE;
+}
+
+
+// --------------- Cleanup ------------------
+// Cleanup by freeing any allocated resources.
+void CInfModelEntry::mfn_Cleanup (void)
+// TODO
+{
+}
+
+
+// --------------- Load ------------------
+BOOL
+CInfModelEntry::Load
+(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+)
+// TODO
+{
+ return TRUE;
+#if 0
+ BOOL fRet = FALSE;
+ const CInfSymbol *pSymLHS = pIE->GetLHS();
+ const CInfSymbol *pSymManuName = NULL;
+ // TODO need to make manu-section case insensitive!
+ // Basically pSymManuSection should be created based on an upper-case'd
+ // version of pIE->GetRHS().
+ const CInfSymbol *pSymManuSection = pIE->GetRHS();
+ CInfManufacturerSection *pManuS = NULL;
+ BOOL fNew=FALSE;
+
+ ASSERT(!m_pManuS);
+ ASSERT(!m_pSymManuName);
+
+ // Get manufacturer name ...
+ if (pSymLHS)
+ {
+ const CIniFileEntry *pIEStr = pISStr->LookupEntry(pSymLHS->GetText());
+ if (pIEStr)
+ {
+ pSymManuName = pIE->GetRHS();
+ pIEStr->Release();pIEStr=NULL;
+ }
+ }
+
+ pManuS=NULL;
+
+ // Look up/create manufacturer section
+ {
+ void **ppv=NULL;
+ BOOL fExists=FALSE;
+ BOOL fRet = pSymManuSection->GetOrCreatePropLoc(
+ PROP_INFSECTION_MANUFACTURER,
+ &ppv,
+ &fExists);
+ if (fRet)
+ {
+ if (fExists)
+ {
+ // This section already exists...
+ pManuS = (CInfManufacturerSection *) *ppv;
+ ASSERT(pManuS->Validate());
+ }
+ else
+ {
+ // This section doesn't exist -- create it.
+ pManuS = new CInfManufacturerSection();
+ if (pManuS)
+ {
+ if (pManuS->Load(pIniFile, pISStr, pSymManuSection))
+ {
+ // set the property data
+ *ppv = (void *) pManuS;
+ }
+ else
+ {
+ delete pManuS;
+ pManuS=NULL;
+ pSymManuSection->DelProp(PROP_INFSECTION_MANUFACTURER);
+ }
+ }
+ }
+ }
+ }
+
+ if (pManuS)
+ {
+ m_pManuS = pManuS;
+ m_pSymManuName = pSymManuName;
+ fRet = TRUE;
+ }
+
+ if (!fRet)
+ {
+ mfn_Cleanup();
+ }
+
+ return fRet;
+#endif
+
+}
+
+// --------------- Unload ------------------
+void CInfModelEntry::Unload(void)
+// TODO
+{
+ mfn_Cleanup();
+}
diff --git a/private/unimodem/new/mic/inf.h b/private/unimodem/new/mic/inf.h
new file mode 100644
index 000000000..32e1ae85a
--- /dev/null
+++ b/private/unimodem/new/mic/inf.h
@@ -0,0 +1,998 @@
+// // Copyright (c) 1996 Microsoft Corporation
+//
+//
+// INF.H -- Header for Classes:
+//
+// CInfFile
+//
+// CInfVersionSection
+// CInfManufacturerSection
+// CInfInstallSection
+// CInfAddRegSection
+// CInfCopyFilesSection
+//
+// CInfManufacturerEntry
+// CInfModelEntry
+// CInfCopyFilesEntry
+// CInfAddRegEntry
+//
+// CInfModelEntryAux
+//
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+
+
+class CInfVersionSection;
+class CInfManufacturerEntry;
+class CInfManufacturerSection;
+class CInfModelEntry;
+class CInfInstallSection;
+class CInfAddRegSection;
+class CInfAddRegEntry;
+class CInfCopyFilesEntry;
+class CInfCopyFilesSection;
+class CInfModelEntryAux;
+
+
+// Control flags
+const DWORD dwCF_EXCLUDE_FROM_SELECT = 0x1<<0;
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfFile
+///////////////////////////////////////////////////////////////////////////
+
+// Represents an inf (device information) file -- which is a special kind
+// of INI file.
+
+
+class CInfFile
+{
+
+public:
+
+ CInfFile(void);
+ ~CInfFile();
+
+ //-------------- Load ------------------
+ // Loads the specified file. (Obviously) only one file can be loaded at
+ // a time.
+ BOOL Load (const TCHAR rgchPathname[]);
+
+ //-------------- Unload ------------------
+ // Unloads a previously loaded file. If there are open sessions to this
+ // object, Unload returns a handle which will be signalled when all
+ // sessions are closed. New sessions will not be allowed after this
+ // function returns. The call should free the handle.
+ // See CloseSession for more info.
+ HANDLE Unload (void);
+
+ //-------------- OpenSession ------------------
+ // Open a session to this object. The object will not be unloaded until
+ // this session is closed. 0 indicates failure.
+ // TODO: unimplemented
+ const void * OpenSession (void) const {return (const void *) 1;}
+
+ //-------------- CloseSession ------------------
+ // Close the specified session to this object.
+ // If the reference count goes to zero and we're marked for unloading,
+ // the object is unloaded as well.
+ // TODO: unimplemented
+ void CloseSession (const void *) const {}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFileName ------------------
+ // Get Version info
+ const CInfSymbol * GetFileName(void) const
+ {
+ return m_pSymFileName;
+ }
+
+ // --------------- GetVersion ------------------
+ // Get Version info
+ const CInfVersionSection * GetVersion(void) const
+ {
+ return m_pVersion;
+ }
+
+ // --------------- GetFirstManufacturerEntry ------
+ // Get first manufacturer entry under the manufacturer section
+ const CInfManufacturerEntry * GetFirstManufacturerEntry(void) const
+ {
+ return m_pFirstManuE;
+ }
+
+ #if (TODO)
+ // --------------- GetFirstStringEntry --------------
+ // Get first string entry under the strings section
+ const CInfStringEntry * GetFirstStringEntry(void) const;
+ DestinationDirs
+
+ // --------------- LookupManufacturerSection ----------
+ // Lookup and return the manufacturer section with the specified name.
+ const CInfManufacturerSection *
+ LookupInstallSection(const CInfSymbol *pSymManSection)
+ const;
+
+ // --------------- LookupInstallSection ----------
+ // Lookup and return the install section with the specified name.
+ const CInfInstallSection * LookupInstallSection(const TCHAR pchName[])const;
+
+ // --------------- LookupAddRegSection --------------
+ // Lookup and return the addreg section with the specifed name.
+ const CInfAddRegSection * LookupAddRegSection(const TCHAR pchName[]) const;
+
+ // --------------- LookupString --------------
+ // Lookup and return the specified string
+ const CInfSymbol * LookupString(const TCHAR pchName[]) const;
+#endif // TODO
+
+
+private:
+
+ // ============= PRIVATE MEMBER FUNCTIONS ===============
+ void mfn_EnterCrit(void) const {m_sync.EnterCrit();}
+ void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();}
+ void mfn_Cleanup(void);
+
+ // ============= PRIVATE STATIC HELPER FUNCTIONS ========
+
+ static
+ const CInfManufacturerEntry *
+ sfn_CreateManufacturerList(CIniFile *);
+
+ static
+ void
+ sfn_DeleteManufacturerList(const CInfManufacturerEntry *);
+
+ // ======================= DATA ========================
+ const CInfVersionSection * m_pVersion;
+ const CInfManufacturerEntry * m_pFirstManuE;
+ const CInfSymbol * m_pSymFileName;
+ CSync m_sync;
+
+ CIniFile *m_pIniFile;
+
+};
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfVersionSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Version section:
+// [Version]
+// LayoutFile=layout.inf
+// Signature="$CHICAGO$"
+// Class=Modem
+// ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318}
+// Provider=%MS%
+
+class CInfVersionSection
+{
+
+public:
+
+ CInfVersionSection(void)
+ {
+ m_pSymLayoutFile = NULL;
+ m_pSymSignature = NULL;
+ m_pSymClass = NULL;;
+ m_pSymClassGUID = NULL;
+ m_pSymProvider = NULL;
+ m_dwChecksum = 0;
+ }
+
+ ~CInfVersionSection()
+ {
+ }
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- Checksum ------------------
+ // Return checksum of contents
+ DWORD Checksum(void) const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- GetLayoutFile ------------------
+ const CInfSymbol * GetLayoutFile (void) const
+ {
+ return m_pSymLayoutFile;
+ }
+
+ // --------------- GetSignature ------------------
+ const CInfSymbol * GetSignature (void) const
+ {
+ return m_pSymSignature;
+ }
+
+ // --------------- GetClass ------------------
+ const CInfSymbol * GetClass (void) const
+ {
+ return m_pSymClass;
+ }
+
+ // --------------- GetClassGUID ------------------
+ const CInfSymbol * GetClassGUID (void) const
+ {
+ return m_pSymClassGUID;
+ }
+
+ // --------------- GetProvider ------------------
+ const CInfSymbol * GetProvider (void) const
+ {
+ return m_pSymProvider;
+ }
+
+
+private:
+
+ friend class CInfFile;
+
+ BOOL Load(const CIniFile *);
+ void Unload(void);
+
+ void mfn_Cleanup(void);
+
+ const CInfSymbol * m_pSymLayoutFile;
+ const CInfSymbol * m_pSymSignature;
+ const CInfSymbol * m_pSymClass;
+ const CInfSymbol * m_pSymClassGUID;
+ const CInfSymbol * m_pSymProvider;
+ DWORD m_dwChecksum;
+
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer list section:
+// [Manufacturer]
+// %Generic% = Generic
+// %MagicRam% = MagicRam
+// ..
+
+class CInfManufacturerEntry: private CInfList
+{
+
+public:
+
+ CInfManufacturerEntry(const CInfManufacturerEntry *pNext)
+ : CInfList(NULL, pNext),
+ m_pManuS(NULL),
+ m_pSymManuName(NULL)
+ {}
+
+ ~CInfManufacturerEntry() {}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetManufacturerSection ----------
+ // Get manufacturer section
+ const CInfManufacturerSection * GetManufacturerSection (void) const
+ {
+ return m_pManuS;
+ }
+
+ // --------------- GetName ------------------
+ // Get manufacturer name (actual manufacturer name, not %xxxx%.)
+ const CInfSymbol * GetName (void) const
+ {
+ return m_pSymManuName;
+ }
+
+ // --------------- Next ------------------
+ // Get next Entry. NULL if no more...
+ const CInfManufacturerEntry * Next(void) const
+ {
+ return (const CInfManufacturerEntry *) CInfList::Next();
+ }
+
+ // --------------- Load ------------------
+ BOOL
+ Load(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ //-------------- ReverseList ------------------
+ // Reverses the implicit list of manufacturer entries
+ static void ReverseList(CInfManufacturerEntry **ppManuE)
+ {
+ CInfList::ReverseList((const CInfList **) ppManuE);
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfManufacturerSection *m_pManuS;
+ const CInfSymbol *m_pSymManuName;
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfManufacturerSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Manufacturer section:
+// [Generic]
+// %Gen% = Gen, MDMGEN
+// %Gen3% = Gen3, MDMGEN3
+// %Gen12% = Gen12, MDMGEN12
+// %Gen24% = Gen24, MDMGEN24
+// ...
+
+class CInfManufacturerSection
+{
+
+public:
+
+ CInfManufacturerSection(void)
+ {
+ m_eObjSig=eOBJSIG_CInfManufacturerSection;
+ m_pSymSectionName = NULL;
+ m_pFirstModelE = NULL;
+ }
+
+ ~CInfManufacturerSection()
+ //TODO
+ {
+ m_eObjSig = eOBJSIG_INVALID;
+ }
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFirstModelEntry --------------
+ // Get first model entry
+ const CInfModelEntry * GetFirstModelEntry (void) const;
+
+ // --------------- GetSectionName ------------------
+ // Get section name
+ const CInfSymbol * GetSectionName (void) const
+ {
+ return m_pSymSectionName;
+ }
+
+ // --------------- Load ------------------
+ BOOL
+ Load
+ (
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CInfSymbol *pSymManuSection
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ // --------------- Validate ------------------
+ BOOL Validate(void) const
+ {
+ // TODO: can place in try-except clause...
+ return this && m_eObjSig==eOBJSIG_CInfManufacturerSection;
+ }
+
+ #if (TODO)
+ // --------------- GetName ------------------
+ // Get manufacturer name (actual manufacturer name),
+ const CInfSymbol * GetName (void) const;
+ #endif
+
+private:
+
+ void mfn_Cleanup(void);
+
+ // Static helper function
+ const CInfModelEntry *
+ sfn_CreateModelList(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileSection *pISManuS
+ );
+
+ const CInfSymbol *m_pSymSectionName;
+ const CInfModelEntry * m_pFirstModelE;
+ eOBJSIG m_eObjSig;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfModelEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Model entry:
+// %Gen% = Gen, MDMGEN
+
+class CInfModelEntry : private CInfList
+{
+
+public:
+
+ CInfModelEntry(const CInfModelEntry *pNext)
+ : CInfList(NULL, pNext)
+ {
+ /*TODO*/
+ m_dwControlFlags_All = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_All = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_Alpha = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_PPC = dwCF_EXCLUDE_FROM_SELECT;
+ m_dwControlFlags_NT_Mips = dwCF_EXCLUDE_FROM_SELECT;
+ }
+
+ ~CInfModelEntry() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+
+ // --------------- Load ------------------
+ BOOL
+ Load(
+ const CIniFile *pIniFile,
+ const CIniFileSection *pISStr,
+ const CIniFileEntry *pIE
+ );
+
+ // --------------- Unload ------------------
+ void Unload(void);
+
+ // --------------- GetNext ------------------
+ // Get next Entry. NULL if no more...
+ const CInfModelEntry * Next(void) const
+ {
+ return (const CInfModelEntry *) CInfList::Next();
+ }
+
+ //-------------- ReverseList ------------------
+ // Reverses the implicit list of model entries
+ static void ReverseList(CInfModelEntry **ppModelE)
+ {
+ CInfList::ReverseList((const CInfList **) ppModelE);
+ }
+
+ // --------------- GetLHS ------------------
+ // Get next Entry. NULL if no more...
+ const CInfSymbol * GetLHS(void) const
+ {
+ // TODO
+ return gSymtab.Lookup(TEXT("%bongo101%"), TRUE);
+ }
+
+ // --------------- GetInstallSection --------------
+ // Get install section
+ const CInfInstallSection * GetInstallSection (void) const
+ {
+ return m_pInstallSection;
+ }
+
+ // --------------- GetName ------------------
+ // Get model name (actual model name, not %xxx%)
+ const CInfSymbol * GetName (void) const
+ {
+ // TODO
+ //return m_pSymName;
+ return gSymtab.Lookup(TEXT("Christy Brinkly"), TRUE);
+ }
+
+ // --------------- GetRank0ID ------------------
+ // Rank-0 ID
+ const CInfSymbol * GetRank0ID (void) const
+ {
+ // TODO
+ //return m_pSymRank0ID;
+ // TODO
+ return gSymtab.Lookup(TEXT("RANK-0-ID"), TRUE);
+
+ }
+
+ // --------------- GetRank1ID ------------------
+ // Rank-1 ID
+ const CInfSymbol * GetRank1ID (void) const
+ {
+ // TODO
+ // return m_pSymRank1ID;
+ return gSymtab.Lookup(TEXT("RANK-1-ID"), TRUE);
+ }
+
+ // --------------- GetRank2ID ------------------
+ // Rank-2 ID
+ const CInfSymbol * GetRank2ID (void) const
+ {
+ // TODO
+ // return m_pSymRank2ID;
+ return gSymtab.Lookup(TEXT("RANK-2-ID"), TRUE);
+ }
+
+ // --------------- GetControlFlags -----------------
+ // Return install flags (one or more dwCF_* flags) for the specified
+ // platform.
+ DWORD GetControlFlags(ePLATFORM ePlat) const
+ {
+ DWORD dwRet = 0;
+
+ switch(ePlat)
+ {
+ case ePLAT_ALL:
+ break;
+ case ePLAT_NT_ALL:
+ dwRet = m_dwControlFlags_NT_All;
+ break;
+
+ case ePLAT_NT_ALPHA:
+ dwRet = m_dwControlFlags_NT_Alpha;
+ break;
+
+ case ePLAT_NT_PPC:
+ dwRet = m_dwControlFlags_NT_PPC;
+ break;
+
+ case ePLAT_NT_MIPS:
+ dwRet = m_dwControlFlags_NT_Mips;
+ break;
+
+ default:
+ break;
+ }
+
+ return dwRet;
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfInstallSection * m_pInstallSection;
+ // Pointer to install section
+
+ const CInfSymbol * m_pSymName;
+ // Device name
+
+ const CInfSymbol * m_pSymRank0ID;
+ // Rank-0 ID (primary device ID)
+
+ const CInfSymbol * m_pSymRank1ID;
+ // Rank-1 ID (compatible device ID)
+
+ const CInfSymbol * m_pSymRank2ID;
+ // Rank-2 ID (Rank 2 ID)
+
+ DWORD m_dwControlFlags_All;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to all platforms.
+
+ DWORD m_dwControlFlags_NT_All;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to all NT platforms.
+
+ DWORD m_dwControlFlags_NT_Alpha;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT Alpha platform.
+
+ DWORD m_dwControlFlags_NT_PPC;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT PPC platform.
+
+ DWORD m_dwControlFlags_NT_Mips;
+ // Install flags (eg exclude from select, needs reboot, etc) that
+ // apply to NT MIPS platform.
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfInstallSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample Install section:
+// [Modem29]
+// AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, INTERNAL
+// CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help
+// UpdateInis = VView.Inis
+// Uninstall = VoiceView_remove
+//
+// Also contains info from the related PosDup and NoResDup sections:
+//
+// [Modem12.PosDup]
+// *PNP0500
+//
+// [Modem6.NoResDup]
+// UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15
+//
+
+class CInfInstallSection
+{
+
+public:
+
+ CInfInstallSection(void);
+ ~CInfInstallSection();
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetAddRegSectionList ----------
+ // Get generic list whose data items are pointers to
+ // CInfAddRegSection objects
+ const CInfList * GetAddRegSectionList (void) const;
+
+ // --------------- GetCopyFilesSectionList ----------
+ // Get generic list whose data items are pointers to
+ // CInfCopyFilesSection objects
+ const CInfList * GetCopyFilesSectionList (void) const;
+
+ // --------------- GetNoResDupIDList ----------
+ // Get generic list whose data items are pointers to
+ // InfSymbol objects representing the Rank0 IDs in the corresponding
+ // NoResDup section.
+ const CInfList * GetNoResDupIDList (void) const;
+
+ // --------------- GetPosDupIDList ----------
+ // Get generic list whose data items are pointers to
+ // InfSymbol objects representing the Rank0 IDs in the corresponding
+ // PosDup section.
+ const CInfList * GetPosDupIDList (void) const;
+
+ #if (TODO)
+
+ // --------------- GetUpdateInisSectionList ------
+ // Get generic list whose data items are pointers to
+ // CInfUpdateInisSection objects
+ const CInfList * GetUpdateInisSectionList (void) const;
+
+ // --------------- GetUninstallSectionList ------
+ // Get generic list whose data items are pointers to
+ // CInfUninstallSection objects
+ const CInfList * GetUninstallSectionList (void) const;
+
+ // TODO: Also, treat as errors any sections which we don't understand or
+ // don't expect in a modem inf file or we don't support in the compiler:
+ // eg rename sections, and other fancy INF file constructs.
+
+ #endif // (TODO)
+
+private:
+
+ void mfn_Cleanup(void);
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfAddRegSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample AddReg section:
+// [All]
+// HKR,,FriendlyDriver,,Unimodem.vxd
+// HKR,,DevLoader,,*vcomm
+// HKR,,ConfigDialog,,modemui.dll
+// HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+// HKR,,PortSubClass,1,02
+// HKR, Init, 1,, "AT<cr>"
+// HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, ...etc.
+// HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00, ...etc.
+
+class CInfAddRegSection
+{
+
+public:
+
+ CInfAddRegSection(void) {/*TODO*/}
+ ~CInfAddRegSection() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void
+ Dump(void)
+ const;
+
+ // --------------- GetFirstAddRegEntry --------------
+ // Get first addreg entry
+ const
+ CInfAddRegEntry *
+ GetFirstAddRegEntry (void)
+ const;
+
+private:
+
+ void mfn_Cleanup(void);
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfAddRegEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample AddReg entry:
+// HKR, Init, 1,, "AT<cr>"
+
+class CInfAddRegEntry
+{
+
+public:
+
+ CInfAddRegEntry(void)
+ {
+ // TODO -- faked out
+
+ m_pSymRegRoot = gSymtab.Lookup(TEXT("HKR"), TRUE);
+ m_pSymSubKey = gSymtab.Lookup(TEXT("Init"), TRUE);
+ m_pSymValueName = gSymtab.Lookup(TEXT("1"), TRUE);
+ m_dwFlag = MAXDWORD;
+ m_pSymValue = gSymtab.Lookup(TEXT("\"AT<cr>\""), TRUE);
+ m_dwChecksum = 1000;
+ }
+
+ ~CInfAddRegEntry() {/*TODO*/}
+
+ // --------------- Dump ------------------
+ // Dump state
+ void
+ Dump(void)
+ const
+ {
+ // TODO: unimplemented
+ printf(" HKR, Init, 1,, \"AT<cr>\"\n");
+ }
+
+ // --------------- Checksum ------------------
+ // Compute and return checksum of contents
+ DWORD
+ Checksum(void)
+ const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- Next ------------------
+ // Get next Entry. NULL if no more...
+ const CInfAddRegEntry *
+ Next(void)
+ const
+ {
+ // TODO: unimplemented
+ return NULL;
+ }
+
+ // --------------- GetRegRoot ------------------
+ // Get reg-root-string key (HKR, etc)
+ const CInfSymbol *
+ GetRegRoot (void)
+ const
+ {
+ return m_pSymRegRoot;
+ }
+
+ // --------------- GetSubKey ------------------
+ // Get sub key, NULL if none.
+ const CInfSymbol *
+ GetSubKey (void)
+ const
+ {
+ return m_pSymSubKey;
+ }
+
+ // --------------- GetValueName ------------------
+ // Get value-name, NULL if none.
+ const CInfSymbol *
+ GetValueName (void)
+ const
+ {
+ return m_pSymValueName;
+ }
+
+ // --------------- GetFlag ------------------
+ // Get flag-name, MAXDWORD if none.
+ DWORD
+ GetFlag (void)
+ const
+ {
+ return m_dwFlag;
+ }
+
+ // --------------- GetValue ------------------
+ // Get value-name, NULL if none.
+ // For binary data, this represents a normalized version of the
+ // string specified in the inf file: it has the format: "xxyxxyxx.."
+ // where xx is 2-digit hex representation of a byte and y is the space
+ // character (' '). For ASCII data, the value is the ascii string without
+ // the enclosing quotes. Extending '\' characters are processed.
+ const CInfSymbol *
+ GetValue (void)
+ const
+ {
+ return m_pSymValue;
+ }
+
+ #if (TODO)
+ ... more stuff
+ #endif
+
+private:
+
+ void mfn_Cleanup(void);
+
+ const CInfSymbol * m_pSymRegRoot;
+ const CInfSymbol * m_pSymSubKey;
+ const CInfSymbol * m_pSymValueName;
+ const CInfSymbol * m_pSymValue;
+ DWORD m_dwFlag;
+ DWORD m_dwChecksum;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfCopyFilesSection
+///////////////////////////////////////////////////////////////////////////
+
+// Sample DestinationDirs section:
+// [DestinationDirs]
+// Register.Copy = 17 ;LDID_INF
+// VV_Sys = 11
+// VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir
+// VV_Sock_Win = 10 ;LDID_WIN \Windows dir
+// VV_App = 10
+// VV_Help = 18 ;LDID_HELP
+
+// Sample Copyfiles section:
+// [VV_Sys]
+// fte.dll
+// vvexe32.exe
+// wsvv.vxd
+
+// Note: each CInfCopyFilesEntry object keeps a pointer to its destination
+// directory (all the entries for a particular section will have the same
+// destination dir, because in the inf, a destination directory is associated
+// with an entire section.
+
+class CInfCopyFilesSection
+{
+
+public:
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- GetFirstCopyFilesEntry ----------
+ // Get first copyfiles entry
+ const CInfCopyFilesEntry * GetFirstCopyFilesEntry (void) const;
+
+ #if (TODO)
+ // Following reflect the Copyfiles.NT* extensions. We need to keep
+ // this information along with the section.
+ enum {PROC_X86, PROC_MIPS, PROC_ALPHA, PROC_PPC} eProcessorType;
+ enum {PLAT_NT, , PLAT_WIN9X} ePlatformType;
+ #endif // (TODO)
+
+ // TODO: remove following friend declaration once
+ // CInfInstallSection::GetCopyFilesList
+ // is properly implemented (it currently needs to access this
+ // class's constructor.
+ // Also, move ~CInfCopyFIlesEntry to protected when done.
+ friend class CInfInstallSection;
+ ~CInfCopyFilesSection() {/*TODO*/}
+
+protected:
+
+ CInfCopyFilesSection(void) {/*TODO*/}
+
+
+private:
+
+ void mfn_Cleanup(void);
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfCopyFilesEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Sample CopyFiles entry:
+// fte.dll
+// Note: each CInfCopyFilesEntry object keeps a pointer to its destination
+// directory.
+// TODO: keep information about platform & processor as well (see TODO
+// notes under CInfCopyFilesSection).
+
+class CInfCopyFilesEntry
+{
+
+public:
+
+ // --------------- Dump ------------------
+ // Dump state
+ void Dump(void) const
+ {
+ // TODO: unimplemented
+ printf(" fte.dll ; goes to 11\n");
+ }
+
+ // --------------- Checksum ------------------
+ // Compute and return checksum of contents
+ // Compute and return checksum of contents
+ DWORD
+ Checksum(void)
+ const
+ {
+ return m_dwChecksum;
+ }
+
+ // --------------- GetNext ------------------
+ // Get next Entry. NULL if no more...
+ const CInfCopyFilesEntry * Next(void) const
+ {
+ // TODO: unimplemented
+ return NULL;
+ }
+
+ // --------------- GetFileName ------------------
+ // Get file name to be copied.
+ const CInfSymbol * GetFileName (void) const;
+
+ // --------------- GetDestDir ------------------
+ // Get file name to be copied.
+ const CInfSymbol * GetDestDir (void) const;
+
+ // TODO: remove following friend declaration once
+ // CInfCopyFilesSection::GetFirstCopyFilesEntry
+ // is properly implemented (it currently needs to access this
+ // class's constructor.
+ // Also, move ~CInfCopyFIlesEntry to protected when done.
+ friend class CInfCopyFilesSection;
+ ~CInfCopyFilesEntry() {/*TODO*/}
+
+protected:
+
+ CInfCopyFilesEntry(void)
+ {
+ // TODO -- faked out
+ m_dwChecksum = 1001;
+ }
+
+private:
+
+ void mfn_Cleanup(void);
+
+ DWORD m_dwChecksum;
+
+};
+
+#if 0
+pInf->Load("mdmgen.inf");
+pManuf = pInf->GetFirstManufacturerEntry();
+for(;pManuf; pManuf = pManuf->Next())
+{
+ pNewDevice = new ModemDevice(pDevice);
+ pDevice->Load(pInf, pManuf);
+ pDevice->Dump();
+ pDevice = pNewDevice;
+}
+pInf->Unload("
+NewSession()
+FreeSession()
+#endif
diff --git a/private/unimodem/new/mic/ini.cpp b/private/unimodem/new/mic/ini.cpp
new file mode 100644
index 000000000..617471ec9
--- /dev/null
+++ b/private/unimodem/new/mic/ini.cpp
@@ -0,0 +1,153 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// INI.CPP -- Implemtation for Classes:
+// CIniFile
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+#include "common.h"
+#include "ini.h"
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFile
+///////////////////////////////////////////////////////////////////////////
+
+
+CIniFile::CIniFile(void)
+{
+}
+
+
+CIniFile::~CIniFile()
+{
+ mfn_EnterCrit();
+
+ // Free resources
+}
+
+
+//-------------- Load ------------------
+// Loads the specified file. (Obviously) only one file can be loaded at
+// a time.
+// TODO: unimplemented
+BOOL CIniFile::Load (const TCHAR rgchPathname[])
+{
+ BOOL fRet = FALSE;
+
+ //mfn_EnterCrit();
+
+ fRet = TRUE;
+
+// end:
+
+ if (!fRet)
+ {
+ //mfn_Cleanup();
+ }
+
+ //mfn_LeaveCrit();
+
+ return fRet;
+}
+
+
+//-------------- Unload ------------------
+// Unloads a previously loaded file. If there are open sessions to this
+// object, Unload returns a handle which will be signalled when all
+// sessions are closed. New sessions will not be allowed after this
+// function returns. The call should free the handle.
+// TODO: unimplemented
+HANDLE CIniFile::Unload (void)
+{
+ HANDLE hUnload = NULL;
+
+ // mfn_EnterCrit();
+
+ // TODO: call m_sync.BeginUnload to try to put us in unloadable state.
+
+ // mfn_Cleanup();
+
+ // mfn_LeaveCrit();
+
+
+ return hUnload;
+}
+
+
+//-------------- LookupSection ------------------
+// Unloads a previously loaded file. If there are open sessions to this
+const CIniFileSection *
+CIniFile::LookupSection(const TCHAR *lptcszSection)
+const
+// TODO
+{
+ static const CIniFileSection * pIS;
+ if (!pIS) pIS = new CIniFileSection;
+ return pIS;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFileSection
+///////////////////////////////////////////////////////////////////////////
+
+
+//-------------- LookupEntry ------------------
+const CIniFileEntry *
+CIniFileSection::LookupEntry(const TCHAR *lptcszEntry)
+const
+// TODO
+{
+ static const CIniFileEntry * pIE;
+ if (!pIE) pIE = new CIniFileEntry;
+ return pIE;
+}
+
+//-------------- GetFirstEntry ------------------
+CIniFileEntry *
+CIniFileSection::GetFirstEntry (void)
+// TODO
+const
+{
+ static CIniFileEntry * pIE;
+ if (!pIE) pIE = new CIniFileEntry;
+ return pIE;
+}
+
+//-------------- Release ------------------
+void
+CIniFileSection::Release(void)
+const
+// TODO
+{
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFileEntry
+///////////////////////////////////////////////////////////////////////////
+
+
+//-------------- GetRHS ------------------
+const CInfSymbol *
+CIniFileEntry::GetRHS(void)
+const
+// TODO
+{
+ return gSymtab.Lookup("[RHS]", TRUE);
+}
+
+
+//-------------- Release ------------------
+void
+CIniFileEntry::Release(void)
+const
+// TODO
+{
+}
+
diff --git a/private/unimodem/new/mic/ini.h b/private/unimodem/new/mic/ini.h
new file mode 100644
index 000000000..1c2933b1b
--- /dev/null
+++ b/private/unimodem/new/mic/ini.h
@@ -0,0 +1,210 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// INI.H -- Header for Classes:
+// CIniFile
+// CIniFileLine
+// CIniFileSection
+// CIniFileEntry
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+
+class CIniFile;
+class CIniFileLine;
+class CIniFileSection;
+class CIniFileEntry;
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFile
+///////////////////////////////////////////////////////////////////////////
+
+// Represents a windows INI file.
+
+class CIniFile
+{
+
+public:
+
+ CIniFile(void);
+ ~CIniFile();
+
+ //-------------- Load ------------------
+ // Loads the specified file. (Obviously) only one file can be loaded at
+ // a time.
+ BOOL Load (const TCHAR rgchPathname[]);
+
+ //-------------- Unload ------------------
+ // Unloads a previously loaded file. If there are open sessions to this
+ // object, Unload returns a handle which will be signalled when all
+ // sessions are closed. New sessions will not be allowed after this
+ // function returns. The call should free the handle.
+ HANDLE Unload (void);
+
+ //-------------- OpenSession ------------------
+ // Open a session to this object. The object will not be unloaded until
+ // this session is closed. 0 indicates failure.
+ // TODO: unimplemented
+ const void * OpenSession (void) const {return (const void *) 1;}
+
+ //-------------- CloseSession ------------------
+ // Close the specified session to this object.
+ // TODO: unimplemented
+ void CloseSession (const void *) const {}
+
+ //-------------- GetFirstLine ------------------
+ // Get the first line in the file. Subsequent lines can be got by
+ // calling Next() on the line object.
+ const CIniFileLine * GetFirstLine (void) const;
+
+ //-------------- GetFirstSection ------------------
+ // Get the first section in the file.
+ const CIniFileSection * GetFirstSection (void) const;
+
+ //-------------- LookupSection ------------------
+ // Lookup a section in the file, given a name. Comparison is case-
+ // insensitive.
+ const CIniFileSection * LookupSection (const TCHAR * pchName) const;
+
+ //-------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ //-------------- GetName ------------------
+ // Returns the file name
+ const CInfSymbol * GetName (void) const
+ {
+ return m_pSymFileName;
+ }
+
+protected:
+
+ //-------------- mfn_GetProp ---------------
+ // Gets the property value associated with this object.
+ void * mfn_GetProp(void) {return m_pvProp;}
+
+ //-------------- mfn_SetProp ---------------
+ // Sets the property value associated with this object.
+ // Returns previously-set value, if any.
+ void * mfn_SetProp(void *pvNew)
+ {
+ void *pv;
+ mfn_EnterCrit();
+ pv = m_pvProp;
+ m_pvProp = pvNew;
+ mfn_LeaveCrit();
+ return pv;
+ }
+
+ //-------------- mfn_EnterCrit ------------------
+ void mfn_EnterCrit(void) const {m_sync.EnterCrit();}
+
+
+ //-------------- mfn_LeaveCrit ------------------
+ void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();}
+
+
+private:
+
+ CSync m_sync;
+ void * m_pvProp;
+ const CInfSymbol * m_pSymFileName;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFileLine
+///////////////////////////////////////////////////////////////////////////
+
+// Represents a single line in an INI file.
+// TODO: unimplemented
+// Note: Only CIniFile member functions can construct/destruct these
+// objects.
+
+class CIniFileLine
+{
+
+protected:
+
+ CIniFileLine(void) {}
+ ~CIniFileLine() {}
+
+private:
+
+ friend class CIniFile;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFileSection
+///////////////////////////////////////////////////////////////////////////
+
+// Represents a single section in an INI file.
+// Note: Only CIniFile member functions can construct/destruct these
+// objects.
+
+class CIniFileSection
+{
+
+public:
+
+ const CInfSymbol * GetName (void) const
+ {
+ // TODO
+ return gSymtab.Lookup(TEXT("Steroids"), TRUE);
+ }
+
+ CIniFileEntry * GetFirstEntry (void) const;
+ const CIniFileEntry * LookupEntry (const TCHAR rgchName[]) const;
+ const CIniFileSection * Next(void) const;
+ void Release(void) const;
+protected:
+
+ CIniFileSection(void) {/*TODO*/}
+ ~CIniFileSection() {/*TODO*/}
+
+private:
+
+ friend class CIniFile;
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CIniFileEntry
+///////////////////////////////////////////////////////////////////////////
+
+// Represents a single entry in a section in an INI file.
+// Note: Only CIniFileSection member functions can construct/destruct these
+// objects.
+
+class CIniFileEntry
+{
+
+public:
+
+ const CInfSymbol * GetLHS (void) const
+ {
+ // TODO
+ return gSymtab.Lookup(TEXT("%bongo101%"), TRUE);
+ }
+ const CInfSymbol * GetRHS (void) const;
+ const CIniFileLine * GetFirstLine (void) const;
+ BOOL * BecomeNext (void)
+ {
+ return FALSE;
+ }
+
+ void Release(void) const;
+
+protected:
+
+ CIniFileEntry(void) {/*TODO*/}
+ ~CIniFileEntry() {/*TODO*/}
+
+private:
+
+ friend class CIniFileSection;
+};
diff --git a/private/unimodem/new/mic/main.cpp b/private/unimodem/new/mic/main.cpp
new file mode 100644
index 000000000..a83cab10f
--- /dev/null
+++ b/private/unimodem/new/mic/main.cpp
@@ -0,0 +1,18 @@
+#include "common.h"
+#include "test.h"
+#include "mic.h"
+
+//#define MAIN_T main_tdev
+#define MAIN_T main_mic
+
+int __cdecl main(int argc, char * argv[])
+{
+ int iRet = 0;
+
+ if (!InitGlobals()) goto end;
+
+ iRet = MAIN_T (argc, argv);
+
+end:
+ return iRet;
+}
diff --git a/private/unimodem/new/mic/makefile b/private/unimodem/new/mic/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/new/mic/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/new/mic/mic.cpp b/private/unimodem/new/mic/mic.cpp
new file mode 100644
index 000000000..9fa79d695
--- /dev/null
+++ b/private/unimodem/new/mic/mic.cpp
@@ -0,0 +1,167 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// MIC.CPP -- Modem INF Compiler -- basic version
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// History:
+// 06/04/96 JosephJ Created
+//
+#include "common.h"
+#include "ini.h"
+#include "inf.h"
+#include "dev.h"
+#include "test.h"
+
+#define SIMPLE 0
+#define COMPLEX 1
+#define ACTUAL 2
+
+//#define TEST_TYPE (SIMPLE)
+#define TEST_TYPE (COMPLEX)
+//#define TEST_TYPE (ACTUAL)
+
+
+#if (TEST_TYPE==SIMPLE)
+#elif (TEST_TYPE==COMPLEX)
+#elif (TEST_TYPE==ACTUAL)
+#endif
+
+class CMicOptions
+{
+public:
+ CMicOptions(void) {}
+ ~CMicOptions() {}
+ BOOL Load (int argc, const char *argv[]);
+ void Unload(void) {}
+ static void Usage(void);
+ const TCHAR *OrigInfPath(void) {return m_rgchOrigInfPath;}
+ const TCHAR *NewInfDir(void) {return m_rgchNewInfDir;}
+
+private:
+
+ TCHAR m_rgchOrigInfPath[MAX_PATH];
+ TCHAR m_rgchNewInfDir[MAX_PATH];
+
+};
+
+CMicOptions gMicOptions;
+
+BOOL CMicOptions::Load (int argc, const char *argv[])
+{
+ BOOL fRet = FALSE;
+ UINT u;
+
+ if (argc!=3) goto end;
+
+ if (lstrlen(argv[1]) >= (sizeof(m_rgchOrigInfPath)/sizeof(TCHAR)))
+ {
+ goto end;
+ }
+
+ u = lstrlen(argv[2]);
+ // Extra space for possible addition of '\\'.
+ if ((u+1) >= (sizeof(m_rgchNewInfDir)/sizeof(TCHAR)))
+ {
+ goto end;
+ }
+
+ lstrcpy(m_rgchOrigInfPath, argv[1]);
+ lstrcpy(m_rgchNewInfDir, argv[2]);
+
+ ASSERT(u);
+
+ // Add final \, if required.
+ {
+ TCHAR tch = m_rgchNewInfDir[u-1];
+ if ( (tch!=(TCHAR) '\\') && (u>2 || tch!=(TCHAR)':'))
+ {
+ m_rgchNewInfDir[u]=TCHAR('\\');
+ m_rgchNewInfDir[u+1]=0;
+ }
+ }
+
+ printf
+ (
+ "OrigIP=[%s]; NewID=[%s]\n",
+ m_rgchOrigInfPath,
+ m_rgchNewInfDir
+ );
+ fRet = TRUE;
+
+end:
+ return fRet;
+}
+
+void CMicOptions::Usage (void)
+{
+ printf(TEXT("\nUsage: mic <original-inf-path> <destination-dir>\n\n"));
+}
+
+int main_mic(int argc, char * argv[])
+{
+ const CInfManufacturerEntry *pManuE = NULL;
+ CInfFile *pInf= NULL;
+ CInfDevice *pDev = NULL;
+
+
+ // Parse Options
+ // Format: mic <original inf path> <destination-dir>
+ if (!gMicOptions.Load(argc, (const char **) argv))
+ {
+ CMicOptions::Usage();
+ return 1;
+ }
+
+ pInf= new CInfFile();
+ pDev = new CInfDevice(NULL);
+
+ if (!pInf || !pDev) goto end;
+
+ if (pInf->Load(gMicOptions.OrigInfPath()))
+ {
+ pManuE = pInf->GetFirstManufacturerEntry();
+ }
+
+ for (;pManuE; pManuE = pManuE->Next())
+ {
+ const CInfManufacturerSection *pManuS=pManuE->GetManufacturerSection();
+ const CInfModelEntry *pModelE = NULL;
+ if (pManuS)
+ {
+ pModelE = pManuS->GetFirstModelEntry();
+ }
+ for (;pModelE; pModelE = pModelE->Next())
+ {
+ if (pDev->Load(pInf, pManuE, pModelE))
+ {
+ TCHAR rgchNewInf[MAX_PATH];
+ DWORD dwRank0Checksum = pDev->Rank0Checksum();
+ DWORD dwDeviceChecksum = pDev->Checksum();
+ wsprintf
+ (
+ rgchNewInf,
+ TEXT("%s%08lx_%08lx.inf"),
+ gMicOptions.NewInfDir(),
+ dwRank0Checksum,
+ dwDeviceChecksum
+ );
+ pDev->Dump();
+
+ pDev->WriteInf(rgchNewInf);
+ pDev->Unload();
+ }
+ }
+ }
+
+end:
+ if (pDev) {delete pDev; pDev=NULL;}
+ if (pInf) {pInf->Unload(); delete pInf; pInf=NULL;}
+
+ gMicOptions.Unload();
+
+ return 0;
+}
diff --git a/private/unimodem/new/mic/mic.h b/private/unimodem/new/mic/mic.h
new file mode 100644
index 000000000..2d1fd1697
--- /dev/null
+++ b/private/unimodem/new/mic/mic.h
@@ -0,0 +1 @@
+int main_mic(int argc, char * argv[]);
diff --git a/private/unimodem/new/mic/notes.txt b/private/unimodem/new/mic/notes.txt
new file mode 100644
index 000000000..08a196351
--- /dev/null
+++ b/private/unimodem/new/mic/notes.txt
@@ -0,0 +1,231 @@
+Modem Inf Compiler -- MIC
+-------------------------
+
+History:
+ 5/18/96 JosephJ Created
+
+Files:
+
+
+Classes:
+
+-------------------------------
+ CIniFile
+ Bind(FilePath pFilePath)
+ Out(FilePath pFilePath)
+ Section(szName)
+ UnBind()
+ Name
+
+ CIniFileSection
+ CIniFileSection
+ EntryIterator
+ Out(HFILE);
+ Name
+ Line
+
+ CIniFileEntry
+ Name
+ RHS
+ Out(HFILE);
+ Line
+
+ CIniFileEntryIterator
+ NextEntry
+
+ CIniFileLine
+ //Can be one of: blank, annotations, section-header,
+ // entry, entry-continuation, or unknown
+ //State can be one of: ok, warning, error(%d)
+ Type
+ State
+ Text
+
+
+ CIniFileAnnotation
+
+-------------------------------
+
+ CInfFile
+
+ CIniFile
+
+
+ CInfDevice
+
+ CSymbolTable
+ Lookup
+
+ CSymbol
+ GetText
+ GetTextLength
+
+ CInfAddRegList
+ CInfCopyFileList
+
+ CInfRank
+
+ CDisplay
+
+--------------------------------
+
+CModemDevice::CreateModem(CInfFile *pInf, CDeviceLocation *pDevLoc)
+{
+ // GetVersion
+ pInf->Version
+
+ // Get manufacturer
+ ptbszManufacturer = pDevLoc->ptbszManufacturer;
+
+ // Get Device name.
+ ptbszName = pDevLoc->Name
+
+ // Get InstallSection
+ pInstallSec = pInf->InstallSection(pDevice->ptbszInstallSection);
+
+ // Walk Addreg list
+ {
+ DWORD rgdwChecksum[MAX];
+ CAddregIterator pAddregIter = pDevLoc->AddregIterator();
+
+ for (int i=0, CAddreg pAddReg=0;(pAddreg=pAddregIter->Iterate());i++)
+ {
+ // For mow, add checksum to array
+ rgdwChecksum[i++] = pAddreg->Checksum();
+ }
+
+ // Compute Addreg checksum
+ ::CRC16((LPBYTE)rgdwChecksum, (i)? (i-1) : 0);
+ }
+
+ // Walk other list...
+ // Copyfiles
+ {
+ }
+
+}
+-------------------------------
+
+Files
+
+Class headers:
+ inf.h CIniFile
+ ini.h CInfFile
+ device.h CInfDevice
+ sym.h CInfSymbol
+---------------------------------
+
+class CGenericIterator
+{
+
+public:
+ CGenericIterator(void * pData, const CGenericIterator *pNext)
+ {m_pData=pData; m_pNext = pNext;}
+ ~CGenericIterator();
+
+ const CGenericIterator * Next (void) const {return pNext;}
+ void * Data (void) const {return pData;}
+
+private:
+
+ const CGenericIterator * m_pNext;
+ void * m_pNext;
+};
+
+for (; pIter, pIter = pIter->Next())
+{
+ const CAddregSection * pAddreg = (const CAddregSection *) pIter;
+ // blah blah...
+}
+
+ CInfString
+------------------------------------------
+
+CSyncObject
+
+ Load
+ Unload
+
+ DWORD OpenSession(void)
+ void CloseSession(DWORD)
+
+ EnterCrit
+ LeaveCrit
+
+private:
+ CRITICAL_SECTION
+ Slist EventList
+ UINT uRefCount;
+ enum {UNLOADED, MARKED_FOR_UNLOAD, LOADED} eState;
+
+--------------------------------------------------
+[Support APIs from sdk\inc\setupi.h]
+SetupGetInfInformation
+SetupQueryInfFileInformation useful?
+SetupQueryInfVersionInformation useful?
+SetupGetInfFileList useful?
+SetupOpenInfFile
+SetupOpenMasterInf
+SetupOpenAppendInfFileW
+SetupCloseInfFile
+SetupFindFirstLineA useful?
+SetupFindNextLine useful?
+SetupFindNextMatchLine useful?
+SetupGetLineByIndex useful?
+SetupGetLineCount useful?
+SetupGetLineText useful?
+SetupGetFieldCount useful?
+SetupGetStringField useful?
+SetupGetIntField useful?
+SetupGetMultiSzField useful?
+SetupGetBinaryField useful?
+SetupGetFileCompressionInfo
+SetupGetSourceFileLocation useful?
+SetupGetSourceFileSize
+SetupGetTargetPath useful?
+Error codes:
+ Inf parse outcomes:
+ ERROR_EXPECTED_SECTION_NAME
+ ERROR_BAD_SECTION_NAME_LINE
+ ERROR_SECTION_NAME_TOO_LONG
+ ERROR_GENERAL_SYNTAX
+
+ Inf runtime errors:
+ ERROR_WRONG_INF_STYLE
+ ERROR_SECTION_NOT_FOUND
+ ERROR_LINE_NOT_FOUND
+--------------------
+6/9/96
+
+Inf:Load:
+
+-- Read Version Information
+-- Read Manufacturer List Section
+ Read Manufacturer Entry
+ Read Manufacturer Section
+ Read Model Entry
+ Read Install Section
+ Read AddregSection
+ ...
+ Read ControlFlags section
+
+---------
+6/12/96
+-- concept of a Validate member function for each class:
+BOOL Validate(void)
+{
+ if (!this) return FALSE;
+
+ _try
+ {
+ test other things, like an object-type signature (each object can
+ have an object-type signature, which is assigned by the constructur
+ and cleared by the destructor.
+ }
+ _except(....)
+ {
+ }
+
+end:
+
+}
diff --git a/private/unimodem/new/mic/resp.cpp b/private/unimodem/new/mic/resp.cpp
new file mode 100644
index 000000000..fcb92de7d
--- /dev/null
+++ b/private/unimodem/new/mic/resp.cpp
@@ -0,0 +1,3538 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+#include <windows.h>
+
+const TCHAR *rgpszSimpleResp[] =
+{
+ "How",
+ "Now",
+ "Brown",
+ "Cow!",
+ NULL
+};
+
+const TCHAR *rgpszComplexResp[] =
+{
+"-SFA",
+"-SMD",
+"-SRA",
+"-SRC:",
+"-SRQ",
+"-SSV",
+"-STO",
+"-SVM",
+"+F4",
+"+F4/+FCERROR",
+"+F4@",
+"+FC-FCERROR",
+"+FC@",
+"+FCERROR",
+"+FCON",
+"@",
+"@#-SFA@#",
+"@#-SMD@#",
+"@#-SRA@#",
+"@#-SRC:@#",
+"@#-SRQ@#",
+"@#-SSV@#",
+"@#-STO@#",
+"@#-SVM@#",
+"@# CONNECT 1200 LAPM COMPRESSED@#",
+"@#+FCERROR@@#",
+"@#+FCERROR@#",
+"@#@#NO CARRIER@#",
+"@#ABORD@#",
+"@#ABORTED@#",
+"@#AUTOLOGON FAILED@#",
+"@#BLACKLISTED@#",
+"@#BUSY@#",
+"@#C@#",
+"@#CALL LOCKED:BLACKLISTED@#",
+"@#CARRIER 1200@#",
+"@#CARRIER 2400@#",
+"@#CARRIER 300@#",
+"@#CARRIER 600@#",
+"@#CARRIER 1200 V.34@#",
+"@#CARRIER 1200/75",
+"@#CARRIER 1200/75 V.23@#",
+"@#CARRIER 1200/75/VFC@#",
+"@#CARRIER 1200/75@#",
+"@#CARRIER 1200/VFC@#",
+"@#CARRIER 1200@#",
+"@#CARRIER 12000/VFC@#",
+"@#CARRIER 12000@#",
+"@#CARRIER 1200TX/75RX V.23@#",
+"@#CARRIER 14400 V.34@#",
+"@#CARRIER 14400/VFC@ @#",
+"@#CARRIER 14400/VFC@#",
+"@#CARRIER 14400@#",
+"@#CARRIER 16800 V.34@#",
+"@#CARRIER 16800/VFC@@#",
+"@#CARRIER 16800/VFC@#",
+"@#CARRIER 16800@#",
+"@#CARRIER 19200 V.34@#",
+"@#CARRIER 19200/VFC@@#",
+"@#CARRIER 19200/VFC@#",
+"@#CARRIER 19200@#",
+"@#CARRIER 21600 V.34@#",
+"@#CARRIER 21600/VFC@@#",
+"@#CARRIER 21600/VFC@#",
+"@#CARRIER 21600@#",
+"@#CARRIER 2400 V.34@#",
+"@#CARRIER 2400/VFC@#",
+"@#CARRIER 2400@#",
+"@#CARRIER 24000 V.34@#",
+"@#CARRIER 24000/VFC@@#",
+"@#CARRIER 24000/VFC@#",
+"@#CARRIER 24000@#",
+"@#CARRIER 26400 V.34@#",
+"@#CARRIER 26400/VFC@@#",
+"@#CARRIER 26400/VFC@#",
+"@#CARRIER 26400@#",
+"@#CARRIER 28800 V.34@#",
+"@#CARRIER 28800/VFC@@#",
+"@#CARRIER 28800/VFC@#",
+"@#CARRIER 28800@#",
+"@#CARRIER 300 V.34@#",
+"@#CARRIER 300/VFC@#",
+"@#CARRIER 300@#",
+"@#CARRIER 4800 V.34@#",
+"@#CARRIER 4800/VFC@#",
+"@#CARRIER 4800@#",
+"@#CARRIER 600@#",
+"@#CARRIER 64000@#",
+"@#CARRIER 7200 V.34@#",
+"@#CARRIER 7200/VFC@#",
+"@#CARRIER 7200@#",
+"@#CARRIER 75/1200",
+"@#CARRIER 75/1200 V.23@#",
+"@#CARRIER 75/1200/VFC@#",
+"@#CARRIER 75/1200@#",
+"@#CARRIER 75TX/1200RX V.23@#",
+"@#CARRIER 9600 V.34@#",
+"@#CARRIER 9600/VFC@#",
+"@#CARRIER 9600@#",
+"@#CED@# ",
+"@#COMPRESSION :CLASS5@#",
+"@#COMPRESSION NONE@#",
+"@#COMPRESSION V.42BIS@#",
+"@#COMPRESSION: ADC",
+"@#COMPRESSION: ADC@#",
+"@#COMPRESSION: CLASS 5@#",
+"@#COMPRESSION: CLASS5@#",
+"@#COMPRESSION: MNP5@#",
+"@#COMPRESSION: NONE@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42 bis@#",
+"@#COMPRESSION: V.42 BIS@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V.42bis@#",
+"@#COMPRESSION: V.42BIS@#",
+"@#COMPRESSION: V42BIS@#",
+"@#COMPRESSION:CLASS 5@#",
+"@#COMPRESSION:NONE@#",
+"@#COMPRESSION:V.42bis@#",
+"@#COMPRESSION:V.42BIS@#",
+"@#CONNECT 0600/ARQ@#",
+"@#CONNECT 0600/LAP-M/COMPRESSION@#",
+"@#CONNECT 0600/LAP-M@#",
+"@#CONNECT 0600/LAPM/COMP@#",
+"@#CONNECT 0600/LAPM@#",
+"@#CONNECT 0600/MNP@#",
+"@#CONNECT 0600/NONE@#",
+"@#CONNECT 0600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 0600/REL/COMP@#",
+"@#CONNECT 0600/REL@#",
+"@#CONNECT 0600/V42BIS@#",
+"@#CONNECT 0600@#",
+"@#CONNECT 112000/ARQ/MLP /V120/V42b@#",
+"@#CONNECT 112000/ARQ/MLP /V120@#",
+"@#CONNECT 112000@#",
+"@#CONNECT 115,200/ARQ@#",
+"@#CONNECT 115,200/LAP-M/COMPRESSION@#",
+"@#CONNECT 115,200/LAP-M@#",
+"@#CONNECT 115,200/LAPM/COMP@#",
+"@#CONNECT 115,200/LAPM@#",
+"@#CONNECT 115,200/MNP@#",
+"@#CONNECT 115,200/NONE@#",
+"@#CONNECT 115,200/REL/COMP@#",
+"@#CONNECT 115,200/REL@#",
+"@#CONNECT 115,200/V42@#",
+"@#CONNECT 115,200/V42BIS@#",
+"@#CONNECT 115,200@#",
+"@#CONNECT 115200 ALT / MNP5@#",
+"@#CONNECT 115200 ALT /MNP 5@#",
+"@#CONNECT 115200 ALT@#",
+"@#CONNECT 115200 LAPM / V.42bis@#",
+"@#CONNECT 115200 LAPM /V.42bis@#",
+"@#CONNECT 115200 LAPM@#",
+"@#CONNECT 115200 REL/MNP5@#",
+"@#CONNECT 115200 REL@#",
+"@#CONNECT 115200/ARQ@#",
+"@#CONNECT 115200/LAP-M/COMPRESSION@#",
+"@#CONNECT 115200/LAP-M@#",
+"@#CONNECT 115200/LAPM/COMP@#",
+"@#CONNECT 115200/LAPM@#",
+"@#CONNECT 115200/MNP COMPRESSED@#",
+"@#CONNECT 115200/MNP@#",
+"@#CONNECT 115200/NONE@#",
+"@#CONNECT 115200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 115200/REL-LAPM@#",
+"@#CONNECT 115200/REL-V.42@#",
+"@#CONNECT 115200/REL/COMP@#",
+"@#CONNECT 115200/REL@#",
+"@#CONNECT 115200/V42@#",
+"@#CONNECT 115200/V42BIS@#",
+"@#CONNECT 115200/VBIS@#",
+"@#CONNECT 115200@#",
+"@#CONNECT 115200T/V42BIS@#",
+"@#CONNECT 1200 ALT / MNP5@#",
+"@#CONNECT 1200 ALT /MNP 5@#",
+"@#CONNECT 1200 ALT@#",
+"@#CONNECT 1200 EC/V42BIS@#",
+"@#CONNECT 1200 EC@#",
+"@#CONNECT 1200 LAPM / V.42bis@#",
+"@#CONNECT 1200 LAPM /V.42bis@#",
+"@#CONNECT 1200 LAPM COMPRESSED@#",
+"@#CONNECT 1200 LAPM@#",
+"@#CONNECT 1200 NORMAL@#",
+"@#CONNECT 1200 REL/MNP5@#",
+"@#CONNECT 1200 REL/V42@#",
+"@#CONNECT 1200 REL/V42BIS@#",
+"@#CONNECT 1200 REL@#",
+"@#CONNECT 1200 RELIABLE COMPRESSED@#",
+"@#CONNECT 1200 RELIABLE@#",
+"@#CONNECT 1200 V.42@#",
+"@#CONNECT 1200/75",
+"@#CONNECT 1200/75/ARQ@#",
+"@#CONNECT 1200/75/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200/75/LAP-M@#",
+"@#CONNECT 1200/75/LAPM/COMP@#",
+"@#CONNECT 1200/75/LAPM@#",
+"@#CONNECT 1200/75/MNP@#",
+"@#CONNECT 1200/75/NONE@#",
+"@#CONNECT 1200/75/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200/75/REL/COMP@#",
+"@#CONNECT 1200/75/REL@#",
+"@#CONNECT 1200/75/V42@#",
+"@#CONNECT 1200/75/V42BIS@#",
+"@#CONNECT 1200/75@#",
+"@#CONNECT 1200/ARQ/MNP4@#",
+"@#CONNECT 1200/ARQ/MNP5@#",
+"@#CONNECT 1200/ARQ/V.42@#",
+"@#CONNECT 1200/ARQ/V.42bis@#",
+"@#CONNECT 1200/ARQ/V22 /MNP4@#",
+"@#CONNECT 1200/ARQ/V22 /MNP5@#",
+"@#CONNECT 1200/ARQ/V22 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22 /V42 @#",
+"@#CONNECT 1200/ARQ/V22 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22 /V42b@#",
+"@#CONNECT 1200/ARQ/V22/MNP4@#",
+"@#CONNECT 1200/ARQ/V22/MNP5@#",
+"@#CONNECT 1200/ARQ/V22/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22/V42 @#",
+"@#CONNECT 1200/ARQ/V22/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22/V42b@#",
+"@#CONNECT 1200/ARQ/V22b /MNP4@#",
+"@#CONNECT 1200/ARQ/V22b /MNP5@#",
+"@#CONNECT 1200/ARQ/V22b /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22b /V42 @#",
+"@#CONNECT 1200/ARQ/V22b /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22b /V42b@#",
+"@#CONNECT 1200/ARQ/V22b/MNP4@#",
+"@#CONNECT 1200/ARQ/V22b/MNP5@#",
+"@#CONNECT 1200/ARQ/V22b/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V22b/V42 @#",
+"@#CONNECT 1200/ARQ/V22b/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V22b/V42b@#",
+"@#CONNECT 1200/ARQ/V32 /MNP4@#",
+"@#CONNECT 1200/ARQ/V32 /MNP5@#",
+"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42 @#",
+"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42b@#",
+"@#CONNECT 1200/ARQ/V32 /MNP4@#",
+"@#CONNECT 1200/ARQ/V32 /MNP5@#",
+"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42 @#",
+"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32 /V42b@#",
+"@#CONNECT 1200/ARQ/V32b /MNP4@#",
+"@#CONNECT 1200/ARQ/V32b /MNP5@#",
+"@#CONNECT 1200/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32b /V42 @#",
+"@#CONNECT 1200/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32b /V42b@#",
+"@#CONNECT 1200/ARQ/V32b/MNP4@#",
+"@#CONNECT 1200/ARQ/V32b/MNP5@#",
+"@#CONNECT 1200/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V32b/V42 @#",
+"@#CONNECT 1200/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V32b/V42b@#",
+"@#CONNECT 1200/ARQ/V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/V42 @#",
+"@#CONNECT 1200/ARQ/V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/V42b@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 @#",
+"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42b@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 1200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42 @#",
+"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 1200/ARQ/ZyX /V42b@#",
+"@#CONNECT 1200/ARQ@#",
+"@#CONNECT 1200/COMP@#",
+"@#CONNECT 1200/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200/LAP-M@#",
+"@#CONNECT 1200/LAPM/COMP@#",
+"@#CONNECT 1200/LAPM/V42BIS@#",
+"@#CONNECT 1200/LAPM@#",
+"@#CONNECT 1200/MNP COMPRESSED@#",
+"@#CONNECT 1200/MNP@#",
+"@#CONNECT 1200/NONE@#",
+"@#CONNECT 1200/NOR@#",
+"@#CONNECT 1200/REL-LAPM-COMP@#",
+"@#CONNECT 1200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200/REL-LAPM@#",
+"@#CONNECT 1200/REL-MNP-COMP@#",
+"@#CONNECT 1200/REL-MNP@#",
+"@#CONNECT 1200/REL-V.42@#",
+"@#CONNECT 1200/REL 1@# ",
+"@#CONNECT 1200/REL 2@# ",
+"@#CONNECT 1200/REL 3@# ",
+"@#CONNECT 1200/REL 4@# ",
+"@#CONNECT 1200/REL 5@# ",
+"@#CONNECT 1200/REL COMP@#",
+"@#CONNECT 1200/REL COMPRESSED@#",
+"@#CONNECT 1200/REL/COMP@#",
+"@#CONNECT 1200/REL@#",
+"@#CONNECT 1200/RELC@#",
+"@#CONNECT 1200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 1200/RELIABLE/LAPM@#",
+"@#CONNECT 1200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 1200/RELIABLE/MNP@#",
+"@#CONNECT 1200/V42@#",
+"@#CONNECT 1200/V42B@#",
+"@#CONNECT 1200/V42BIS@#",
+"@#CONNECT 1200@#",
+"@#CONNECT 12000 ALT / MNP5@#",
+"@#CONNECT 12000 ALT /MNP 5@#",
+"@#CONNECT 12000 ALT@#",
+"@#CONNECT 12000 EC/V42@#",
+"@#CONNECT 12000 EC/V42BIS@#",
+"@#CONNECT 12000 EC@#",
+"@#CONNECT 12000 LAPM / V.42bis@#",
+"@#CONNECT 12000 LAPM /V.42bis@#",
+"@#CONNECT 12000 LAPM COMPRESSED@#",
+"@#CONNECT 12000 LAPM@#",
+"@#CONNECT 12000 REL/MNP5@#",
+"@#CONNECT 12000 REL/V42@#",
+"@#CONNECT 12000 REL/V42BIS@#",
+"@#CONNECT 12000 REL@#",
+"@#CONNECT 12000 RELIABLE COMPRESSED@#",
+"@#CONNECT 12000 RELIABLE@#",
+"@#CONNECT 12000/ARQ/CELL /MNP4@#",
+"@#CONNECT 12000/ARQ/CELL /MNP5@#",
+"@#CONNECT 12000/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/CELL /V42 @#",
+"@#CONNECT 12000/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/CELL /V42b@#",
+"@#CONNECT 12000/ARQ/CELL/MNP4@#",
+"@#CONNECT 12000/ARQ/CELL/MNP5@#",
+"@#CONNECT 12000/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/CELL/V42 @#",
+"@#CONNECT 12000/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/CELL/V42b@#",
+"@#CONNECT 12000/ARQ/MNP4@#",
+"@#CONNECT 12000/ARQ/MNP5@#",
+"@#CONNECT 12000/ARQ/V.34/MNP4@#",
+"@#CONNECT 12000/ARQ/V.34/MNP5@#",
+"@#CONNECT 12000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V.34/V42 @#",
+"@#CONNECT 12000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V.34/V42b@#",
+"@#CONNECT 12000/ARQ/V.42@#",
+"@#CONNECT 12000/ARQ/V.42bis@#",
+"@#CONNECT 12000/ARQ/V32b /MNP4@#",
+"@#CONNECT 12000/ARQ/V32b /MNP5@#",
+"@#CONNECT 12000/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V32b /V42 @#",
+"@#CONNECT 12000/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V32b /V42b@#",
+"@#CONNECT 12000/ARQ/V32b/MNP4@#",
+"@#CONNECT 12000/ARQ/V32b/MNP5@#",
+"@#CONNECT 12000/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V32b/V42 @#",
+"@#CONNECT 12000/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V32b/V42b@#",
+"@#CONNECT 12000/ARQ/V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/V42 @#",
+"@#CONNECT 12000/ARQ/V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/V42b@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP4@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP5@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 @#",
+"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42b@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP4@#",
+"@#CONNECT 12000/ARQ/ZyX /MNP5@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42 @#",
+"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 12000/ARQ/ZyX /V42b@#",
+"@#CONNECT 12000/ARQ@#",
+"@#CONNECT 12000/COMP@#",
+"@#CONNECT 12000/LAP-M/COMPRESSION@#",
+"@#CONNECT 12000/LAP-M@#",
+"@#CONNECT 12000/LAPM/COMP@#",
+"@#CONNECT 12000/LAPM/V42BIS@#",
+"@#CONNECT 12000/LAPM@#",
+"@#CONNECT 12000/MNP COMPRESSED@#",
+"@#CONNECT 12000/MNP@#",
+"@#CONNECT 12000/NONE@#",
+"@#CONNECT 12000/NOR@#",
+"@#CONNECT 12000/REL-LAPM-COMP@#",
+"@#CONNECT 12000/REL-LAPM V.42 BIS@#",
+"@#CONNECT 12000/REL-LAPM@#",
+"@#CONNECT 12000/REL-MNP-COMP@#",
+"@#CONNECT 12000/REL-MNP@#",
+"@#CONNECT 12000/REL-V.42@#",
+"@#CONNECT 12000/REL COMP@#",
+"@#CONNECT 12000/REL COMPRESSED@#",
+"@#CONNECT 12000/REL/COMP@#",
+"@#CONNECT 12000/REL@#",
+"@#CONNECT 12000/RELC@#",
+"@#CONNECT 12000/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 12000/RELIABLE/LAPM@#",
+"@#CONNECT 12000/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 12000/RELIABLE/MNP@#",
+"@#CONNECT 12000/V42@#",
+"@#CONNECT 12000/V42B@#",
+"@#CONNECT 12000/V42BIS@#",
+"@#CONNECT 12000@#",
+"@#CONNECT 12000T/V42BIS@#",
+"@#CONNECT 1200T/V42BIS@#",
+"@#CONNECT 1200TX/75RX REL/MNP5@#",
+"@#CONNECT 1200TX/75RX REL@#",
+"@#CONNECT 1200TX/75RX/ARQ@#",
+"@#CONNECT 1200TX/75RX/LAP-M/COMPRESSION@#",
+"@#CONNECT 1200TX/75RX/LAP-M@#",
+"@#CONNECT 1200TX/75RX/LAPM/COMP@#",
+"@#CONNECT 1200TX/75RX/LAPM@#",
+"@#CONNECT 1200TX/75RX/MNP@#",
+"@#CONNECT 1200TX/75RX/NONE@#",
+"@#CONNECT 1200TX/75RX/REL-LAPM V.42 BIS@#",
+"@#CONNECT 1200TX/75RX/REL/COMP@#",
+"@#CONNECT 1200TX/75RX/REL@#",
+"@#CONNECT 1200TX/75RX/V42@#",
+"@#CONNECT 1200TX/75RX/V42BIS@#",
+"@#CONNECT 1200TX/75RX@#",
+"@#CONNECT 12200/ARQ/V.34/MNP4@#",
+"@#CONNECT 12200/ARQ/V.34/MNP5@#",
+"@#CONNECT 12200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 12200/ARQ/V.34/V42 @#",
+"@#CONNECT 12200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 12200/ARQ/V.34/V42b@#",
+"@#CONNECT 12200@#",
+"@#CONNECT 1275@#",
+"@#CONNECT 128000/ARQ/MLP /X.75/V42b@#",
+"@#CONNECT 128000/ARQ/MLP /X.75@#",
+"@#CONNECT 128000@#",
+"@#CONNECT 14400 ALT / MNP5@#",
+"@#CONNECT 14400 ALT /MNP 5@#",
+"@#CONNECT 14400 ALT@#",
+"@#CONNECT 14400 EC/V42@#",
+"@#CONNECT 14400 EC/V42BIS@#",
+"@#CONNECT 14400 EC@#",
+"@#CONNECT 14400 LAPM / V.42bis@#",
+"@#CONNECT 14400 LAPM /V.42bis@#",
+"@#CONNECT 14400 LAPM COMPRESSED@#",
+"@#CONNECT 14400 LAPM@#",
+"@#CONNECT 14400 NORMAL@#",
+"@#CONNECT 14400 REL/MNP5@#",
+"@#CONNECT 14400 REL/V42@#",
+"@#CONNECT 14400 REL/V42BIS@#",
+"@#CONNECT 14400 REL@#",
+"@#CONNECT 14400 RELIABLE COMPRESSED@#",
+"@#CONNECT 14400 RELIABLE@#",
+"@#CONNECT 14400 V.42@#",
+"@#CONNECT 14400/ARQ/CELL /MNP4@#",
+"@#CONNECT 14400/ARQ/CELL /MNP5@#",
+"@#CONNECT 14400/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/CELL /V42 @#",
+"@#CONNECT 14400/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/CELL /V42b@#",
+"@#CONNECT 14400/ARQ/CELL/MNP4@#",
+"@#CONNECT 14400/ARQ/CELL/MNP5@#",
+"@#CONNECT 14400/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/CELL/V42 @#",
+"@#CONNECT 14400/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/CELL/V42b@#",
+"@#CONNECT 14400/ARQ/MNP4@#",
+"@#CONNECT 14400/ARQ/MNP5@#",
+"@#CONNECT 14400/ARQ/V.34/MNP4@#",
+"@#CONNECT 14400/ARQ/V.34/MNP5@#",
+"@#CONNECT 14400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V.34/V42 @#",
+"@#CONNECT 14400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V.34/V42b@#",
+"@#CONNECT 14400/ARQ/V.42@#",
+"@#CONNECT 14400/ARQ/V.42bis@#",
+"@#CONNECT 14400/ARQ/V32b /MNP4@#",
+"@#CONNECT 14400/ARQ/V32b /MNP5@#",
+"@#CONNECT 14400/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V32b /V42 @#",
+"@#CONNECT 14400/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V32b /V42b@#",
+"@#CONNECT 14400/ARQ/V32b/MNP4@#",
+"@#CONNECT 14400/ARQ/V32b/MNP5@#",
+"@#CONNECT 14400/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V32b/V42 @#",
+"@#CONNECT 14400/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V32b/V42b@#",
+"@#CONNECT 14400/ARQ/V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/V42 @#",
+"@#CONNECT 14400/ARQ/V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/V42b@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 @#",
+"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42b@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 14400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42 @#",
+"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 14400/ARQ/ZyX /V42b@#",
+"@#CONNECT 14400/ARQ@#",
+"@#CONNECT 14400/COMP@#",
+"@#CONNECT 14400/LAP-M/COMPRESSION@#",
+"@#CONNECT 14400/LAP-M@#",
+"@#CONNECT 14400/LAPM/COMP@#",
+"@#CONNECT 14400/LAPM/V42BIS@#",
+"@#CONNECT 14400/LAPM@#",
+"@#CONNECT 14400/MNP COMPRESSED@#",
+"@#CONNECT 14400/MNP@#",
+"@#CONNECT 14400/NONE@#",
+"@#CONNECT 14400/NOR@#",
+"@#CONNECT 14400/REL-LAPM-COMP@#",
+"@#CONNECT 14400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 14400/REL-LAPM@#",
+"@#CONNECT 14400/REL-MNP-COMP@#",
+"@#CONNECT 14400/REL-MNP@#",
+"@#CONNECT 14400/REL-V.42@#",
+"@#CONNECT 14400/REL COMP@#",
+"@#CONNECT 14400/REL COMPRESSED@#",
+"@#CONNECT 14400/REL/COMP@#",
+"@#CONNECT 14400/REL@#",
+"@#CONNECT 14400/RELC@#",
+"@#CONNECT 14400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 14400/RELIABLE/LAPM@#",
+"@#CONNECT 14400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 14400/RELIABLE/MNP@#",
+"@#CONNECT 14400/V42@#",
+"@#CONNECT 14400/V42B@#",
+"@#CONNECT 14400/V42BIS@#",
+"@#CONNECT 14400@#",
+"@#CONNECT 14400T RELIABLE@#",
+"@#CONNECT 14400T V.42@#",
+"@#CONNECT 14400T/V42BIS@#",
+"@#CONNECT 14600/ARQ/V.34/MNP4@#",
+"@#CONNECT 14600/ARQ/V.34/MNP5@#",
+"@#CONNECT 14600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 14600/ARQ/V.34/V42 @#",
+"@#CONNECT 14600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 14600/ARQ/V.34/V42b@#",
+"@#CONNECT 14600@#",
+"@#CONNECT 16000 EC/V42BIS@#",
+"@#CONNECT 16800 EC/V42@#",
+"@#CONNECT 16800 EC/V42BIS@#",
+"@#CONNECT 16800 EC@#",
+"@#CONNECT 16800 LAPM COMPRESSED@#",
+"@#CONNECT 16800 LAPM@#",
+"@#CONNECT 16800 REL/MNP5@#",
+"@#CONNECT 16800 REL/V42@#",
+"@#CONNECT 16800 REL/V42BIS@#",
+"@#CONNECT 16800 REL@#",
+"@#CONNECT 16800 RELIABLE COMPRESSED@#",
+"@#CONNECT 16800 RELIABLE@#",
+"@#CONNECT 16800/ARQ/MNP4@#",
+"@#CONNECT 16800/ARQ/MNP5@#",
+"@#CONNECT 16800/ARQ/V.34/MNP4@#",
+"@#CONNECT 16800/ARQ/V.34/MNP5@#",
+"@#CONNECT 16800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/V.34/V42 @#",
+"@#CONNECT 16800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/V.34/V42b@#",
+"@#CONNECT 16800/ARQ/V.42@#",
+"@#CONNECT 16800/ARQ/V.42bis@#",
+"@#CONNECT 16800/ARQ/V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/V42 @#",
+"@#CONNECT 16800/ARQ/V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/V42b@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 @#",
+"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42b@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 16800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42 @#",
+"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 16800/ARQ/ZyX /V42b@#",
+"@#CONNECT 16800/ARQ@#",
+"@#CONNECT 16800/COMP@#",
+"@#CONNECT 16800/LAP-M/COMPRESSION@#",
+"@#CONNECT 16800/LAP-M@#",
+"@#CONNECT 16800/LAPM/COMP@#",
+"@#CONNECT 16800/LAPM/V42BIS@#",
+"@#CONNECT 16800/LAPM@#",
+"@#CONNECT 16800/MNP COMPRESSED@#",
+"@#CONNECT 16800/MNP@#",
+"@#CONNECT 16800/NONE@#",
+"@#CONNECT 16800/NOR@#",
+"@#CONNECT 16800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 16800/REL-LAPM@#",
+"@#CONNECT 16800/REL-V.42@#",
+"@#CONNECT 16800/REL COMP@#",
+"@#CONNECT 16800/REL/COMP@#",
+"@#CONNECT 16800/REL@#",
+"@#CONNECT 16800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 16800/RELIABLE/LAPM@#",
+"@#CONNECT 16800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 16800/RELIABLE/MNP@#",
+"@#CONNECT 16800/V42@#",
+"@#CONNECT 16800/V42BIS@#",
+"@#CONNECT 16800@#",
+"@#CONNECT 16800T/V42BIS@#",
+"@#CONNECT 17000/ARQ/V.34/MNP4@#",
+"@#CONNECT 17000/ARQ/V.34/MNP5@#",
+"@#CONNECT 17000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 17000/ARQ/V.34/V42 @#",
+"@#CONNECT 17000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 17000/ARQ/V.34/V42b@#",
+"@#CONNECT 17000@#",
+"@#CONNECT 19200 ALT / MNP5@#",
+"@#CONNECT 19200 ALT /MNP 5@#",
+"@#CONNECT 19200 ALT@#",
+"@#CONNECT 19200 EC/BIS@#",
+"@#CONNECT 19200 EC/V42@#",
+"@#CONNECT 19200 EC/V42BIZ@#",
+"@#CONNECT 19200 EC@#",
+"@#CONNECT 19200 LAPM / V.42bis@#",
+"@#CONNECT 19200 LAPM /V.42bis@#",
+"@#CONNECT 19200 LAPM COMPRESSED@#",
+"@#CONNECT 19200 LAPM@#",
+"@#CONNECT 19200 REL/MNP5@#",
+"@#CONNECT 19200 REL/V42@#",
+"@#CONNECT 19200 REL/V42BIS@#",
+"@#CONNECT 19200 REL@#",
+"@#CONNECT 19200 RELIABLE COMPRESSED@#",
+"@#CONNECT 19200 RELIABLE@#",
+"@#CONNECT 19200/ARQ/MNP4@#",
+"@#CONNECT 19200/ARQ/MNP5@#",
+"@#CONNECT 19200/ARQ/V.34/MNP4@#",
+"@#CONNECT 19200/ARQ/V.34/MNP5@#",
+"@#CONNECT 19200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/V.34/V42 @#",
+"@#CONNECT 19200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/V.34/V42b@#",
+"@#CONNECT 19200/ARQ/V.42@#",
+"@#CONNECT 19200/ARQ/V.42bis@#",
+"@#CONNECT 19200/ARQ/V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/V42 @#",
+"@#CONNECT 19200/ARQ/V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/V42b@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 @#",
+"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42b@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 19200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42 @#",
+"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 19200/ARQ/ZyX /V42b@#",
+"@#CONNECT 19200/ARQ@#",
+"@#CONNECT 19200/COMP@#",
+"@#CONNECT 19200/LAP-M/COMPRESSION@#",
+"@#CONNECT 19200/LAP-M@#",
+"@#CONNECT 19200/LAPM/COMP@#",
+"@#CONNECT 19200/LAPM/V42BIS@#",
+"@#CONNECT 19200/LAPM@#",
+"@#CONNECT 19200/MNP COMPRESSED@#",
+"@#CONNECT 19200/MNP@#",
+"@#CONNECT 19200/NONE@#",
+"@#CONNECT 19200/NOR@#",
+"@#CONNECT 19200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 19200/REL-LAPM@#",
+"@#CONNECT 19200/REL-V.42@#",
+"@#CONNECT 19200/REL COMP@#",
+"@#CONNECT 19200/REL/COMP@#",
+"@#CONNECT 19200/REL@#",
+"@#CONNECT 19200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 19200/RELIABLE/LAPM@#",
+"@#CONNECT 19200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 19200/RELIABLE/MNP@#",
+"@#CONNECT 19200/V.110@#",
+"@#CONNECT 19200/V42@#",
+"@#CONNECT 19200/V42BIS@#",
+"@#CONNECT 19200@#",
+"@#CONNECT 19200T/V42BIS@#",
+"@#CONNECT 19400/ARQ/V.34/MNP4@#",
+"@#CONNECT 19400/ARQ/V.34/MNP5@#",
+"@#CONNECT 19400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 19400/ARQ/V.34/V42 @#",
+"@#CONNECT 19400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 19400/ARQ/V.34/V42b@#",
+"@#CONNECT 19400@#",
+"@#CONNECT 21600 LAPM COMPRESSED@#",
+"@#CONNECT 21600 LAPM@#",
+"@#CONNECT 21600 REL/MNP5@#",
+"@#CONNECT 21600 REL@#",
+"@#CONNECT 21600 RELIABLE COMPRESSED@#",
+"@#CONNECT 21600 RELIABLE@#",
+"@#CONNECT 21600/ARQ/V.34/MNP4@#",
+"@#CONNECT 21600/ARQ/V.34/MNP5@#",
+"@#CONNECT 21600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 21600/ARQ/V.34/V42 @#",
+"@#CONNECT 21600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 21600/ARQ/V.34/V42b@#",
+"@#CONNECT 21600/ARQ@#",
+"@#CONNECT 21600/COMP@#",
+"@#CONNECT 21600/LAP-M/COMPRESSION@#",
+"@#CONNECT 21600/LAP-M@#",
+"@#CONNECT 21600/LAPM/COMP@#",
+"@#CONNECT 21600/LAPM/V42BIS@#",
+"@#CONNECT 21600/LAPM@#",
+"@#CONNECT 21600/MNP COMPRESSED@#",
+"@#CONNECT 21600/MNP@#",
+"@#CONNECT 21600/NONE@#",
+"@#CONNECT 21600/NOR@#",
+"@#CONNECT 21600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 21600/REL-LAPM@#",
+"@#CONNECT 21600/REL-V.42@#",
+"@#CONNECT 21600/REL COMP@#",
+"@#CONNECT 21600/REL/COMP@#",
+"@#CONNECT 21600/REL@#",
+"@#CONNECT 21600/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 21600/RELIABLE/LAPM@#",
+"@#CONNECT 21600/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 21600/RELIABLE/MNP@#",
+"@#CONNECT 21600/V42@#",
+"@#CONNECT 21600/V42BIS@#",
+"@#CONNECT 21600@#",
+"@#CONNECT 21600T/V42BIS@#",
+"@#CONNECT 21800/ARQ/V.34/MNP4@#",
+"@#CONNECT 21800/ARQ/V.34/MNP5@#",
+"@#CONNECT 21800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 21800/ARQ/V.34/V42 @#",
+"@#CONNECT 21800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 21800/ARQ/V.34/V42b@#",
+"@#CONNECT 21800@#",
+"@#CONNECT 230400/ARQ@#",
+"@#CONNECT 230400/LAP-M@#",
+"@#CONNECT 230400/LAPM/COMP@#",
+"@#CONNECT 230400/LAPM@#",
+"@#CONNECT 230400/MNP@#",
+"@#CONNECT 230400/NONE@#",
+"@#CONNECT 230400/REL/COMP@#",
+"@#CONNECT 230400/REL@#",
+"@#CONNECT 230400/V42BIS@#",
+"@#CONNECT 230400@#",
+"@#CONNECT 240/MNP@#",
+"@#CONNECT 2400 @#",
+"@#CONNECT 2400 ALT / MNP5@#",
+"@#CONNECT 2400 ALT /MNP 5@#",
+"@#CONNECT 2400 ALT@#",
+"@#CONNECT 2400 EC/V42@#",
+"@#CONNECT 2400 EC/V42BIS@#",
+"@#CONNECT 2400 EC@#",
+"@#CONNECT 2400 LAPM / V.42bis@#",
+"@#CONNECT 2400 LAPM /V.42bis@#",
+"@#CONNECT 2400 LAPM COMPRESSED@#",
+"@#CONNECT 2400 LAPM@#",
+"@#CONNECT 2400 NORMAL@#",
+"@#CONNECT 2400 REL/MNP5@#",
+"@#CONNECT 2400 REL/V42@#",
+"@#CONNECT 2400 REL/V42BIS@#",
+"@#CONNECT 2400 REL@#",
+"@#CONNECT 2400 RELIABLE COMPRESSED@#",
+"@#CONNECT 2400 RELIABLE@#",
+"@#CONNECT 2400 V.42@#",
+"@#CONNECT 2400/ARQ/CELL /MNP4@#",
+"@#CONNECT 2400/ARQ/CELL /MNP5@#",
+"@#CONNECT 2400/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/CELL /V42 @#",
+"@#CONNECT 2400/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/CELL /V42b@#",
+"@#CONNECT 2400/ARQ/CELL/MNP4@#",
+"@#CONNECT 2400/ARQ/CELL/MNP5@#",
+"@#CONNECT 2400/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/CELL/V42 @#",
+"@#CONNECT 2400/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/CELL/V42b@#",
+"@#CONNECT 2400/ARQ/MNP4@#",
+"@#CONNECT 2400/ARQ/MNP5@#",
+"@#CONNECT 2400/ARQ/V.34/MNP4@#",
+"@#CONNECT 2400/ARQ/V.34/MNP5@#",
+"@#CONNECT 2400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V.34/V42 @#",
+"@#CONNECT 2400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V.34/V42b@#",
+"@#CONNECT 2400/ARQ/V.42@#",
+"@#CONNECT 2400/ARQ/V.42bis@#",
+"@#CONNECT 2400/ARQ/V22b /MNP4@#",
+"@#CONNECT 2400/ARQ/V22b /MNP5@#",
+"@#CONNECT 2400/ARQ/V22b /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V22b /V42 @#",
+"@#CONNECT 2400/ARQ/V22b /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V22b /V42b@#",
+"@#CONNECT 2400/ARQ/V22b/MNP4@#",
+"@#CONNECT 2400/ARQ/V22b/MNP5@#",
+"@#CONNECT 2400/ARQ/V22b/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V22b/V42 @#",
+"@#CONNECT 2400/ARQ/V22b/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V22b/V42b@#",
+"@#CONNECT 2400/ARQ/V32 /MNP4@#",
+"@#CONNECT 2400/ARQ/V32 /MNP5@#",
+"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42 @#",
+"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42b@#",
+"@#CONNECT 2400/ARQ/V32 /MNP4@#",
+"@#CONNECT 2400/ARQ/V32 /MNP5@#",
+"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42 @#",
+"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32 /V42b@#",
+"@#CONNECT 2400/ARQ/V32b /MNP4@#",
+"@#CONNECT 2400/ARQ/V32b /MNP5@#",
+"@#CONNECT 2400/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32b /V42 @#",
+"@#CONNECT 2400/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32b /V42b@#",
+"@#CONNECT 2400/ARQ/V32b/MNP4@#",
+"@#CONNECT 2400/ARQ/V32b/MNP5@#",
+"@#CONNECT 2400/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V32b/V42 @#",
+"@#CONNECT 2400/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V32b/V42b@#",
+"@#CONNECT 2400/ARQ/V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/V42 @#",
+"@#CONNECT 2400/ARQ/V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/V42b@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 @#",
+"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42b@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP4@#",
+"@#CONNECT 2400/ARQ/ZyX /MNP5@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42 @#",
+"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 2400/ARQ/ZyX /V42b@#",
+"@#CONNECT 2400/ARQ@#",
+"@#CONNECT 2400/COMP@#",
+"@#CONNECT 2400/LAP-M/COMPRESSION@#",
+"@#CONNECT 2400/LAP-M@#",
+"@#CONNECT 2400/LAPM/COMP@#",
+"@#CONNECT 2400/LAPM/V42BIS@#",
+"@#CONNECT 2400/LAPM@#",
+"@#CONNECT 2400/MNP COMPRESSED@#",
+"@#CONNECT 2400/MNP@#",
+"@#CONNECT 2400/NONE@#",
+"@#CONNECT 2400/NOR@#",
+"@#CONNECT 2400/REL-LAPM-COMP@#",
+"@#CONNECT 2400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 2400/REL-LAPM@#",
+"@#CONNECT 2400/REL-MNP-COMP@#",
+"@#CONNECT 2400/REL-MNP@#",
+"@#CONNECT 2400/REL-V.42@#",
+"@#CONNECT 2400/REL 1@# ",
+"@#CONNECT 2400/REL 2@# ",
+"@#CONNECT 2400/REL 3@# ",
+"@#CONNECT 2400/REL 4@# ",
+"@#CONNECT 2400/REL 5@# ",
+"@#CONNECT 2400/REL COMP@#",
+"@#CONNECT 2400/REL COMPRESSED@#",
+"@#CONNECT 2400/REL/COMP@#",
+"@#CONNECT 2400/REL@#",
+"@#CONNECT 2400/RELC@#",
+"@#CONNECT 2400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 2400/RELIABLE/LAPM@#",
+"@#CONNECT 2400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 2400/RELIABLE/MNP@#",
+"@#CONNECT 2400/V42@#",
+"@#CONNECT 2400/V42B@#",
+"@#CONNECT 2400/V42BIS@#",
+"@#CONNECT 2400@#",
+"@#CONNECT 24000 LAPM COMPRESSED@#",
+"@#CONNECT 24000 LAPM@#",
+"@#CONNECT 24000 REL/MNP5@#",
+"@#CONNECT 24000 REL@#",
+"@#CONNECT 24000 RELIABLE COMPRESSED@#",
+"@#CONNECT 24000 RELIABLE@#",
+"@#CONNECT 24000/ARQ/V.34/MNP4@#",
+"@#CONNECT 24000/ARQ/V.34/MNP5@#",
+"@#CONNECT 24000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 24000/ARQ/V.34/V42 @#",
+"@#CONNECT 24000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 24000/ARQ/V.34/V42b@#",
+"@#CONNECT 24000/ARQ@#",
+"@#CONNECT 24000/COMP@#",
+"@#CONNECT 24000/LAP-M/COMPRESSION@#",
+"@#CONNECT 24000/LAP-M@#",
+"@#CONNECT 24000/LAPM/COMP@#",
+"@#CONNECT 24000/LAPM/V42BIS@#",
+"@#CONNECT 24000/LAPM@#",
+"@#CONNECT 24000/MNP COMPRESSED@#",
+"@#CONNECT 24000/MNP@#",
+"@#CONNECT 24000/NONE@#",
+"@#CONNECT 24000/NOR@#",
+"@#CONNECT 24000/REL-LAPM V.42 BIS@#",
+"@#CONNECT 24000/REL-LAPM@#",
+"@#CONNECT 24000/REL-V.42@#",
+"@#CONNECT 24000/REL COMP@#",
+"@#CONNECT 24000/REL/COMP@#",
+"@#CONNECT 24000/REL@#",
+"@#CONNECT 24000/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 24000/RELIABLE/LAPM@#",
+"@#CONNECT 24000/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 24000/RELIABLE/MNP@#",
+"@#CONNECT 24000/V42@#",
+"@#CONNECT 24000/V42BIS@#",
+"@#CONNECT 24000@#",
+"@#CONNECT 24000T/V42BIS@#",
+"@#CONNECT 2400T/V42BIS@#",
+"@#CONNECT 24200/ARQ/V.34/MNP4@#",
+"@#CONNECT 24200/ARQ/V.34/MNP5@#",
+"@#CONNECT 24200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 24200/ARQ/V.34/V42 @#",
+"@#CONNECT 24200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 24200/ARQ/V.34/V42b@#",
+"@#CONNECT 24200@#",
+"@#CONNECT 2600/ARQ/V.34/MNP4@#",
+"@#CONNECT 2600/ARQ/V.34/MNP5@#",
+"@#CONNECT 2600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 2600/ARQ/V.34/V42 @#",
+"@#CONNECT 2600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 2600/ARQ/V.34/V42b@#",
+"@#CONNECT 2600@#",
+"@#CONNECT 26400 LAPM COMPRESSED<cR>#",
+"@#CONNECT 26400 LAPM@#",
+"@#CONNECT 26400 REL/MNP5@#",
+"@#CONNECT 26400 REL@#",
+"@#CONNECT 26400 RELIABLE COMPRESSED<cR>#",
+"@#CONNECT 26400 RELIABLE@#",
+"@#CONNECT 26400/ARQ/V.34/MNP4@#",
+"@#CONNECT 26400/ARQ/V.34/MNP5@#",
+"@#CONNECT 26400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 26400/ARQ/V.34/V42 @#",
+"@#CONNECT 26400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 26400/ARQ/V.34/V42b@#",
+"@#CONNECT 26400/ARQ@#",
+"@#CONNECT 26400/COMP@#",
+"@#CONNECT 26400/LAP-M/COMPRESSION@#",
+"@#CONNECT 26400/LAP-M@#",
+"@#CONNECT 26400/LAPM/COMP@#",
+"@#CONNECT 26400/LAPM/V42BIS@#",
+"@#CONNECT 26400/LAPM@#",
+"@#CONNECT 26400/MNP COMPRESSED@#",
+"@#CONNECT 26400/MNP@#",
+"@#CONNECT 26400/NONE@#",
+"@#CONNECT 26400/NOR@#",
+"@#CONNECT 26400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 26400/REL-LAPM@#",
+"@#CONNECT 26400/REL-V.42@#",
+"@#CONNECT 26400/REL COMP@#",
+"@#CONNECT 26400/REL/COMP@#",
+"@#CONNECT 26400/REL@#",
+"@#CONNECT 26400/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 26400/RELIABLE/LAPM@#",
+"@#CONNECT 26400/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 26400/RELIABLE/MNP@#",
+"@#CONNECT 26400/V42@#",
+"@#CONNECT 26400/V42BIS@#",
+"@#CONNECT 26400@#",
+"@#CONNECT 26400T/V42BIS@#",
+"@#CONNECT 26600/ARQ/V.34/MNP4@#",
+"@#CONNECT 26600/ARQ/V.34/MNP5@#",
+"@#CONNECT 26600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 26600/ARQ/V.34/V42 @#",
+"@#CONNECT 26600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 26600/ARQ/V.34/V42b@#",
+"@#CONNECT 26600@#",
+"@#CONNECT 26800/MNP COMPRESSED@#",
+"@#CONNECT 28800 LAPM COMPRESSED@#",
+"@#CONNECT 28800 LAPM@#",
+"@#CONNECT 28800 REL/MNP5@#",
+"@#CONNECT 28800 REL@#",
+"@#CONNECT 28800 RELIABLE COMPRESSED@#",
+"@#CONNECT 28800 RELIABLE@#",
+"@#CONNECT 28800/ARQ/V.34/MNP4@#",
+"@#CONNECT 28800/ARQ/V.34/MNP5@#",
+"@#CONNECT 28800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 28800/ARQ/V.34/V42 @#",
+"@#CONNECT 28800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 28800/ARQ/V.34/V42b@#",
+"@#CONNECT 28800/ARQ@#",
+"@#CONNECT 28800/COMP@#",
+"@#CONNECT 28800/LAP-M/COMPRESSION@#",
+"@#CONNECT 28800/LAP-M@#",
+"@#CONNECT 28800/LAPM/COMP@#",
+"@#CONNECT 28800/LAPM/V42BIS@#",
+"@#CONNECT 28800/LAPM@#",
+"@#CONNECT 28800/MNP COMPRESSED@#",
+"@#CONNECT 28800/MNP@#",
+"@#CONNECT 28800/NONE@#",
+"@#CONNECT 28800/NOR@#",
+"@#CONNECT 28800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 28800/REL-LAPM@#",
+"@#CONNECT 28800/REL-V.42@#",
+"@#CONNECT 28800/REL COMP@#",
+"@#CONNECT 28800/REL/COMP@#",
+"@#CONNECT 28800/REL@#",
+"@#CONNECT 28800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 28800/RELIABLE/LAPM@#",
+"@#CONNECT 28800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 28800/RELIABLE/MNP@#",
+"@#CONNECT 28800/V42@#",
+"@#CONNECT 28800/V42BIS@#",
+"@#CONNECT 28800@#",
+"@#CONNECT 28800T/V42BIS@#",
+"@#CONNECT 29000/ARQ/V.34/MNP4@#",
+"@#CONNECT 29000/ARQ/V.34/MNP5@#",
+"@#CONNECT 29000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 29000/ARQ/V.34/V42 @#",
+"@#CONNECT 29000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 29000/ARQ/V.34/V42b@#",
+"@#CONNECT 29000@#",
+"@#CONNECT 300 ALT / MNP5@#",
+"@#CONNECT 300 ALT /MNP 5@#",
+"@#CONNECT 300 ALT@#",
+"@#CONNECT 300 EC/V42BIS@#",
+"@#CONNECT 300 EC@#",
+"@#CONNECT 300 LAPM / V.42bis@#",
+"@#CONNECT 300 LAPM /V.42bis@#",
+"@#CONNECT 300 LAPM@#",
+"@#CONNECT 300 REL/MNP5@#",
+"@#CONNECT 300 REL@#",
+"@#CONNECT 300/ARQ/MNP4@#",
+"@#CONNECT 300/ARQ/MNP5@#",
+"@#CONNECT 300/ARQ/V.42@#",
+"@#CONNECT 300/ARQ/V.42bis@#",
+"@#CONNECT 300/ARQ/V42 /SREJ@#",
+"@#CONNECT 300/ARQ/V42 @#",
+"@#CONNECT 300/ARQ/V42b@#",
+"@#CONNECT 300/ARQ@#",
+"@#CONNECT 300/COMP@#",
+"@#CONNECT 300/LAP-M/COMPRESSION@#",
+"@#CONNECT 300/LAP-M@#",
+"@#CONNECT 300/LAPM/COMP@#",
+"@#CONNECT 300/LAPM/V42BIS@#",
+"@#CONNECT 300/LAPM@#",
+"@#CONNECT 300/MNP COMPRESSED@#",
+"@#CONNECT 300/MNP@#",
+"@#CONNECT 300/NONE@#",
+"@#CONNECT 300/NOR@#",
+"@#CONNECT 300/REL-LAPM V.42 BIS@#",
+"@#CONNECT 300/REL-LAPM@#",
+"@#CONNECT 300/REL-MNP@#",
+"@#CONNECT 300/REL-V.42@#",
+"@#CONNECT 300/REL 1@# ",
+"@#CONNECT 300/REL 2@# ",
+"@#CONNECT 300/REL 3@# ",
+"@#CONNECT 300/REL 4@# ",
+"@#CONNECT 300/REL 5@# ",
+"@#CONNECT 300/REL COMP@#",
+"@#CONNECT 300/REL COMPRESSED@#",
+"@#CONNECT 300/REL/COMP@#",
+"@#CONNECT 300/REL@#",
+"@#CONNECT 300/V42@#",
+"@#CONNECT 300/V42BIS@#",
+"@#CONNECT 300@#",
+"@#CONNECT 300T/V42BIS@#",
+"@#CONNECT 31200/ARQ/V.34/MNP4@#",
+"@#CONNECT 31200/ARQ/V.34/MNP5@#",
+"@#CONNECT 31200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 31200/ARQ/V.34/V42 @#",
+"@#CONNECT 31200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 31200/ARQ/V.34/V42b@#",
+"@#CONNECT 31200@#",
+"@#CONNECT 31400/ARQ/V.34/MNP4@#",
+"@#CONNECT 31400/ARQ/V.34/MNP5@#",
+"@#CONNECT 31400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 31400/ARQ/V.34/V42 @#",
+"@#CONNECT 31400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 31400/ARQ/V.34/V42b@#",
+"@#CONNECT 31400@#",
+"@#CONNECT 33600/ARQ/V.34/MNP4@#",
+"@#CONNECT 33600/ARQ/V.34/MNP5@#",
+"@#CONNECT 33600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 33600/ARQ/V.34/V42 @#",
+"@#CONNECT 33600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 33600/ARQ/V.34/V42b@#",
+"@#CONNECT 33600@#",
+"@#CONNECT 33800/ARQ/V.34/MNP4@#",
+"@#CONNECT 33800/ARQ/V.34/MNP5@#",
+"@#CONNECT 33800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 33800/ARQ/V.34/V42 @#",
+"@#CONNECT 33800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 33800/ARQ/V.34/V42b@#",
+"@#CONNECT 33800@#",
+"@#CONNECT 38400 ALT / MNP5@#",
+"@#CONNECT 38400 ALT /MNP 5@#",
+"@#CONNECT 38400 ALT@#",
+"@#CONNECT 38400 EC/V42BIS@#",
+"@#CONNECT 38400 EC@#",
+"@#CONNECT 38400 LAPM / V.42bis@#",
+"@#CONNECT 38400 LAPM /V.42bis@#",
+"@#CONNECT 38400 LAPM@#",
+"@#CONNECT 38400 REL/MNP5@#",
+"@#CONNECT 38400 REL/V42@#",
+"@#CONNECT 38400 REL@#",
+"@#CONNECT 38400/ARQ/V42 /SREJ@#",
+"@#CONNECT 38400/ARQ/V42 @#",
+"@#CONNECT 38400/ARQ/V42b@#",
+"@#CONNECT 38400/ARQ@#",
+"@#CONNECT 38400/COMP@#",
+"@#CONNECT 38400/LAP-M/COMPRESSION@#",
+"@#CONNECT 38400/LAP-M@#",
+"@#CONNECT 38400/LAPM/COMP@#",
+"@#CONNECT 38400/LAPM@#",
+"@#CONNECT 38400/MNP COMPRESSED@#",
+"@#CONNECT 38400/MNP@#",
+"@#CONNECT 38400/NONE@#",
+"@#CONNECT 38400/NOR@#",
+"@#CONNECT 38400/REL-LAPM V.42 BIS@#",
+"@#CONNECT 38400/REL-LAPM@#",
+"@#CONNECT 38400/REL-V.42@#",
+"@#CONNECT 38400/REL COMP@#",
+"@#CONNECT 38400/REL/COMP@#",
+"@#CONNECT 38400/REL@#",
+"@#CONNECT 38400/V.110@#",
+"@#CONNECT 38400/V42@#",
+"@#CONNECT 38400/V42BIS@#",
+"@#CONNECT 38400@#",
+"@#CONNECT 38400T/V42BIS@#",
+"@#CONNECT 4800 ALT / MNP5@#",
+"@#CONNECT 4800 ALT /MNP 5@#",
+"@#CONNECT 4800 ALT@#",
+"@#CONNECT 4800 EC/V42@#",
+"@#CONNECT 4800 EC/V42BIS@#",
+"@#CONNECT 4800 EC@#",
+"@#CONNECT 4800 LAPM / V.42bis@#",
+"@#CONNECT 4800 LAPM /V.42bis@#",
+"@#CONNECT 4800 LAPM COMPRESSED@#",
+"@#CONNECT 4800 LAPM@#",
+"@#CONNECT 4800 NORMAL@#",
+"@#CONNECT 4800 REL/MNP5@#",
+"@#CONNECT 4800 REL/V42@#",
+"@#CONNECT 4800 REL/V42BIS@#",
+"@#CONNECT 4800 REL@#",
+"@#CONNECT 4800 RELIABLE COMPRESSED@#",
+"@#CONNECT 4800 RELIABLE@#",
+"@#CONNECT 4800 V.42@#",
+"@#CONNECT 4800/ARQ/CELL /MNP4@#",
+"@#CONNECT 4800/ARQ/CELL /MNP5@#",
+"@#CONNECT 4800/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/CELL /V42 @#",
+"@#CONNECT 4800/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/CELL /V42b@#",
+"@#CONNECT 4800/ARQ/CELL/MNP4@#",
+"@#CONNECT 4800/ARQ/CELL/MNP5@#",
+"@#CONNECT 4800/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/CELL/V42 @#",
+"@#CONNECT 4800/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/CELL/V42b@#",
+"@#CONNECT 4800/ARQ/MNP4@#",
+"@#CONNECT 4800/ARQ/MNP5@#",
+"@#CONNECT 4800/ARQ/V.34/MNP4@#",
+"@#CONNECT 4800/ARQ/V.34/MNP5@#",
+"@#CONNECT 4800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V.34/V42 @#",
+"@#CONNECT 4800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V.34/V42b@#",
+"@#CONNECT 4800/ARQ/V.42@#",
+"@#CONNECT 4800/ARQ/V.42bis@#",
+"@#CONNECT 4800/ARQ/V32 /MNP4@#",
+"@#CONNECT 4800/ARQ/V32 /MNP5@#",
+"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42 @#",
+"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42b@#",
+"@#CONNECT 4800/ARQ/V32 /MNP4@#",
+"@#CONNECT 4800/ARQ/V32 /MNP5@#",
+"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42 @#",
+"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32 /V42b@#",
+"@#CONNECT 4800/ARQ/V32b /MNP4@#",
+"@#CONNECT 4800/ARQ/V32b /MNP5@#",
+"@#CONNECT 4800/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32b /V42 @#",
+"@#CONNECT 4800/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32b /V42b@#",
+"@#CONNECT 4800/ARQ/V32b/MNP4@#",
+"@#CONNECT 4800/ARQ/V32b/MNP5@#",
+"@#CONNECT 4800/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V32b/V42 @#",
+"@#CONNECT 4800/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V32b/V42b@#",
+"@#CONNECT 4800/ARQ/V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/V42 @#",
+"@#CONNECT 4800/ARQ/V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/V42b@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 @#",
+"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42b@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP4@#",
+"@#CONNECT 4800/ARQ/ZyX /MNP5@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42 @#",
+"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 4800/ARQ/ZyX /V42b@#",
+"@#CONNECT 4800/ARQ@#",
+"@#CONNECT 4800/COMP@#",
+"@#CONNECT 4800/LAP-M/COMPRESSION@#",
+"@#CONNECT 4800/LAP-M@#",
+"@#CONNECT 4800/LAPM/COMP@#",
+"@#CONNECT 4800/LAPM/V42BIS@#",
+"@#CONNECT 4800/LAPM@#",
+"@#CONNECT 4800/MNP COMPRESSED@#",
+"@#CONNECT 4800/MNP@#",
+"@#CONNECT 4800/NONE@#",
+"@#CONNECT 4800/NOR@#",
+"@#CONNECT 4800/REL-LAPM-COMP@#",
+"@#CONNECT 4800/REL-LAPM V.42 BIS@#",
+"@#CONNECT 4800/REL-LAPM@#",
+"@#CONNECT 4800/REL-MNP-COMP@#",
+"@#CONNECT 4800/REL-MNP@#",
+"@#CONNECT 4800/REL-V.42@#",
+"@#CONNECT 4800/REL 1@# ",
+"@#CONNECT 4800/REL 2@# ",
+"@#CONNECT 4800/REL 3@# ",
+"@#CONNECT 4800/REL 4@# ",
+"@#CONNECT 4800/REL 5@# ",
+"@#CONNECT 4800/REL COMP@#",
+"@#CONNECT 4800/REL COMPRESSED@#",
+"@#CONNECT 4800/REL/COMP@#",
+"@#CONNECT 4800/REL@#",
+"@#CONNECT 4800/RELC@#",
+"@#CONNECT 4800/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 4800/RELIABLE/LAPM@#",
+"@#CONNECT 4800/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 4800/RELIABLE/MNP@#",
+"@#CONNECT 4800/V42@#",
+"@#CONNECT 4800/V42B@#",
+"@#CONNECT 4800/V42BIS@#",
+"@#CONNECT 4800@#",
+"@#CONNECT 48000@#",
+"@#CONNECT 4800T/V42BIS@#",
+"@#CONNECT 5000/ARQ/V.34/MNP4@#",
+"@#CONNECT 5000/ARQ/V.34/MNP5@#",
+"@#CONNECT 5000/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 5000/ARQ/V.34/V42 @#",
+"@#CONNECT 5000/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 5000/ARQ/V.34/V42b@#",
+"@#CONNECT 5000@#",
+"@#CONNECT 56000/ARQ/SLP /V120/V42b@#",
+"@#CONNECT 56000/ARQ/SLP /V120@#",
+"@#CONNECT 56000/REL@#",
+"@#CONNECT 56000@#",
+"@#CONNECT 57600 ALT / MNP5@#",
+"@#CONNECT 57600 ALT /MNP 5@#",
+"@#CONNECT 57600 ALT@#",
+"@#CONNECT 57600 EC/V42BIS@#",
+"@#CONNECT 57600 EC@#",
+"@#CONNECT 57600 LAPM / V.42bis@#",
+"@#CONNECT 57600 LAPM /V.42bis@#",
+"@#CONNECT 57600 LAPM@#",
+"@#CONNECT 57600 REL/MNP5@#",
+"@#CONNECT 57600 REL@#",
+"@#CONNECT 57600/ARQ/V42 /SREJ@#",
+"@#CONNECT 57600/ARQ/V42 @#",
+"@#CONNECT 57600/ARQ/V42b@#",
+"@#CONNECT 57600/ARQ@#",
+"@#CONNECT 57600/COMP@#",
+"@#CONNECT 57600/LAP-M/COMPRESSION@#",
+"@#CONNECT 57600/LAP-M@#",
+"@#CONNECT 57600/LAPM/COMP@#",
+"@#CONNECT 57600/LAPM@#",
+"@#CONNECT 57600/MNP COMPRESSED@#",
+"@#CONNECT 57600/MNP@#",
+"@#CONNECT 57600/NONE@#",
+"@#CONNECT 57600/NOR@#",
+"@#CONNECT 57600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 57600/REL-LAPM@#",
+"@#CONNECT 57600/REL-V.42@#",
+"@#CONNECT 57600/REL COMP@#",
+"@#CONNECT 57600/REL/COMP@#",
+"@#CONNECT 57600/REL@#",
+"@#CONNECT 57600/V42@#",
+"@#CONNECT 57600/V42BIS@#",
+"@#CONNECT 57600@#",
+"@#CONNECT 57600@#@#@#*@#COM@#",
+"@#CONNECT 57600T/V42BIS@#",
+"@#CONNECT 600 ALT / MNP5@#",
+"@#CONNECT 600 ALT /MNP 5@#",
+"@#CONNECT 600 ALT@#",
+"@#CONNECT 600 EC/V42BIS@#",
+"@#CONNECT 600 EC@#",
+"@#CONNECT 600 LAPM / V.42bis@#",
+"@#CONNECT 600 LAPM /V.42bis@#",
+"@#CONNECT 600 LAPM@#",
+"@#CONNECT 600 REL/MNP5@#",
+"@#CONNECT 600 REL@#",
+"@#CONNECT 600/ARQ/MNP4@#",
+"@#CONNECT 600/ARQ/MNP5@#",
+"@#CONNECT 600/ARQ/V.42@#",
+"@#CONNECT 600/ARQ/V.42bis@#",
+"@#CONNECT 600/ARQ@#",
+"@#CONNECT 600/COMP@#",
+"@#CONNECT 600/LAP-M/COMPRESSION@#",
+"@#CONNECT 600/LAP-M@#",
+"@#CONNECT 600/LAPM/COMP@#",
+"@#CONNECT 600/LAPM@#",
+"@#CONNECT 600/MNP COMPRESSED@#",
+"@#CONNECT 600/MNP@#",
+"@#CONNECT 600/NONE@#",
+"@#CONNECT 600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 600/REL 1@# ",
+"@#CONNECT 600/REL 2@# ",
+"@#CONNECT 600/REL 3@# ",
+"@#CONNECT 600/REL 4@# ",
+"@#CONNECT 600/REL 5@# ",
+"@#CONNECT 600/REL COMPRESSED@#",
+"@#CONNECT 600/REL/COMP@#",
+"@#CONNECT 600/REL@#",
+"@#CONNECT 600/V42@#",
+"@#CONNECT 600/V42BIS@#",
+"@#CONNECT 600@#",
+"@#CONNECT 64000/ARQ/SLP /X.75/V42b@#",
+"@#CONNECT 64000/ARQ/SLP /X.75@#",
+"@#CONNECT 64000/MNP@#",
+"@#CONNECT 64000/REL@#",
+"@#CONNECT 64000/X.70 BTX@#",
+"@#CONNECT 64000/X.70NL@#",
+"@#CONNECT 64000/X.75@#",
+"@#CONNECT 64000@#",
+"@#CONNECT 7200 ALT / MNP5@#",
+"@#CONNECT 7200 ALT /MNP 5@#",
+"@#CONNECT 7200 ALT@#",
+"@#CONNECT 7200 EC/V42@#",
+"@#CONNECT 7200 EC/V42BIS@#",
+"@#CONNECT 7200 EC@#",
+"@#CONNECT 7200 LAPM / V.42bis@#",
+"@#CONNECT 7200 LAPM /V.42bis@#",
+"@#CONNECT 7200 LAPM COMPRESSED@#",
+"@#CONNECT 7200 LAPM@#",
+"@#CONNECT 7200 REL/MNP5@#",
+"@#CONNECT 7200 REL/V42@#",
+"@#CONNECT 7200 REL/V42BIS@#",
+"@#CONNECT 7200 REL@#",
+"@#CONNECT 7200 RELIABLE@#",
+"@#CONNECT 7200/ARQ/CELL /MNP4@#",
+"@#CONNECT 7200/ARQ/CELL /MNP5@#",
+"@#CONNECT 7200/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/CELL /V42 @#",
+"@#CONNECT 7200/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/CELL /V42b@#",
+"@#CONNECT 7200/ARQ/CELL/MNP4@#",
+"@#CONNECT 7200/ARQ/CELL/MNP5@#",
+"@#CONNECT 7200/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/CELL/V42 @#",
+"@#CONNECT 7200/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/CELL/V42b@#",
+"@#CONNECT 7200/ARQ/MNP4@#",
+"@#CONNECT 7200/ARQ/MNP5@#",
+"@#CONNECT 7200/ARQ/V.34/MNP4@#",
+"@#CONNECT 7200/ARQ/V.34/MNP5@#",
+"@#CONNECT 7200/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V.34/V42 @#",
+"@#CONNECT 7200/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V.34/V42b@#",
+"@#CONNECT 7200/ARQ/V.42@#",
+"@#CONNECT 7200/ARQ/V.42bis@#",
+"@#CONNECT 7200/ARQ/V32 /MNP4@#",
+"@#CONNECT 7200/ARQ/V32 /MNP5@#",
+"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42 @#",
+"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42b@#",
+"@#CONNECT 7200/ARQ/V32 /MNP4@#",
+"@#CONNECT 7200/ARQ/V32 /MNP5@#",
+"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42 @#",
+"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32 /V42b@#",
+"@#CONNECT 7200/ARQ/V32b /MNP4@#",
+"@#CONNECT 7200/ARQ/V32b /MNP5@#",
+"@#CONNECT 7200/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32b /V42 @#",
+"@#CONNECT 7200/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32b /V42b@#",
+"@#CONNECT 7200/ARQ/V32b/MNP4@#",
+"@#CONNECT 7200/ARQ/V32b/MNP5@#",
+"@#CONNECT 7200/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V32b/V42 @#",
+"@#CONNECT 7200/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V32b/V42b@#",
+"@#CONNECT 7200/ARQ/V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/V42 @#",
+"@#CONNECT 7200/ARQ/V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/V42b@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 @#",
+"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42b@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP4@#",
+"@#CONNECT 7200/ARQ/ZyX /MNP5@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42 @#",
+"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 7200/ARQ/ZyX /V42b@#",
+"@#CONNECT 7200/ARQ@#",
+"@#CONNECT 7200/COMP@#",
+"@#CONNECT 7200/LAP-M/COMPRESSION@#",
+"@#CONNECT 7200/LAP-M@#",
+"@#CONNECT 7200/LAPM/COMP@#",
+"@#CONNECT 7200/LAPM/V42BIS@#",
+"@#CONNECT 7200/LAPM@#",
+"@#CONNECT 7200/MNP COMPRESSED@#",
+"@#CONNECT 7200/MNP@#",
+"@#CONNECT 7200/NONE@#",
+"@#CONNECT 7200/NOR@#",
+"@#CONNECT 7200/REL-LAPM-COMP@#",
+"@#CONNECT 7200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 7200/REL-LAPM@#",
+"@#CONNECT 7200/REL-MNP-COMP@#",
+"@#CONNECT 7200/REL-MNP@#",
+"@#CONNECT 7200/REL-V.42@#",
+"@#CONNECT 7200/REL 1@# ",
+"@#CONNECT 7200/REL 2@# ",
+"@#CONNECT 7200/REL 3@# ",
+"@#CONNECT 7200/REL 4@# ",
+"@#CONNECT 7200/REL 5@# ",
+"@#CONNECT 7200/REL COMP@#",
+"@#CONNECT 7200/REL/COMP@#",
+"@#CONNECT 7200/REL@#",
+"@#CONNECT 7200/RELC@#",
+"@#CONNECT 7200/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 7200/RELIABLE/LAPM@#",
+"@#CONNECT 7200/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 7200/RELIABLE/MNP@#",
+"@#CONNECT 7200/V42@#",
+"@#CONNECT 7200/V42B@#",
+"@#CONNECT 7200/V42BIS@#",
+"@#CONNECT 7200@#",
+"@#CONNECT 7200T/V42BIS@#",
+"@#CONNECT 7400/ARQ/V.34/MNP4@#",
+"@#CONNECT 7400/ARQ/V.34/MNP5@#",
+"@#CONNECT 7400/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 7400/ARQ/V.34/V42 @#",
+"@#CONNECT 7400/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 7400/ARQ/V.34/V42b@#",
+"@#CONNECT 7400@#",
+"@#CONNECT 75/1200",
+"@#CONNECT 75/1200/ARQ@#",
+"@#CONNECT 75/1200/LAP-M/COMPRESSION@#",
+"@#CONNECT 75/1200/LAP-M@#",
+"@#CONNECT 75/1200/LAPM/COMP@#",
+"@#CONNECT 75/1200/LAPM@#",
+"@#CONNECT 75/1200/MNP@#",
+"@#CONNECT 75/1200/NONE@#",
+"@#CONNECT 75/1200/REL-LAPM V.42 BIS@#",
+"@#CONNECT 75/1200/REL/COMP@#",
+"@#CONNECT 75/1200/REL@#",
+"@#CONNECT 75/1200/REL#",
+"@#CONNECT 75/1200/V42@#",
+"@#CONNECT 75/1200/V42BIS@#",
+"@#CONNECT 75/1200@#",
+"@#CONNECT 75TX/1200RX REL/MNP5@#",
+"@#CONNECT 75TX/1200RX REL@#",
+"@#CONNECT 75TX/1200RX/ARQ@#",
+"@#CONNECT 75TX/1200RX/LAP-M/COMPRESSION@#",
+"@#CONNECT 75TX/1200RX/LAP-M@#",
+"@#CONNECT 75TX/1200RX/LAPM/COMP@#",
+"@#CONNECT 75TX/1200RX/LAPM@#",
+"@#CONNECT 75TX/1200RX/MNP@#",
+"@#CONNECT 75TX/1200RX/NONE@#",
+"@#CONNECT 75TX/1200RX/REL-LAPM V.42 BIS@#",
+"@#CONNECT 75TX/1200RX/REL/COMP@#",
+"@#CONNECT 75TX/1200RX/REL@#",
+"@#CONNECT 75TX/1200RX/V42@#",
+"@#CONNECT 75TX/1200RX/V42BIS@#",
+"@#CONNECT 75TX/1200RX@#",
+"@#CONNECT 76800/ARQ/V42 /SREJ@#",
+"@#CONNECT 76800/ARQ/V42 @#",
+"@#CONNECT 76800/ARQ/V42b@#",
+"@#CONNECT 76800@#",
+"@#CONNECT 9600 ALT / MNP5@#",
+"@#CONNECT 9600 ALT /MNP 5@#",
+"@#CONNECT 9600 ALT@#",
+"@#CONNECT 9600 EC/V42@#",
+"@#CONNECT 9600 EC/V42BIS@#",
+"@#CONNECT 9600 EC@#",
+"@#CONNECT 9600 LAPM / V.42bis@#",
+"@#CONNECT 9600 LAPM /V.42bis@#",
+"@#CONNECT 9600 LAPM COMPRESSED@#",
+"@#CONNECT 9600 LAPM@#",
+"@#CONNECT 9600 NORMAL@#",
+"@#CONNECT 9600 REL/MNP5@#",
+"@#CONNECT 9600 REL/V42@#",
+"@#CONNECT 9600 REL/V42BIS@#",
+"@#CONNECT 9600 REL@#",
+"@#CONNECT 9600 RELIABLE COMPRESSED@#",
+"@#CONNECT 9600 RELIABLE@#",
+"@#CONNECT 9600 V.42@#",
+"@#CONNECT 9600/ARQ/CELL /MNP4@#",
+"@#CONNECT 9600/ARQ/CELL /MNP5@#",
+"@#CONNECT 9600/ARQ/CELL /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/CELL /V42 @#",
+"@#CONNECT 9600/ARQ/CELL /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/CELL /V42b@#",
+"@#CONNECT 9600/ARQ/CELL/MNP4@#",
+"@#CONNECT 9600/ARQ/CELL/MNP5@#",
+"@#CONNECT 9600/ARQ/CELL/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/CELL/V42 @#",
+"@#CONNECT 9600/ARQ/CELL/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/CELL/V42b@#",
+"@#CONNECT 9600/ARQ/MNP4@#",
+"@#CONNECT 9600/ARQ/MNP5@#",
+"@#CONNECT 9600/ARQ/V.34/MNP4@#",
+"@#CONNECT 9600/ARQ/V.34/MNP5@#",
+"@#CONNECT 9600/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V.34/V42 @#",
+"@#CONNECT 9600/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V.34/V42b@#",
+"@#CONNECT 9600/ARQ/V.42@#",
+"@#CONNECT 9600/ARQ/V.42bis@#",
+"@#CONNECT 9600/ARQ/V32 /MNP4@#",
+"@#CONNECT 9600/ARQ/V32 /MNP5@#",
+"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42 @#",
+"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42b@#",
+"@#CONNECT 9600/ARQ/V32 /MNP4@#",
+"@#CONNECT 9600/ARQ/V32 /MNP5@#",
+"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42 @#",
+"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32 /V42b@#",
+"@#CONNECT 9600/ARQ/V32b /MNP4@#",
+"@#CONNECT 9600/ARQ/V32b /MNP5@#",
+"@#CONNECT 9600/ARQ/V32b /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32b /V42 @#",
+"@#CONNECT 9600/ARQ/V32b /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32b /V42b@#",
+"@#CONNECT 9600/ARQ/V32b/MNP4@#",
+"@#CONNECT 9600/ARQ/V32b/MNP5@#",
+"@#CONNECT 9600/ARQ/V32b/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V32b/V42 @#",
+"@#CONNECT 9600/ARQ/V32b/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V32b/V42b@#",
+"@#CONNECT 9600/ARQ/V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/V42 @#",
+"@#CONNECT 9600/ARQ/V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/V42b@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP4@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP5@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 @#",
+"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42b@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP4@#",
+"@#CONNECT 9600/ARQ/ZyX /MNP5@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42 @#",
+"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#",
+"@#CONNECT 9600/ARQ/ZyX /V42b@#",
+"@#CONNECT 9600/ARQ@#",
+"@#CONNECT 9600/COMP@#",
+"@#CONNECT 9600/LAP-M/COMPRESSION@#",
+"@#CONNECT 9600/LAP-M@#",
+"@#CONNECT 9600/LAPM/COMP@#",
+"@#CONNECT 9600/LAPM/V42BIS@#",
+"@#CONNECT 9600/LAPM@#",
+"@#CONNECT 9600/MNP COMPRESSED@#",
+"@#CONNECT 9600/MNP@#",
+"@#CONNECT 9600/NONE@#",
+"@#CONNECT 9600/NOR@#",
+"@#CONNECT 9600/REL-LAPM-COMP@#",
+"@#CONNECT 9600/REL-LAPM V.42 BIS@#",
+"@#CONNECT 9600/REL-LAPM@#",
+"@#CONNECT 9600/REL-MNP-COMP@#",
+"@#CONNECT 9600/REL-MNP@#",
+"@#CONNECT 9600/REL-V.42@#",
+"@#CONNECT 9600/REL 1@# ",
+"@#CONNECT 9600/REL 2@# ",
+"@#CONNECT 9600/REL 3@# ",
+"@#CONNECT 9600/REL 4@# ",
+"@#CONNECT 9600/REL 5@# ",
+"@#CONNECT 9600/REL COMP@#",
+"@#CONNECT 9600/REL COMPRESSED@#",
+"@#CONNECT 9600/REL/COMP@#",
+"@#CONNECT 9600/REL@#",
+"@#CONNECT 9600/RELC@#",
+"@#CONNECT 9600/RELIABLE/LAPM/COMPRESSED@#",
+"@#CONNECT 9600/RELIABLE/LAPM@#",
+"@#CONNECT 9600/RELIABLE/MNP/COMPRESSED@#",
+"@#CONNECT 9600/RELIABLE/MNP@#",
+"@#CONNECT 9600/V.110@#",
+"@#CONNECT 9600/V42@#",
+"@#CONNECT 9600/V42B@#",
+"@#CONNECT 9600/V42BIS@#",
+"@#CONNECT 9600@#",
+"@#CONNECT 9600T RELIABLE@#",
+"@#CONNECT 9600T V.42@#",
+"@#CONNECT 9600T/V42BIS@#",
+"@#CONNECT 9800/ARQ/V.34/MNP4@#",
+"@#CONNECT 9800/ARQ/V.34/MNP5@#",
+"@#CONNECT 9800/ARQ/V.34/V42 /SREJ@#",
+"@#CONNECT 9800/ARQ/V.34/V42 @#",
+"@#CONNECT 9800/ARQ/V.34/V42b/SREJ@#",
+"@#CONNECT 9800/ARQ/V.34/V42b@#",
+"@#CONNECT 9800@#",
+"@#CONNECT EC@#",
+"@#CONNECT FAST@#",
+"@#CONNECT LAPM COMPRESSED@#",
+"@#CONNECT LAPM@#",
+"@#CONNECT REL/MNP5@#",
+"@#CONNECT REL@#",
+"@#CONNECT RELIABLE COMPRESSED@#",
+"@#CONNECT RELIABLE@#",
+"@#CONNECT V.21/REL@#",
+"@#CONNECT/ARQ@#",
+"@#CONNECT/LAP-M/COMPRESSION@#",
+"@#CONNECT/LAP-M@#",
+"@#CONNECT/LAPM/COMP@#",
+"@#CONNECT/LAPM@#",
+"@#CONNECT/MNP@#",
+"@#CONNECT/NONE@#",
+"@#CONNECT/REL/COMP@#",
+"@#CONNECT/REL@#",
+"@#CONNECT/V42@#",
+"@#CONNECT/V42BIS@#",
+"@#CONNECT@#",
+"@#DALAYED@#",
+"@#DATA@#",
+"@#DATE = ",
+"@#DELAYED",
+"@#Delayed@#",
+"@#DELAYED@#",
+"@#Delayed@#",
+"@#DELAYED@#",
+"@#DIALING@#",
+"@#DISCONNECT@#",
+"@#Don't use this command at this situation @#",
+"@#ERROR SERIAL SPEED SETUP@#",
+"@#ERROR@#",
+"@#FAX@#",
+"@#LIB DER 00@#",
+"@#LOCKED@#",
+"@#NO ANSWER@#",
+"@#NO CARRIER@#",
+"@#NO DIAL TONE@#",
+"@#NO DIALTONE@#",
+"@#NO USER RESPONDING@#",
+"@#NOTUSED@#",
+"@#NUMBER DELAYED:TIMER@#",
+"@#NUMBER LOCKED OUT@#",
+"@#OFF HOOK@#",
+"@#OK@#",
+"@#PROTOCOL: ALT-+FCERROR@#",
+"@#PROTOCOL: ALT-CELLULAR@#",
+"@#PROTOCOL: ALT-DATA@#",
+"@#PROTOCOL: ALT-FAX@#",
+"@#PROTOCOL: ALT - CELLULAR@#",
+"@#PROTOCOL: ALT CELLULAR@#",
+"@#PROTOCOL: ALT@#",
+"@#PROTOCOL: ERROR-CONTROL/LAP-B@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB/AFT@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB/HDX@#",
+"@#PROTOCOL: ERROR-CONTROL/LAPB@#",
+"@#PROTOCOL: LAP-M/AFT@#",
+"@#PROTOCOL: LAP-M/HDX@#",
+"@#PROTOCOL: LAP-M@#",
+"@#PROTOCOL: LAP_M@#",
+"@#PROTOCOL: LAPM/AFT@#",
+"@#PROTOCOL: LAPM/HDX@#",
+"@#PROTOCOL: LAPM@#",
+"@#PROTOCOL: MNP 3,4@#",
+"@#PROTOCOL: MNP ALT@#",
+"@#PROTOCOL: MNP REL 1@#",
+"@#PROTOCOL: MNP REL 2@#",
+"@#PROTOCOL: MNP REL 3@#",
+"@#PROTOCOL: MNP REL 4@#",
+"@#PROTOCOL: MNP REL 5@#",
+"@#PROTOCOL: MNP REL@#",
+"@#PROTOCOL: MNP@#",
+"@#PROTOCOL: MNP1@#",
+"@#PROTOCOL: MNP2@#",
+"@#PROTOCOL: MNP3@#",
+"@#PROTOCOL: MNP4@#",
+"@#PROTOCOL: NONE@#",
+"@#PROTOCOL: PAD@#",
+"@#PROTOCOL: V.42BIS@#",
+"@#PROTOCOL: V42@#",
+"@#PROTOCOL: V42BIS@#",
+"@#PROTOCOL: X.25/LAPB/AFT@#",
+"@#PROTOCOL: X.25/LAPB/HDX@#",
+"@#PROTOCOL: X.25/LAPB@#",
+"@#PROTOCOL:ALT-+FCERROR@#",
+"@#PROTOCOL:ALT-CELLULAR@#",
+"@#PROTOCOL:ALT-DATA@#",
+"@#PROTOCOL:ALT-FAX@#",
+"@#PROTOCOL:ALT@#",
+"@#PROTOCOL:LAP-M@#",
+"@#PROTOCOL:LAPM@#",
+"@#PROTOCOL:MNP@#",
+"@#PROTOCOL:MNP2@#",
+"@#PROTOCOL:MNP3@#",
+"@#PROTOCOL:MNP4@#",
+"@#PROTOCOL:NONE@#",
+"@#PROTOCOL:V.42BIS@#",
+"@#PROTOCOL:V42BIS@#",
+"@#RING@#",
+"@#RING1@#",
+"@#RING2@#",
+"@#RING3@#",
+"@#RINGING@#",
+"@#RRING@#",
+"@#TEST FAILED@#",
+"@#TEST PASSED@#",
+"@#VCON@#",
+"@#VOICE@#",
+"@#Wait 5 seconds,then dial@#",
+"@OK#",
+"<ff>@",
+"<ff>@@#OK@#",
+"<h00>CLIENT",
+"#",
+"0@",
+"0<CR>",
+"0@",
+"00@",
+"01@",
+"02@",
+"03@",
+"04@",
+"05@",
+"06@",
+"07@",
+"08@",
+"1<CR>",
+"1@",
+"10@",
+"10<CR>",
+"10@",
+"10@#",
+"10@66@",
+"10@67@",
+"10@69@",
+"100@",
+"101@",
+"102@",
+"103@",
+"104@",
+"105@",
+"10L@#",
+"10LC@#",
+"10R@#",
+"10RC@#",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11<CR>",
+"11@",
+"11@#",
+"11@66@",
+"11@67@",
+"11@69@",
+"111@",
+"112@",
+"113@",
+"114@",
+"115@",
+"116@",
+"117@",
+"118@",
+"119@",
+"11L@#",
+"11LC@#",
+"11R@#",
+"11RC@#",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12<CR>",
+"12@",
+"12@#",
+"12@66@",
+"12@67@",
+"12@69@",
+"120@",
+"121@",
+"122@",
+"123@",
+"124@",
+"125@",
+"126@",
+"127@",
+"128@",
+"129@",
+"12L@#",
+"12LC@#",
+"12R@#",
+"12RC@#",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@",
+"13<CR>",
+"13@#",
+"13@66@",
+"13@67@",
+"13@69@",
+"13L@#",
+"13LC@#",
+"13R@#",
+"13RC@#",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@",
+"14<CR>",
+"14@66@",
+"14@67@",
+"14@69@",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15<CR>",
+"15@",
+"15@66@",
+"15@67@",
+"15@69@",
+"16@",
+"16<CR>",
+"16@",
+"16@66@",
+"16@67@",
+"16@69@",
+"17@",
+"18@",
+"18<CR>",
+"18@",
+"19@",
+"19@#",
+"19L@#",
+"19LC@#",
+"19R@#",
+"19RC@#",
+"1L@#",
+"1LC@#",
+"1R@#",
+"1RC@#",
+"2@",
+"2<CR>",
+"2@",
+"20@",
+"21@",
+"21@#",
+"21L@#",
+"21LC@#",
+"21R@#",
+"21RC@#",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"22<CR>",
+"22@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"23<CR>",
+"23@",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24<CR>",
+"24@",
+"24@#",
+"24L@#",
+"24LC@#",
+"24R@#",
+"24RC@#",
+"25@",
+"25<CR>",
+"25@",
+"25<CR>",
+"25@",
+"25<CR>",
+"26<CR>",
+"26@",
+"26<CR>",
+"26@",
+"26<CR>",
+"26@",
+"26@#",
+"26L@#",
+"26LC@#",
+"26R@#",
+"26RC<cR>#",
+"27@",
+"28@",
+"28<CR>",
+"28@",
+"28<CR>",
+"28@",
+"28<CR>",
+"28@",
+"28@#",
+"28L@#",
+"28LC@#",
+"28R@#",
+"28RC@#",
+"29@",
+"29<CR>",
+"29@",
+"3@",
+"3<CR>",
+"3@",
+"30@",
+"31@",
+"31<CR>",
+"31@",
+"32@",
+"33@",
+"34<CR>",
+"34@",
+"35@",
+"36@",
+"36<CR>",
+"36@",
+"37@",
+"37<CR>",
+"37@",
+"38<CR>",
+"38@",
+"39@",
+"4@",
+"4<CR>",
+"4@",
+"40@",
+"40<CR>",
+"40@",
+"40@70@01@",
+"40@70@66@01@",
+"40@70@67@01@",
+"40@70@69@01@",
+"40@77@01@",
+"40@77@66@01@",
+"40@77@67@01@",
+"40@77@69@01@",
+"40@80@01@",
+"40@80@66@01@",
+"40@80@67@01@",
+"40@80@69@01@",
+"40@81@01@",
+"40@81@66@01@",
+"40@81@67@01@",
+"40@81@69@01@",
+"41@",
+"42@",
+"43@",
+"44@",
+"44<CR>",
+"44@",
+"44@70@05@",
+"44@70@66@05@",
+"44@70@67@05@",
+"44@70@69@05@",
+"44@77@05@",
+"44@77@66@05@",
+"44@77@67@05@",
+"44@77@69@05@",
+"44@80@05@",
+"44@80@66@05@",
+"44@80@67@05@",
+"44@80@69@05@",
+"44@81@05@",
+"44@81@66@05@",
+"44@81@67@05@",
+"44@81@69@05@",
+"45@",
+"45<CR>",
+"45@",
+"45@70@05@",
+"45@70@66@05@",
+"45@70@67@05@",
+"45@70@69@05@",
+"45@77@05@",
+"45@77@66@05@",
+"45@77@67@05@",
+"45@77@69@05@",
+"45@80@05@",
+"45@80@66@05@",
+"45@80@67@05@",
+"45@80@69@05@",
+"45@81@05@",
+"45@81@66@05@",
+"45@81@67@05@",
+"45@81@69@05@",
+"46@",
+"46<CR>",
+"46@",
+"46@70@05@",
+"46@70@66@05@",
+"46@70@67@05@",
+"46@70@69@05@",
+"46@77@05@",
+"46@77@66@05@",
+"46@77@67@05@",
+"46@77@69@05@",
+"46@80@05@",
+"46@80@66@05@",
+"46@80@67@05@",
+"46@80@69@05@",
+"46@81@05@",
+"46@81@66@05@",
+"46@81@67@05@",
+"46@81@69@05@",
+"47@",
+"47<CR>",
+"47@",
+"47@70@10@",
+"47@70@66@10@",
+"47@70@67@10@",
+"47@70@69@10@",
+"47@77@10@",
+"47@77@66@10@",
+"47@77@67@10@",
+"47@77@69@10@",
+"47@80@10@",
+"47@80@66@10@",
+"47@80@67@10@",
+"47@80@69@10@",
+"47@81@10@",
+"47@81@66@10@",
+"47@81@67@10@",
+"47@81@69@10@",
+"48@",
+"48<CR>",
+"48@",
+"48@70@11@",
+"48@70@66@11@",
+"48@70@67@11@",
+"48@70@69@11@",
+"48@77@11@",
+"48@77@66@11@",
+"48@77@67@11@",
+"48@77@69@11@",
+"48@80@11@",
+"48@80@66@11@",
+"48@80@67@11@",
+"48@80@69@11@",
+"48@81@11@",
+"48@81@66@11@",
+"48@81@67@11@",
+"48@81@69@11@",
+"49@",
+"49<CR>",
+"49@",
+"49@70@13@",
+"49@70@66@13@",
+"49@70@67@13@",
+"49@70@69@13@",
+"49@77@13@",
+"49@77@66@13@",
+"49@77@67@13@",
+"49@77@69@13@",
+"49@80@13@",
+"49@80@66@13@",
+"49@80@67@13@",
+"49@80@69@13@",
+"49@81@13@",
+"49@81@66@13@",
+"49@81@67@13@",
+"49@81@69@13@",
+"5@",
+"5<CR>",
+"5@",
+"5@66@",
+"5@67@",
+"5@69@",
+"50@",
+"50<CR>",
+"50@",
+"50@70@12@",
+"50@70@66@12@",
+"50@70@67@12@",
+"50@70@69@12@",
+"50@77@12@",
+"50@77@66@12@",
+"50@77@67@12@",
+"50@77@69@12@",
+"50@80@12@",
+"50@80@66@12@",
+"50@80@67@12@",
+"50@80@69@12@",
+"50@81@12@",
+"50@81@66@12@",
+"50@81@67@12@",
+"50@81@69@12@",
+"51@",
+"51<CR>",
+"51@",
+"51@70@14@",
+"51@70@66@14@",
+"51@70@67@14@",
+"51@70@69@14@",
+"51@77@14@",
+"51@77@66@14@",
+"51@77@67@14@",
+"51@77@69@14@",
+"51@80@14@",
+"51@80@66@14@",
+"51@80@67@14@",
+"51@80@69@14@",
+"51@81@14@",
+"51@81@66@14@",
+"51@81@67@14@",
+"51@81@69@14@",
+"52@",
+"52<CR>",
+"52@",
+"52@70@15@",
+"52@70@66@15@",
+"52@70@67@15@",
+"52@70@69@15@",
+"52@77@15@",
+"52@77@66@15@",
+"52@77@67@15@",
+"52@77@69@15@",
+"52@80@15@",
+"52@80@66@15@",
+"52@80@67@15@",
+"52@80@69@15@",
+"52@81@15@",
+"52@81@66@15@",
+"52@81@67@15@",
+"52@81@69@15@",
+"53@",
+"53<CR>",
+"53@",
+"53@70@59@",
+"53@70@66@59@",
+"53@70@67@59@",
+"53@70@69@59@",
+"53@77@59@",
+"53@77@66@59@",
+"53@77@67@59@",
+"53@77@69@59@",
+"53@80@59@",
+"53@80@66@59@",
+"53@80@67@59@",
+"53@80@69@59@",
+"53@81@59@",
+"53@81@66@59@",
+"53@81@67@59@",
+"53@81@69@59@",
+"54@",
+"54<CR>",
+"54@70@16@",
+"54@70@66@16@",
+"54@70@67@16@",
+"54@70@69@16@",
+"54@77@16@",
+"54@77@66@16@",
+"54@77@67@16@",
+"54@77@69@16@",
+"54@80@16@",
+"54@80@66@16@",
+"54@80@67@16@",
+"54@80@69@16@",
+"54@81@16@",
+"54@81@66@16@",
+"54@81@67@16@",
+"54@81@69@16@",
+"55@",
+"55<CR>",
+"55@",
+"55@70@61@",
+"55@70@66@61@",
+"55@70@67@61@",
+"55@70@69@61@",
+"55@77@61@",
+"55@77@66@61@",
+"55@77@67@61@",
+"55@77@69@61@",
+"55@80@61@",
+"55@80@66@61@",
+"55@80@67@61@",
+"55@80@69@61@",
+"55@81@61@",
+"55@81@66@61@",
+"55@81@67@61@",
+"55@81@69@61@",
+"56@",
+"56@70@62@",
+"56@70@66@62@",
+"56@70@67@62@",
+"56@70@69@62@",
+"56@77@62@",
+"56@77@66@62@",
+"56@77@67@62@",
+"56@77@69@62@",
+"56@80@62@",
+"56@80@66@62@",
+"56@80@67@62@",
+"56@80@69@62@",
+"56@81@62@",
+"56@81@66@62@",
+"56@81@67@62@",
+"56@81@69@62@",
+"57@",
+"57@70@63@",
+"57@70@66@63@",
+"57@70@67@63@",
+"57@70@69@63@",
+"57@77@63@",
+"57@77@66@63@",
+"57@77@67@63@",
+"57@77@69@63@",
+"57@80@63@",
+"57@80@66@63@",
+"57@80@67@63@",
+"57@80@69@63@",
+"57@81@63@",
+"57@81@66@63@",
+"57@81@67@63@",
+"57@81@69@63@",
+"58@",
+"58@70@64@",
+"58@70@66@64@",
+"58@70@67@64@",
+"58@70@69@64@",
+"58@77@64@",
+"58@77@66@64@",
+"58@77@67@64@",
+"58@77@69@64@",
+"58@80@64@",
+"58@80@66@64@",
+"58@80@67@64@",
+"58@80@69@64@",
+"58@81@64@",
+"58@81@66@64@",
+"58@81@67@64@",
+"58@81@69@64@",
+"59@",
+"5L@#",
+"5LC@#",
+"5R@#",
+"5RC@#",
+"6@",
+"6<CR>",
+"6@",
+"60@",
+"60<CR>",
+"60@",
+"61@",
+"62@",
+"63@",
+"63@66@",
+"63@67@",
+"63@69@",
+"64@",
+"64@66@",
+"64@67@",
+"64@69@",
+"65@",
+"66@",
+"66<CR>",
+"66@",
+"67@",
+"67<CR>",
+"67@",
+"68@",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"69<CR>",
+"69@",
+"7@",
+"7<CR>",
+"7@",
+"70@",
+"70<CR>",
+"70@",
+"71@",
+"72@",
+"73@",
+"74@",
+"75@",
+"76@",
+"77@",
+"77<CR>",
+"77@",
+"78@",
+"79@",
+"8@",
+"8<CR>",
+"8@",
+"80@",
+"80<CR>",
+"80@",
+"81@",
+"82@",
+"83@",
+"84@",
+"85@",
+"86@",
+"87@",
+"88@",
+"89@",
+"9@",
+"9<CR>",
+"9@",
+"9@#",
+"90@",
+"91@",
+"92@",
+"93@",
+"94@",
+"95@",
+"96@",
+"97@",
+"98@",
+"99@",
+"9L@#",
+"9LC@#",
+"9R@#",
+"9RC@#",
+"ATE0V0",
+"AUTOSTREAM: LEVEL 1",
+"AUTOSTREAM: LEVEL 2",
+"AUTOSTREAM: LEVEL 3",
+"BLACKLISTED",
+"BUSY",
+"CARRIER",
+"CARRIER 0300",
+"CARRIER 1200",
+"CARRIER 1200/75",
+"CARRIER 1200/75/VFC",
+"CARRIER 1200/VFC",
+"CARRIER 12000",
+"CARRIER 12000/VFC",
+"CARRIER 14400",
+"CARRIER 14400/VFC",
+"CARRIER 16800",
+"CARRIER 16800 V.34",
+"CARRIER 16800/VFC",
+"CARRIER 19200",
+"CARRIER 19200 V.34",
+"CARRIER 19200/VFC",
+"CARRIER 21600",
+"CARRIER 21600 V.34",
+"CARRIER 21600/VFC",
+"CARRIER 2400",
+"CARRIER 2400/VFC",
+"CARRIER 24000",
+"CARRIER 24000 V.34",
+"CARRIER 24000/VFC",
+"CARRIER 26400",
+"CARRIER 26400 V.34",
+"CARRIER 26400/VFC",
+"CARRIER 28800",
+"CARRIER 28800 V.34",
+"CARRIER 28800/VFC",
+"CARRIER 300",
+"CARRIER 300/VFC",
+"CARRIER 4800",
+"CARRIER 4800/VFC",
+"CARRIER 7200",
+"CARRIER 7200/VFC",
+"CARRIER 75/1200",
+"CARRIER 75/1200/VFC",
+"CARRIER 9600",
+"CARRIER 9600/VFC",
+"CLIENT",
+"CLIENTSERVER",
+"COMPRESSION: ADC",
+"COMPRESSION: CLASS 5",
+"COMPRESSION: CLASS5",
+"COMPRESSION: MNP5",
+"COMPRESSION: NONE",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42 bis",
+"COMPRESSION: V.42 BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V.42bis",
+"COMPRESSION: V.42BIS",
+"COMPRESSION: V42BIS",
+"COMPRESSION:CLASS5",
+"COMPRESSION:MNP5",
+"COMPRESSION:NONE",
+"COMPRESSION:V.42bis",
+"CONNECT",
+"CONNECT 0300",
+"CONNECT 0300/ARQ",
+"CONNECT 0300/LAP-M",
+"CONNECT 0300/MNP",
+"CONNECT 0300/REL",
+"CONNECT 0300/REL-5",
+"CONNECT 0300/REL-LAPM",
+"CONNECT 0300/REL-LAPM-COMP",
+"CONNECT 0300/REL-MNP",
+"CONNECT 0300/REL-MNP-COMP",
+"CONNECT 0300/REL-V.42",
+"CONNECT 0300/V42b",
+"CONNECT 0300/V42BIS",
+"CONNECT 0600",
+"CONNECT 0600/ARQ",
+"CONNECT 0600/LAP-M",
+"CONNECT 0600/LAPM",
+"CONNECT 0600/MNP",
+"CONNECT 0600/NONE",
+"CONNECT 0600/REL",
+"CONNECT 0600/REL-5",
+"CONNECT 0600/REL-LAPM",
+"CONNECT 0600/REL-LAPM-COMP",
+"CONNECT 0600/REL-MNP",
+"CONNECT 0600/REL-MNP-COMP",
+"CONNECT 0600/REL-V.42",
+"CONNECT 0600/V42",
+"CONNECT 0600/V42b",
+"CONNECT 0600/V42BIS",
+"CONNECT 115,200",
+"CONNECT 115,200/ARQ",
+"CONNECT 115,200/LAP-M",
+"CONNECT 115,200/MNP",
+"CONNECT 115,200/NONE",
+"CONNECT 115,200/REL",
+"CONNECT 115,200/REL-5",
+"CONNECT 115,200/REL-V.42",
+"CONNECT 115,200/V42",
+"CONNECT 115,200/V42b",
+"CONNECT 115,200/V42BIS",
+"CONNECT 115200",
+"CONNECT 115200/ARQ",
+"CONNECT 115200/LAP-M",
+"CONNECT 115200/LAPM",
+"CONNECT 115200/MNP",
+"CONNECT 115200/NONE",
+"CONNECT 115200/REL",
+"CONNECT 115200/REL-5",
+"CONNECT 115200/REL-LAPM",
+"CONNECT 115200/REL-LAPM-COMP",
+"CONNECT 115200/REL-MNP",
+"CONNECT 115200/REL-MNP-COMP",
+"CONNECT 115200/REL-V.42",
+"CONNECT 115200/REL/VFC",
+"CONNECT 115200/V42",
+"CONNECT 115200/V42b",
+"CONNECT 115200/V42BIS",
+"CONNECT 115200/VFC",
+"CONNECT 1200",
+"CONNECT 1200/75",
+"CONNECT 1200/75/ARQ",
+"CONNECT 1200/75/LAP-M",
+"CONNECT 1200/75/LAPM",
+"CONNECT 1200/75/MNP",
+"CONNECT 1200/75/NONE",
+"CONNECT 1200/75/REL",
+"CONNECT 1200/75/REL-5",
+"CONNECT 1200/75/REL-LAPM",
+"CONNECT 1200/75/REL-LAPM-COMP",
+"CONNECT 1200/75/REL-MNP",
+"CONNECT 1200/75/REL-MNP-COMP",
+"CONNECT 1200/75/REL-V.42",
+"CONNECT 1200/75/V42",
+"CONNECT 1200/75/V42b",
+"CONNECT 1200/75/V42BIS",
+"CONNECT 1200/ARQ",
+"CONNECT 1200/ECL",
+"CONNECT 1200/ECLC",
+"CONNECT 1200/LAP-M",
+"CONNECT 1200/LAPM",
+"CONNECT 1200/MNP",
+"CONNECT 1200/NONE",
+"CONNECT 1200/REL",
+"CONNECT 1200/REL-5",
+"CONNECT 1200/REL-LAPM",
+"CONNECT 1200/REL-LAPM-COMP",
+"CONNECT 1200/REL-LAPM V.42 BIS",
+"CONNECT 1200/REL-MNP",
+"CONNECT 1200/REL-MNP-COMP",
+"CONNECT 1200/REL-MNP 5",
+"CONNECT 1200/REL-V.42",
+"CONNECT 1200/V42",
+"CONNECT 1200/V42b",
+"CONNECT 1200/V42BIS",
+"CONNECT 12000",
+"CONNECT 12000/ARQ",
+"CONNECT 12000/ECL",
+"CONNECT 12000/ECLC",
+"CONNECT 12000/LAP-M",
+"CONNECT 12000/LAPM",
+"CONNECT 12000/MNP",
+"CONNECT 12000/NONE",
+"CONNECT 12000/REL",
+"CONNECT 12000/REL-5",
+"CONNECT 12000/REL-LAPM",
+"CONNECT 12000/REL-LAPM-COMP",
+"CONNECT 12000/REL-LAPM V.42 BIS",
+"CONNECT 12000/REL-MNP",
+"CONNECT 12000/REL-MNP-COMP",
+"CONNECT 12000/REL-MNP 5",
+"CONNECT 12000/REL-V.42",
+"CONNECT 12000/V42",
+"CONNECT 12000/V42b",
+"CONNECT 12000/V42BIS",
+"CONNECT 1200TX/75RX",
+"CONNECT 1200TX/75RX/ARQ",
+"CONNECT 1200TX/75RX/LAP-M",
+"CONNECT 1200TX/75RX/LAPM",
+"CONNECT 1200TX/75RX/MNP",
+"CONNECT 1200TX/75RX/NONE",
+"CONNECT 1200TX/75RX/REL",
+"CONNECT 1200TX/75RX/REL-5",
+"CONNECT 1200TX/75RX/REL-LAPM",
+"CONNECT 1200TX/75RX/REL-LAPM-COMP",
+"CONNECT 1200TX/75RX/REL-MNP",
+"CONNECT 1200TX/75RX/REL-MNP-COMP",
+"CONNECT 1200TX/75RX/REL-V.42",
+"CONNECT 1200TX/75RX/V42",
+"CONNECT 1200TX/75RX/V42b",
+"CONNECT 1200TX/75RX/V42BIS",
+"CONNECT 14400",
+"CONNECT 14400/ARQ",
+"CONNECT 14400/ECL",
+"CONNECT 14400/ECLC",
+"CONNECT 14400/LAP-M",
+"CONNECT 14400/LAPM",
+"CONNECT 14400/MNP",
+"CONNECT 14400/NONE",
+"CONNECT 14400/REL",
+"CONNECT 14400/REL-5",
+"CONNECT 14400/REL-LAPM",
+"CONNECT 14400/REL-LAPM-COMP",
+"CONNECT 14400/REL-LAPM V.42 BIS",
+"CONNECT 14400/REL-MNP",
+"CONNECT 14400/REL-MNP-COMP",
+"CONNECT 14400/REL-MNP 5",
+"CONNECT 14400/REL-V.42",
+"CONNECT 14400/V42",
+"CONNECT 14400/V42b",
+"CONNECT 14400/V42BIS",
+"CONNECT 14400/VFC",
+"CONNECT 16800",
+"CONNECT 16800/ARQ",
+"CONNECT 16800/ECL",
+"CONNECT 16800/ECLC",
+"CONNECT 16800/LAP-M",
+"CONNECT 16800/LAPM",
+"CONNECT 16800/MNP",
+"CONNECT 16800/NONE",
+"CONNECT 16800/REL",
+"CONNECT 16800/REL-5",
+"CONNECT 16800/REL-LAPM",
+"CONNECT 16800/REL-LAPM-COMP",
+"CONNECT 16800/REL-MNP",
+"CONNECT 16800/REL-MNP-COMP",
+"CONNECT 16800/REL-V.42",
+"CONNECT 16800/V42",
+"CONNECT 16800/V42b",
+"CONNECT 16800/V42BIS",
+"CONNECT 16800/VFC",
+"CONNECT 19200",
+"CONNECT 19200/ARQ",
+"CONNECT 19200/ECL",
+"CONNECT 19200/ECLC",
+"CONNECT 19200/LAP-M",
+"CONNECT 19200/LAPM",
+"CONNECT 19200/MNP",
+"CONNECT 19200/NONE",
+"CONNECT 19200/REL",
+"CONNECT 19200/REL-5",
+"CONNECT 19200/REL-LAPM",
+"CONNECT 19200/REL-LAPM-COMP",
+"CONNECT 19200/REL-MNP",
+"CONNECT 19200/REL-MNP-COMP",
+"CONNECT 19200/REL-V.42",
+"CONNECT 19200/V42",
+"CONNECT 19200/V42b",
+"CONNECT 19200/V42BIS",
+"CONNECT 19200/VFC",
+"CONNECT 21600",
+"CONNECT 21600/ARQ",
+"CONNECT 21600/ECL",
+"CONNECT 21600/ECLC",
+"CONNECT 21600/LAP-M",
+"CONNECT 21600/LAPM",
+"CONNECT 21600/MNP",
+"CONNECT 21600/NONE",
+"CONNECT 21600/REL",
+"CONNECT 21600/REL-5",
+"CONNECT 21600/REL-LAPM-COMP",
+"CONNECT 21600/REL-MNP",
+"CONNECT 21600/REL-MNP-COMP",
+"CONNECT 21600/REL-REL-LAPM",
+"CONNECT 21600/REL-V.42",
+"CONNECT 21600/V42",
+"CONNECT 21600/V42b",
+"CONNECT 21600/V42BIS",
+"CONNECT 21600/VFC",
+"CONNECT 230400",
+"CONNECT 230400/ARQ",
+"CONNECT 230400/LAP-M",
+"CONNECT 230400/MNP",
+"CONNECT 230400/NONE",
+"CONNECT 230400/REL",
+"CONNECT 230400/V42",
+"CONNECT 230400/V42b",
+"CONNECT 230400/V42BIS",
+"CONNECT 2400",
+"CONNECT 2400/ARQ",
+"CONNECT 2400/ECL",
+"CONNECT 2400/ECLC",
+"CONNECT 2400/LAP-M",
+"CONNECT 2400/LAPM",
+"CONNECT 2400/MNP",
+"CONNECT 2400/NONE",
+"CONNECT 2400/REL",
+"CONNECT 2400/REL-5",
+"CONNECT 2400/REL-LAPM",
+"CONNECT 2400/REL-LAPM-COMP",
+"CONNECT 2400/REL-LAPM V.42 BIS",
+"CONNECT 2400/REL-MNP",
+"CONNECT 2400/REL-MNP-COMP",
+"CONNECT 2400/REL-MNP 5",
+"CONNECT 2400/REL-V.42",
+"CONNECT 2400/V42",
+"CONNECT 2400/V42b",
+"CONNECT 2400/V42BIS",
+"CONNECT 24000",
+"CONNECT 24000/ARQ",
+"CONNECT 24000/ECL",
+"CONNECT 24000/ECLC",
+"CONNECT 24000/LAP-M",
+"CONNECT 24000/LAPM",
+"CONNECT 24000/MNP",
+"CONNECT 24000/NONE",
+"CONNECT 24000/REL",
+"CONNECT 24000/REL-5",
+"CONNECT 24000/REL-LAPM",
+"CONNECT 24000/REL-LAPM-COMP",
+"CONNECT 24000/REL-MNP",
+"CONNECT 24000/REL-MNP-COMP",
+"CONNECT 24000/REL-V.42",
+"CONNECT 24000/V42",
+"CONNECT 24000/V42b",
+"CONNECT 24000/V42BIS",
+"CONNECT 24000/VFC",
+"CONNECT 26400",
+"CONNECT 26400/ARQ",
+"CONNECT 26400/ECL",
+"CONNECT 26400/ECLC",
+"CONNECT 26400/LAP-M",
+"CONNECT 26400/LAPM",
+"CONNECT 26400/MNP",
+"CONNECT 26400/NONE",
+"CONNECT 26400/REL",
+"CONNECT 26400/REL-5",
+"CONNECT 26400/REL-LAPM",
+"CONNECT 26400/REL-LAPM-COMP",
+"CONNECT 26400/REL-MNP",
+"CONNECT 26400/REL-MNP-COMP",
+"CONNECT 26400/REL-V.42",
+"CONNECT 26400/V42",
+"CONNECT 26400/V42b",
+"CONNECT 26400/V42BIS",
+"CONNECT 26400/VFC",
+"CONNECT 28800",
+"CONNECT 28800/ARQ",
+"CONNECT 28800/ARQ/VFC",
+"CONNECT 28800/ECL",
+"CONNECT 28800/ECLC",
+"CONNECT 28800/LAP-M",
+"CONNECT 28800/LAPM",
+"CONNECT 28800/MNP",
+"CONNECT 28800/NONE",
+"CONNECT 28800/REL",
+"CONNECT 28800/REL-5",
+"CONNECT 28800/REL-LAPM",
+"CONNECT 28800/REL-LAPM-COMP",
+"CONNECT 28800/REL-MNP",
+"CONNECT 28800/REL-MNP-COMP",
+"CONNECT 28800/REL-V.42",
+"CONNECT 28800/REL/VFC",
+"CONNECT 28800/V42",
+"CONNECT 28800/V42b",
+"CONNECT 28800/V42BIS",
+"CONNECT 28800/VFC",
+"CONNECT 300",
+"CONNECT 300/ARQ",
+"CONNECT 300/ECL",
+"CONNECT 300/ECLC",
+"CONNECT 300/LAP-M",
+"CONNECT 300/LAPM",
+"CONNECT 300/MNP",
+"CONNECT 300/NONE",
+"CONNECT 300/REL",
+"CONNECT 300/REL-5",
+"CONNECT 300/REL-LAPM",
+"CONNECT 300/REL-LAPM-COMP",
+"CONNECT 300/REL-LAPM V.42 BIS",
+"CONNECT 300/REL-MNP",
+"CONNECT 300/REL-MNP-COMP",
+"CONNECT 300/REL-MNP 5",
+"CONNECT 300/REL-V.42",
+"CONNECT 300/V42",
+"CONNECT 300/V42b",
+"CONNECT 300/V42BIS",
+"CONNECT 38400",
+"CONNECT 38400/ARQ",
+"CONNECT 38400/LAP-M",
+"CONNECT 38400/LAPM",
+"CONNECT 38400/MNP",
+"CONNECT 38400/NONE",
+"CONNECT 38400/REL",
+"CONNECT 38400/REL-5",
+"CONNECT 38400/REL-LAPM",
+"CONNECT 38400/REL-LAPM-COMP",
+"CONNECT 38400/REL-MNP",
+"CONNECT 38400/REL-MNP-COMP",
+"CONNECT 38400/REL-V.42",
+"CONNECT 38400/REL/VFC",
+"CONNECT 38400/V42",
+"CONNECT 38400/V42b",
+"CONNECT 38400/V42BIS",
+"CONNECT 38400/VFC",
+"CONNECT 4800",
+"CONNECT 4800/ARQ",
+"CONNECT 4800/ECL",
+"CONNECT 4800/ECLC",
+"CONNECT 4800/LAP-M",
+"CONNECT 4800/LAPM",
+"CONNECT 4800/MNP",
+"CONNECT 4800/NONE",
+"CONNECT 4800/REL",
+"CONNECT 4800/REL-5",
+"CONNECT 4800/REL-LAPM",
+"CONNECT 4800/REL-LAPM-COMP",
+"CONNECT 4800/REL-LAPM V.42 BIS",
+"CONNECT 4800/REL-MNP",
+"CONNECT 4800/REL-MNP-COMP",
+"CONNECT 4800/REL-MNP 5",
+"CONNECT 4800/REL-V.42",
+"CONNECT 4800/V42",
+"CONNECT 4800/V42b",
+"CONNECT 4800/V42BIS",
+"CONNECT 57600",
+"CONNECT 57600/ARQ",
+"CONNECT 57600/LAP-M",
+"CONNECT 57600/LAPM",
+"CONNECT 57600/MNP",
+"CONNECT 57600/NONE",
+"CONNECT 57600/REL",
+"CONNECT 57600/REL-5",
+"CONNECT 57600/REL-LAPM",
+"CONNECT 57600/REL-LAPM-COMP",
+"CONNECT 57600/REL-MNP",
+"CONNECT 57600/REL-MNP-COMP",
+"CONNECT 57600/REL-V.42",
+"CONNECT 57600/REL/VFC",
+"CONNECT 57600/V42",
+"CONNECT 57600/V42b",
+"CONNECT 57600/V42BIS",
+"CONNECT 57600/VFC",
+"CONNECT 600",
+"CONNECT 600/ARQ",
+"CONNECT 600/ECL",
+"CONNECT 600/ECLC",
+"CONNECT 600/LAP-M",
+"CONNECT 600/LAPM",
+"CONNECT 600/MNP",
+"CONNECT 600/NONE",
+"CONNECT 600/REL",
+"CONNECT 600/REL-5",
+"CONNECT 600/REL-LAPM",
+"CONNECT 600/REL-LAPM-COMP",
+"CONNECT 600/REL-LAPM V.42 BIS",
+"CONNECT 600/REL-MNP",
+"CONNECT 600/REL-MNP-COMP",
+"CONNECT 600/REL-MNP 5",
+"CONNECT 600/REL-V.42",
+"CONNECT 600/V42",
+"CONNECT 600/V42b",
+"CONNECT 600/V42BIS",
+"CONNECT 7200",
+"CONNECT 7200/ARQ",
+"CONNECT 7200/ECL",
+"CONNECT 7200/ECLC",
+"CONNECT 7200/LAP-M",
+"CONNECT 7200/LAPM",
+"CONNECT 7200/MNP",
+"CONNECT 7200/NONE",
+"CONNECT 7200/REL",
+"CONNECT 7200/REL-5",
+"CONNECT 7200/REL-LAPM",
+"CONNECT 7200/REL-LAPM-COMP",
+"CONNECT 7200/REL-LAPM V.42 BIS",
+"CONNECT 7200/REL-MNP",
+"CONNECT 7200/REL-MNP-COMP",
+"CONNECT 7200/REL-MNP 5",
+"CONNECT 7200/REL-V.42",
+"CONNECT 7200/V42",
+"CONNECT 7200/V42b",
+"CONNECT 7200/V42BIS",
+"CONNECT 75/1200",
+"CONNECT 75/1200/ARQ",
+"CONNECT 75/1200/LAP-M",
+"CONNECT 75/1200/MNP",
+"CONNECT 75/1200/NONE",
+"CONNECT 75/1200/REL",
+"CONNECT 75/1200/REL-5",
+"CONNECT 75/1200/REL-LAPM",
+"CONNECT 75/1200/REL-LAPM-COMP",
+"CONNECT 75/1200/REL-MNP",
+"CONNECT 75/1200/REL-MNP-COMP",
+"CONNECT 75/1200/REL-V.42",
+"CONNECT 75/1200/V42",
+"CONNECT 75/1200/V42b",
+"CONNECT 75/1200/V42BIS",
+"CONNECT 75TX/1200RX",
+"CONNECT 75TX/1200RX/ARQ",
+"CONNECT 75TX/1200RX/LAP-M",
+"CONNECT 75TX/1200RX/LAPM",
+"CONNECT 75TX/1200RX/MNP",
+"CONNECT 75TX/1200RX/NONE",
+"CONNECT 75TX/1200RX/REL",
+"CONNECT 75TX/1200RX/REL-5",
+"CONNECT 75TX/1200RX/REL-LAPM",
+"CONNECT 75TX/1200RX/REL-LAPM-COMP",
+"CONNECT 75TX/1200RX/REL-MNP",
+"CONNECT 75TX/1200RX/REL-MNP-COMP",
+"CONNECT 75TX/1200RX/REL-V.42",
+"CONNECT 75TX/1200RX/V42",
+"CONNECT 75TX/1200RX/V42b",
+"CONNECT 75TX/1200RX/V42BIS",
+"CONNECT 9600",
+"CONNECT 9600/ARQ",
+"CONNECT 9600/ECL",
+"CONNECT 9600/ECLC",
+"CONNECT 9600/LAP-M",
+"CONNECT 9600/LAPM",
+"CONNECT 9600/MNP",
+"CONNECT 9600/NONE",
+"CONNECT 9600/REL",
+"CONNECT 9600/REL-5",
+"CONNECT 9600/REL-LAPM",
+"CONNECT 9600/REL-LAPM-COMP",
+"CONNECT 9600/REL-LAPM V.42 BIS",
+"CONNECT 9600/REL-MNP",
+"CONNECT 9600/REL-MNP-COMP",
+"CONNECT 9600/REL-MNP 5",
+"CONNECT 9600/REL-V.42",
+"CONNECT 9600/V42",
+"CONNECT 9600/V42b",
+"CONNECT 9600/V42BIS",
+"CONNECT ECL",
+"CONNECT ECLC",
+"CONNECT/ARQ",
+"CONNECT/LAP-M",
+"CONNECT/LAPM",
+"CONNECT/MNP",
+"CONNECT/NONE",
+"CONNECT/REL",
+"CONNECT/V42",
+"CONNECT/V42b",
+"CONNECT/V42BIS",
+"DATA",
+"DELAYED",
+"DIALING",
+"ERROR",
+"FAX",
+"HOST DRIVER TIMEOUT",
+"mdmblatz.inf:HKR, Responses,",
+"mdmbsb.inf:HKR, Responses,",
+"mdmbsch.inf:HKR, Responses,",
+"mdmhaeus.inf:HKR, Responses,",
+"mdmico.inf:HKR, Responses,",
+"mdminsys.inf:HKR, Responses,",
+"mdmke.inf:HKR, Responses,",
+"mdmmart.inf:HKR, Responses,",
+"mdmneuhs.inf:HKR, Responses,",
+"mdmrfi.inf:HKR, Responses,",
+"mdmtelnk.inf:HKR, Responses,",
+"mdmtger.inf:HKR, Responses,",
+"mdmtkr.inf:HKR, Responses,",
+"mdmusrcr.inf:HKR,Responses,",
+"mdmusrg.inf:HKR,Responses,",
+"mdmusrsp.inf:HKR,Responses,",
+"mdmusrwp.inf:HKR,Responses,",
+"mdmwoer.inf:HKR, Responses,",
+"MESG = ",
+"NAME = ",
+"NMBR = ",
+"NO ANSWER",
+"NO CARRIER",
+"NO DIAL TONE",
+"NO DIALTONE",
+"NoResponse",
+"OK",
+"PROTOCOL: ALT",
+"PROTOCOL: ALT-CELLULAR",
+"PROTOCOL: ALT - CELLULAR",
+"PROTOCOL: ERROR-CONTROL/LAPB",
+"PROTOCOL: ERROR-CONTROL/LAPB/AFT",
+"PROTOCOL: ERROR-CONTROL/LAPB/HDX",
+"PROTOCOL: LAP-M",
+"PROTOCOL: LAP-M/AFT",
+"PROTOCOL: LAP-M/ETC",
+"PROTOCOL: LAP-M/HDX",
+"PROTOCOL: LAPM",
+"PROTOCOL: LAPM/AFT",
+"PROTOCOL: LAPM/HDX",
+"PROTOCOL: MNP",
+"PROTOCOL: MNP 2",
+"PROTOCOL: MNP 2, 4",
+"PROTOCOL: MNP 3",
+"PROTOCOL: MNP 3, 4",
+"PROTOCOL: MNP 4",
+"PROTOCOL: MNP10",
+"PROTOCOL: MNP2",
+"PROTOCOL: MNP3",
+"PROTOCOL: MNP4",
+"PROTOCOL: NONE",
+"PROTOCOL: X.25/LAPB",
+"PROTOCOL: X.25/LAPB/AFT",
+"PROTOCOL: X.25/LAPB/HDX",
+"PROTOCOL:MNP 2, 4",
+"PROTOCOL:MNP 3, 4",
+"PROTOCOL:NONE",
+"RING",
+"RINGING",
+"RRING",
+"TIME = ",
+"VOICE",
+NULL
+};
+
+
+const TCHAR *rgpszActualResp[] =
+{
+ "0@",
+ "2@",
+ "3@",
+ "4@",
+ "6@",
+ "7@",
+ "8@",
+ "@",
+ "@#BUSY@#",
+ "@#CONNECT 1200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 1200/ARQ/LAPM/MNP5@#",
+ "@#CONNECT 1200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 1200/ARQ/LAPM@#",
+ "@#CONNECT 1200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 1200/ARQ/MNP/V42BIS@#",
+ "@#CONNECT 1200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 1200/ARQ/V32/LAPM@#",
+ "@#CONNECT 1200/ARQ/V32/MNP@#",
+ "@#CONNECT 1200/ARQ/V34/LAPM@#",
+ "@#CONNECT 1200/ARQ/V34/MNP@#",
+ "@#CONNECT 1200/ARQ@#",
+ "@#CONNECT 1200/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 12000/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V32/LAPM@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V32/MNP@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V34/LAPM@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ/V34/MNP@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 12000/ARQ/VFC/LAPM@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 12000/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 12000/ARQ@#",
+ "@#CONNECT 12000/HST/NONE@#",
+ "@#CONNECT 12000/V32/NONE@#",
+ "@#CONNECT 12000/V34/NONE@#",
+ "@#CONNECT 12000/VFC/NONE@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 14000/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 14400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V32/LAPM@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V32/MNP@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V34/LAPM@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ/V34/MNP@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 14400/ARQ/VFC/LAPM@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 14400/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 14400/ARQ@#",
+ "@#CONNECT 14400/HST/NONE@#",
+ "@#CONNECT 14400/V32/NONE@#",
+ "@#CONNECT 14400/V34/NONE@#",
+ "@#CONNECT 14400/VFC/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 16800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V32/LAPM@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V32/MNP@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V34/LAPM@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ/V34/MNP@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 16800/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 16800/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 16800/ARQ@#",
+ "@#CONNECT 16800/HST/NONE@#",
+ "@#CONNECT 16800/V32/NONE@#",
+ "@#CONNECT 16800/V34/NONE@#",
+ "@#CONNECT 16800/VFC/NONE@#",
+ "@#CONNECT 19200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 19200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V32/LAPM@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V32/MNP@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V34/LAPM@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ/V34/MNP@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 19200/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 19200/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 19200/ARQ@#",
+ "@#CONNECT 19200/V32/NONE@#",
+ "@#CONNECT 19200/V34/NONE@#",
+ "@#CONNECT 19200/VFC/NONE@#",
+ "@#CONNECT 21600/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 21600/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V32/LAPM@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V32/MNP@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V34/LAPM@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ/V34/MNP@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 21600/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 21600/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 21600/ARQ@#",
+ "@#CONNECT 21600/V32/NONE@#",
+ "@#CONNECT 21600/V34/NONE@#",
+ "@#CONNECT 21600/VFC/NONE@#",
+ "@#CONNECT 2400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 2400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/LAPM@#",
+ "@#CONNECT 2400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 2400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V32/LAPM@#",
+ "@#CONNECT 2400/ARQ/V32/MNP@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V34/LAPM@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 2400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 2400/ARQ/V34/MNP@#",
+ "@#CONNECT 2400/ARQ@#",
+ "@#CONNECT 2400/NONE@#",
+ "@#CONNECT 2400/V34/NONE@#",
+ "@#CONNECT 24000/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 24000/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V32/LAPM@#",
+ "@#CONNECT 24000/ARQ/V32/MNP@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V34/LAPM@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 24000/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 24000/ARQ/V34/MNP@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 24000/ARQ/VFC/LAPM@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 24000/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 24000/ARQ@#",
+ "@#CONNECT 24000/V34/NONE@#",
+ "@#CONNECT 24000/VFC/NONE@#",
+ "@#CONNECT 26400/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 26400/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V32/LAPM@#",
+ "@#CONNECT 26400/ARQ/V32/MNP@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V34/LAPM@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 26400/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 26400/ARQ/V34/MNP@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 26400/ARQ/VFC/LAPM@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 26400/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 26400/ARQ@#",
+ "@#CONNECT 26400/V34/NONE@#",
+ "@#CONNECT 26400/VFC/NONE@#",
+ "@#CONNECT 28800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 28800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V32/LAPM@#",
+ "@#CONNECT 28800/ARQ/V32/MNP@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V34/LAPM@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 28800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 28800/ARQ/V34/MNP@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/MNP5@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/NONE@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM/V42BIS@#",
+ "@#CONNECT 28800/ARQ/VFC/LAPM@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/MNP5@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/NONE@#",
+ "@#CONNECT 28800/ARQ/VFC/MNP/V42BIS@#",
+ "@#CONNECT 28800/ARQ@#",
+ "@#CONNECT 28800/V34/NONE@#",
+ "@#CONNECT 28800/VFC/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 4800/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/LAPM@#",
+ "@#CONNECT 4800/ARQ/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V32/LAPM@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V32/MNP@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V34/LAPM@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 4800/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 4800/ARQ/V34/MNP@#",
+ "@#CONNECT 4800/ARQ@#",
+ "@#CONNECT 4800/HST/NONE@#",
+ "@#CONNECT 4800/V32/NONE@#",
+ "@#CONNECT 4800/V34/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 7200/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/LAPM@#",
+ "@#CONNECT 7200/ARQ/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V32/LAPM@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V32/MNP@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V34/LAPM@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 7200/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 7200/ARQ/V34/MNP@#",
+ "@#CONNECT 7200/ARQ@#",
+ "@#CONNECT 7200/HST/NONE@#",
+ "@#CONNECT 7200/V32/NONE@#",
+ "@#CONNECT 7200/V34/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/HST/CELLULAR@#",
+ "@#CONNECT 9600/ARQ/HST/HST/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/HST/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V32/LAPM@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/V32/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V32/MNP@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/MNP5@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/NONE@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V34/LAPM@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/MNP5@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/NONE@#",
+ "@#CONNECT 9600/ARQ/V34/MNP/V42BIS@#",
+ "@#CONNECT 9600/ARQ/V34/MNP@#",
+ "@#CONNECT 9600/ARQ@#",
+ "@#CONNECT 9600/HST/NONE@#",
+ "@#CONNECT 9600/V32/NONE@#",
+ "@#CONNECT 9600/V34/NONE@#",
+ "@#CONNECT@#",
+ "@#ERROR@#",
+ "@#NO ANSWER@#",
+ "@#NO CARRIER@#",
+ "@#NO DIAL TONE@#",
+ "@#NO DIALTONE@#",
+ "@#OK@#",
+ "@#RING@#",
+ "@#RINGING@#",
+ "@#VOICE@#",
+ "#",
+ NULL
+};
diff --git a/private/unimodem/new/mic/sample.inf b/private/unimodem/new/mic/sample.inf
new file mode 100644
index 000000000..b07c29174
--- /dev/null
+++ b/private/unimodem/new/mic/sample.inf
@@ -0,0 +1,64 @@
+; OUT.INF
+;
+; Inf generated for a single modem.
+;
+; Created: Fri 05-24-1996 12:13:42
+; Original Inf: mdmgen.inf/[Rockwell]/%Rockwell1%
+; Manufacturer: "Rockwell"
+; Model: "14400 bps PCMCIA Data-Fax Modem"
+; Rank0ID: GEN_Apex1
+; Rank1ID: PCMCIA\RIPICAA-RC144ACL-845A
+;
+; Signature:
+; Rank0 Version M&M Flags AddReg CopyFile Ranks
+; 12342412 12222233 12334444 12234444 12244444 53265123 52366664 23466666
+
+[Version]
+LayoutFile = layout.inf
+Signature = "$CHICAGO$"
+Class = Modem
+ClassGUID = {4D36E96D-E325-11CE-BFC1-08002BE10318}
+Provider = %provider%
+
+
+[ControlFlags]
+ExcludeFromSelect = GEN_Apex1
+
+
+[Manufacturer]
+%manufacturer0% = Manufacturer0
+
+
+[Manufacturer0]
+%model0% = Model0.Install, GEN_Apex1, PCMCIA\RIPICAA-RC144ACL-845A
+
+
+[Model0.Install]
+AddReg = Model0.AddReg
+
+
+[Model0.AddReg]
+HKR,,FriendlyDriver,,Unimodem.vxd
+HKR,,DevLoader,,*VCOMM
+HKR,,ConfigDialog,,modemui.dll
+HKR,,PortSubClass,1,02
+HKR,,EnumPropPages,,"modemui.dll,EnumPropPages"
+HKR,,PortDriver,,Serial.vxd
+HKR,,Contention,,*vcd
+HKR,, DeviceType, 1, 03
+HKR, Settings, SpeakerMode_Setup,, "M3"
+HKR, Init, 1,, "AT<cr>"
+HKR, Init, 2,, "ATE0V1<cr>"
+HKR, Monitor, 1,, "ATS0=0<cr>"
+HKR, Monitor, 2,, "None"
+HKR, Answer, 1,, "ATA<cr>"
+HKR, Hangup, 1,, "ATH<cr>"
+HKR,, Reset,, "ATZ<cr>"
+HKR, Settings, Prefix,, "AT"
+HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00
+
+
+[Strings]
+provider = "Microsoft"
+manufacturer0 = "Rockwell"
+model0 = "14400 bps PCMCIA Data-Fax Modem"
diff --git a/private/unimodem/new/mic/sources b/private/unimodem/new/mic/sources
new file mode 100644
index 000000000..fb24df25b
--- /dev/null
+++ b/private/unimodem/new/mic/sources
@@ -0,0 +1,36 @@
+MAJORCOMP=net
+MINORCOMP=unimodem
+
+TARGETNAME=tsym
+TARGETPATH=obj
+TARGETTYPE=PROGRAM
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib
+
+
+INCLUDES=$(BASEDIR)\public\sdk\inc;.
+
+C_DEFINES=-DWINVER=0x0400
+
+USE_CRTDLL=1
+
+SOURCES= CHKSUM.CPP \
+ SYNC.CPP \
+ ILIST.CPP \
+ sym.cpp \
+ INI.CPP \
+ INF.CPP \
+ globals.CPP \
+ DEV.CPP \
+ tsym.CPP \
+ resp.cpp \
+ tdev.CPP \
+ mic.cpp \
+ main.cpp
+
+UMTYPE=console
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/new/mic/sym.cpp b/private/unimodem/new/mic/sym.cpp
new file mode 100644
index 000000000..81d76e0c9
--- /dev/null
+++ b/private/unimodem/new/mic/sym.cpp
@@ -0,0 +1,316 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// SYM.C -- Implemtation for Classes:
+// CInfSymbolTable
+// CInfSymbol
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+#include "common.h"
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfSymbol
+///////////////////////////////////////////////////////////////////////////
+
+
+CInfSymbol::CInfSymbol
+(
+ const TCHAR rgchName[],
+ UINT cchName,
+ DWORD dwChecksum,
+ const CInfSymbol * pNext
+)
+: m_rgchText(rgchName),
+ m_cchText(cchName),
+ m_dwChecksum(dwChecksum),
+ m_pNext(pNext),
+ m_pPropList(NULL)
+{
+}
+
+
+CInfSymbol::~CInfSymbol()
+{
+ // BUGBUG -- delete all the InfSymbols allocated!
+}
+
+
+// Return the text associated with this symbol as a null-terminated
+// string
+const TCHAR * CInfSymbol::GetText(void) const
+{
+ return (this) ? m_rgchText : TEXT("");
+}
+
+
+// Return the length of the text associated with this symbol
+UINT CInfSymbol::GetTextLength() const
+{
+ return (this) ? m_cchText : 0;
+}
+
+
+// Release (decrement ref-count) of this symbol
+void CInfSymbol::Release(void) const
+{
+}
+
+
+// Dump state
+void CInfSymbol::Dump(void) const
+{
+ printf("Symbol(0x%08lx) = [%s]\n", this, (this) ? m_rgchText : TEXT(""));
+}
+
+
+// --------------- SetProp ------------------
+// Not really const -- it modifies the property list
+BOOL
+CInfSymbol::SetProp(const CInfSymbol *pSymPropName, void *pvProp)
+const
+// TODO
+{
+#if 0
+ CInfSymProp * pPropRec = (CInfSymProp *) m_pPropList;
+ DWORD dwSig = pSymPropName->Checksum();
+ BOOL fRet=FALSE;
+
+ // Search for property
+ while(pPropRec)
+ {
+ const CInfSymbol *pSym = pPropRec->pSymPropName;
+ if (dwChecksum == pSym->Checksum())
+ {
+ if (!lstrcmp(pSymPropName->GetText(), pSym->GetText()))
+ {
+ // currently we don't allow you to set an already set prop.
+ ASSERT(FALSE);
+ goto end;
+ }
+ }
+ pPropRec = pPropRec->m_pNext;
+ }
+
+ // Insert property
+ pPropRec = new CInfSymProp
+ (
+ pSymPropName,
+ pvProp,
+ (CInfSymProp *) m_pPropList
+ );
+ m_pPropList = (void *) pPropRec;
+
+end:
+ return fRet;
+#endif // 0
+
+ return FALSE;
+}
+
+// --------------- GetProp ------------------
+// TODO
+BOOL
+CInfSymbol::GetProp(const CInfSymbol *pSymPropName, void **ppvProp)
+const
+{
+ return FALSE;
+}
+
+// --------------- DelProp ------------------
+// Not really const -- it modifies the property list
+// TODO
+BOOL
+CInfSymbol::DelProp(const CInfSymbol *pSymPropName)
+const
+{
+ return FALSE;
+}
+
+
+// --------------- GetOrCreatePropLoc --------------
+// Not really const -- it could modify the property list
+// TODO
+BOOL
+CInfSymbol::GetOrCreatePropLoc(
+ const CInfSymbol *pSymPropName,
+ void ***ppvProp,
+ BOOL *pfExists
+ )
+const
+{
+ static void *pv;
+ *pfExists=FALSE;
+ *ppvProp = &pv;
+
+ return TRUE;
+}
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfSymbolTable
+///////////////////////////////////////////////////////////////////////////
+
+
+CInfSymbolTable::CInfSymbolTable(void)
+{
+ FillMemory((void*)m_rgpSym, sizeof(m_rgpSym), 0);
+ m_cSymbols=0;
+ m_pchFree = m_rgchTextStore;
+ m_pchLastFree = m_pchFree +
+ sizeof(m_rgchTextStore)/sizeof(*m_rgchTextStore)-1;
+}
+
+
+CInfSymbolTable::~CInfSymbolTable()
+{
+ mfn_EnterCrit();
+
+ // Free resources
+}
+
+
+// Look up and return the symbol with the specified text.
+// If symbol is not prestent, return NULL if (!fInsert), else
+// insert new symbol and return it.
+// This symbol MUST be released by calling its Release function
+// when it is no longer needed.
+// NULL is returned for the empty string ("")
+const CInfSymbol * CInfSymbolTable::Lookup(const TCHAR rgchName[], BOOL fInsert)
+{
+ const TCHAR *pch = rgchName;
+ const CInfSymbol *pSym = NULL;
+ const UINT cchName = lstrlen(rgchName);
+ const DWORD dwChecksum = ::Checksum
+ (
+ (BYTE *) rgchName,
+ cchName*sizeof(TCHAR)
+ );
+ const UINT u = dwChecksum % SYMTABSIZE; // we use checksum to compute hash.
+
+ if (!cchName) { goto end; }
+
+ mfn_EnterCrit();
+
+ // Look for it
+ for (pSym = m_rgpSym[u]; pSym; pSym = pSym->Next())
+ {
+ // may as well use the checksum as a quick check...
+ if (dwChecksum==pSym->Checksum())
+ {
+ if (!lstrcmp(rgchName, pSym->GetText())) goto end;
+
+ printf
+ (
+ "WARNING: CS(%s) == CS(%s) = 0x%08lx\n",
+ rgchName,
+ pSym->GetText(),
+ dwChecksum
+ );
+ }
+ }
+
+ // Didn't find it -- insert if necessary
+ ASSERT(pSym==NULL);
+ if (fInsert)
+ {
+ if ( (m_pchFree+cchName) < m_pchLastFree)
+ {
+ CopyMemory (
+ (void *) m_pchFree,
+ (const void *) rgchName,
+ (cchName+1)*sizeof(*rgchName) // incl. null term.
+ );
+ pSym = new CInfSymbol(m_pchFree, cchName, dwChecksum, m_rgpSym[u]);
+ if (pSym)
+ {
+ printf("Inserting. %s @ 0x%08lx..\n", m_pchFree, (DWORD) pSym);
+ m_pchFree += (cchName+1);
+ ASSERT(m_pchFree<=m_pchLastFree);
+ m_rgpSym[u] = pSym;
+ }
+ }
+ }
+
+ mfn_LeaveCrit();
+
+end:
+ return pSym;
+}
+
+
+// Dump state
+void CInfSymbolTable::Dump(void) const
+{
+ mfn_EnterCrit();
+
+ printf("[BEGIN SYMBOL TABLE DUMP]\n");
+ for (UINT u=0; u<SYMTABSIZE; u++)
+ {
+ const CInfSymbol *pSym = m_rgpSym[u];
+
+ if (pSym)
+ {
+ printf("---- Location 0x%08lx -----\n", u);
+ for (; pSym ; pSym = pSym->Next())
+ {
+ pSym->Dump();
+ }
+ }
+ }
+ printf("[End symbol table dump]\n");
+
+ mfn_LeaveCrit();
+
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfSymbolList
+///////////////////////////////////////////////////////////////////////////
+
+
+// --------------------------- Find -----------------------------
+// Looks for the specified symbol, returns the list element with that symbol.
+// If ppListPrev is non-NULL, sets it to the previous list element
+// (if no previous element, sets it to NULL). If the symbol is not found,
+// *ppListPrev is not touched.
+//
+const CInfSymbolList *
+CInfSymbolList::Find
+(
+ const CInfSymbolList *pList,
+ const CInfSymbol *pSym,
+ const CInfSymbolList **ppListPrev
+)
+{
+ DWORD dwChecksum = pSym->Checksum();
+ const CInfSymbolList *pListPrev=NULL;
+
+ while(pList)
+ {
+ const CInfSymbol *pSym1 = pList->m_pSym;
+ if (dwChecksum == pSym1->Checksum())
+ {
+ if (!lstrcmp(pSym->GetText(), pSym1->GetText()))
+ {
+ // Found it ...
+ if (ppListPrev)
+ {
+ // Note, if we find the 1st element, *ppListPrev is set
+ // to NULL.
+ *ppListPrev = pListPrev;
+ }
+ goto end;
+ }
+ }
+ pListPrev = pList;
+ pList = pList->Next();
+ }
+
+end:
+
+ return pList;
+}
diff --git a/private/unimodem/new/mic/sym.h b/private/unimodem/new/mic/sym.h
new file mode 100644
index 000000000..054fcb569
--- /dev/null
+++ b/private/unimodem/new/mic/sym.h
@@ -0,0 +1,215 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// SYM.H -- Header for Classes:
+// CInfSymbolTable
+// CInfSymbol
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+#ifndef _SYM_H_
+#define _SYM_H_
+
+class CInfSymbolList;
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfSymbol
+///////////////////////////////////////////////////////////////////////////
+
+// Represents a symbol in the symbol table.
+// Note: Only CInfSymbolTable member functions can construct/destruct these
+// objects.
+//
+// Empty string maps to NULL symbol. So a NULL pointer is perfectly valid for
+// all member functions.
+// GetText(NULL) returns the empty string, and Checksum returns 0x0.
+// Strcmpi treats NULL pointer as the empty string.
+
+class CInfSymbol
+{
+
+public:
+
+ //-------------- GetText ------------------
+ // Return the text associated with this symbol as a null-terminated
+ // string
+ const TCHAR * GetText(void) const;
+
+ //-------------- GetTextLength ------------------
+ // Return the length of the text associated with this symbol,
+ // not counting terminating zero.
+ UINT GetTextLength() const;
+
+ //-------------- Strcmpi ------------------
+ // Case-insensitive equal
+ // -ve implies this is less-than pSym
+ int Strcmpi(const CInfSymbol *pSym) const
+ {
+ if (this && pSym)
+ {
+ return lstrcmpi(m_rgchText, pSym->m_rgchText);
+ }
+ else if (this && !pSym)
+ {
+ return 1;
+ }
+ else if (!this && pSym)
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ //-------------- Release ------------------
+ // Release (decrement ref-count) of this symbol
+ void Release(void) const;
+
+ //-------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+ // --------------- Checksum ------------------
+ // Return checksum of contents
+ DWORD Checksum(void) const {return (this) ? m_dwChecksum : 0;}
+
+ // --------------- SetProp ------------------
+ BOOL SetProp(const CInfSymbol *pSymPropName, void *pvProp) const;
+
+ // --------------- GetProp ------------------
+ BOOL GetProp(const CInfSymbol *pSymPropName, void **ppvProp) const;
+
+ // --------------- GetOrCreatePropLoc --------------
+ BOOL
+ GetOrCreatePropLoc(
+ const CInfSymbol *pSymPropName,
+ void ***ppvProp,
+ BOOL *pfExists
+ )
+ const;
+
+ // --------------- DelProp ------------------
+ BOOL DelProp(const CInfSymbol *pSymPropName) const;
+
+private:
+
+ friend class CInfSymbolTable;
+
+ CInfSymbol
+ (
+ const TCHAR rgchName[],
+ UINT cchName,
+ DWORD dwChecksum,
+ const CInfSymbol *pNext
+ );
+
+ ~CInfSymbol();
+
+ const CInfSymbol *Next(void) const {return m_pNext;}
+
+ const TCHAR * m_rgchText;
+ const UINT m_cchText;
+ const DWORD m_dwChecksum;
+ const CInfSymbol * m_pNext;
+ CInfSymbolList * m_pPropList;
+
+};
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CInfSymbolTable
+///////////////////////////////////////////////////////////////////////////
+
+// A symbol table.
+
+static const UINT SYMTABSIZE = 1000;
+static const UINT TEXTSTORESIZE = 1000*1000;
+
+
+class CInfSymbolTable
+{
+
+public:
+
+ CInfSymbolTable(void);
+ ~CInfSymbolTable();
+
+ // TODO -- add "context" parameter to symbols -- symbols with different
+ // context will be stored separately even if their name is the same.
+ // Context is not interpreted by the symbol table, except to test for
+ // equality. When implementing this, add a context parameter to
+ // InfSymbols's constructor, and a member fn "GetContext()" to InfSymbol.
+
+ //-------------- Lookup ------------------
+ // Look up and return the symbol with the specified text
+ // This symbol must be released by calling its Release function
+ // when it is no longer needed.
+ const CInfSymbol * Lookup(const TCHAR rgchName[], BOOL fInsert);
+
+ //-------------- Dump ------------------
+ // Dump state
+ void Dump(void) const;
+
+private:
+
+ const CInfSymbol * m_rgpSym[SYMTABSIZE];
+ TCHAR m_rgchTextStore[TEXTSTORESIZE];
+ TCHAR * m_pchFree;
+ TCHAR * m_pchLastFree;
+
+ CSync m_sync;
+ UINT m_cSymbols;
+
+ void mfn_EnterCrit(void) const {m_sync.EnterCrit();}
+ void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();}
+
+};
+
+
+class CInfSymbolList : private CInfList
+{
+ CInfSymbolList
+ (
+ const CInfSymbol *pSym,
+ void *pvData,
+ const CInfSymbolList *pNext
+ )
+ : CInfList(pvData, pNext), m_pSym(pSym)
+ {
+ }
+
+ const CInfSymbolList *
+ Next (void)
+ const
+ {
+ return (const CInfSymbolList *) CInfList::Next();
+ }
+
+ const CInfSymbol * GetSym(void) {return m_pSym;}
+
+ ~CInfSymbolList () {}
+
+ // --------------------------- Find -----------------------------
+ // Looks for the specified symbol, returns the list element with that
+ // symbol. If ppListPrev is non-NULL, sets it to the previous list element
+ // (if no previous element, sets it to NULL). If the symbol is not found,
+ // *ppListPrev is not touched.
+ static
+ const CInfSymbolList *
+ Find
+ (
+ const CInfSymbolList *pList,
+ const CInfSymbol *pSym,
+ const CInfSymbolList **ppListPrev
+ );
+
+private:
+ const CInfSymbol *m_pSym;
+};
+
+#endif // _SYM_H_
diff --git a/private/unimodem/new/mic/sync.cpp b/private/unimodem/new/mic/sync.cpp
new file mode 100644
index 000000000..10f58f263
--- /dev/null
+++ b/private/unimodem/new/mic/sync.cpp
@@ -0,0 +1,35 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+#include "common.h"
+//
+// SYNC.CPP -- Implemtation for Classes:
+// CSync
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+//
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CSync
+///////////////////////////////////////////////////////////////////////////
+
+#if (TODO)
+
+//
+// Signals all the events specified in the event list and at the same
+// time distroys the list.
+//
+void CSync::mfn_SignalAndFree(SLIST *pEventList)
+{
+ while(m_pEventList)
+ {
+ SLIST pOld = m_pEventList;
+ SetEvent((HANDLE) m_pEventList->pv);
+ m_pEventList = m_pEventList->Next();
+ delete m_pOld;
+ }
+}
+#endif // TODO
diff --git a/private/unimodem/new/mic/sync.h b/private/unimodem/new/mic/sync.h
new file mode 100644
index 000000000..95f9bbe48
--- /dev/null
+++ b/private/unimodem/new/mic/sync.h
@@ -0,0 +1,148 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// SYNC.H -- Header for Classes:
+// CSync
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+//
+#ifndef _SYNC_H_
+#define _SYNC_H_
+
+
+///////////////////////////////////////////////////////////////////////////
+// CLASS CSync
+///////////////////////////////////////////////////////////////////////////
+
+// Controls access to its parent object. Includes a critical section, and
+// (TODO) mechanism for waiting until all threads have finished using
+// the parent object.
+
+// Sample session (pObj is a ptr to a hypothetical parent, which implements
+// methods Load, Unload, OpenSession, CloseSession using the member CSymc
+// object):
+// pObj->Load("mdmusr.inf");
+// hSession = pObj->OpenSession();
+// ... do stuff ...
+// pObj->CloseSession(hSession);
+// hSync = pObj->Unload();
+// if (hSync) WaitForSingleObject(hSync, INFINITE);
+// CloseHandle(hSync);
+
+class CSync
+{
+
+public:
+
+ CSync(void) {InitializeCriticalSection(&m_crit);}
+
+ ~CSync()
+ {
+ EnterCriticalSection(&m_crit);
+ DeleteCriticalSection(&m_crit);
+ }
+
+ //-------------- EnterCrit ------------------
+ // Claim our critical section
+ void EnterCrit(void) const
+ {
+ EnterCriticalSection((CRITICAL_SECTION *)&m_crit);
+ }
+
+ //-------------- LeaveCrit ------------------
+ // Release our critical section
+ void LeaveCrit(void) const
+ {
+ LeaveCriticalSection((CRITICAL_SECTION *)&m_crit);
+ }
+
+#if (TODO)
+
+ BOOL BeginLoad(void)
+ {
+ }
+
+ void EndLoad(void)
+ {
+ EnterCrit();
+ ASSERT (m_eState == CSYNC_LOADING);
+ m_eState = CSYNC_LOADED;
+ LeaveCrit();
+ }
+
+ HANDLE BeginUnload(void)
+ {
+ HANDLE h=NULL;
+ EnterCrit();
+ if (m_eState == CSYNC_LOADED)
+ {
+ m_eState = CSYNC_UNLOADING;
+ }
+ else
+ {
+ fRet = FALSE;
+ }
+ LeaveCrit();
+
+ return fRet;
+ }
+
+ void EndUnload(void);
+
+ HSESSION BeginSession(void)
+ {
+ HSESSION hRet = 1;
+ EnterCrit();
+ if (m_eState==SYNC_LOADED)
+ {
+ m_uRefCount++;
+ }
+ else
+ {
+ hRet = 0;
+ }
+ LeaveCrit();
+
+ return hRet;
+ }
+
+ void EndSession(HSESSION hSession)
+ {
+ SLINST *pEventList=NULL;
+ EnterCrit();
+ ASSERT(hSession==1 && m_uRefCount);
+ m_uRefCount--;
+ if (m_eState==SYNC_UNLOADING && m_pEventList)
+ {
+ pEventList = m_pEventList;
+ m_pEventList=NULL;
+ }
+ LeaveCrit();
+
+ mfn_SignalAndFree(m_pEventList);
+ }
+
+ BOOL AddContext(HSESSION hS)
+ {
+ return FALSE;
+ }
+#endif // TODO
+
+private:
+
+ CRITICAL_SECTION m_crit;
+
+#if (TODO)
+ UINT m_uRefCount;
+ enum {CSYNC_UNLOADED, CSYNC_LOADING, CSYNC_UNLOADING, CSYNC_UNLOADED}
+ m_eState;
+ SLIST* pUnloadEventList;
+#endif // TODO
+
+};
+
+
+#endif // _SYNC_H_
diff --git a/private/unimodem/new/mic/tdev.cpp b/private/unimodem/new/mic/tdev.cpp
new file mode 100644
index 000000000..2e32384f1
--- /dev/null
+++ b/private/unimodem/new/mic/tdev.cpp
@@ -0,0 +1,84 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// TDEV.CPP -- Component tests for classes:
+// CIndDevice
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// History:
+// 05/22/96 JosephJ Created
+//
+#include "common.h"
+#include "ini.h"
+#include "inf.h"
+#include "dev.h"
+#include "test.h"
+
+#define SIMPLE 0
+#define COMPLEX 1
+#define ACTUAL 2
+
+//#define TEST_TYPE (SIMPLE)
+#define TEST_TYPE (COMPLEX)
+//#define TEST_TYPE (ACTUAL)
+
+
+#if (TEST_TYPE==SIMPLE)
+#elif (TEST_TYPE==COMPLEX)
+#elif (TEST_TYPE==ACTUAL)
+#endif
+
+int main_tdev(int argc, char * argv[])
+{
+ CInfFile *pInf= new CInfFile();
+ CInfDevice *pDev = new CInfDevice(NULL);
+
+ const CInfManufacturerEntry *pManuE = NULL;
+ const CInfManufacturerSection *pManuS = NULL;
+ const CInfModelEntry *pModelE = NULL;
+
+ //__try
+ {
+ //__try
+ {
+ if (pInf->Load("test.inf"))
+ {
+ pManuE = pInf->GetFirstManufacturerEntry();
+ }
+ if (pManuE)
+ {
+ pManuS = pManuE->GetManufacturerSection();
+ }
+ if (pManuS)
+ {
+ pModelE = pManuS->GetFirstModelEntry();
+ }
+ if (pModelE)
+ {
+ if (pDev->Load(pInf, pManuE, pModelE))
+ {
+ pDev->Dump();
+ pDev->WriteInf(TEXT("out.inf"));
+ }
+ }
+
+ }
+ //__finally
+ {
+ // printf("in finally\n");
+ if (pDev) {pDev->Unload(); delete pDev; pDev=NULL;}
+ if (pInf) {pInf->Unload(); delete pInf; pInf=NULL;}
+ }
+ }
+ //__except(printf("in filter\n"), EXCEPTION_EXECUTE_HANDLER)
+ if (0) {
+ printf("in except\n");
+ ASSERT(FALSE);
+ }
+
+
+ return 0;
+}
diff --git a/private/unimodem/new/mic/test.h b/private/unimodem/new/mic/test.h
new file mode 100644
index 000000000..d5064c9d0
--- /dev/null
+++ b/private/unimodem/new/mic/test.h
@@ -0,0 +1,2 @@
+int main_tsym(int argc, char * argv[]);
+int main_tdev(int argc, char * argv[]);
diff --git a/private/unimodem/new/mic/tsym.cpp b/private/unimodem/new/mic/tsym.cpp
new file mode 100644
index 000000000..ab6712aa5
--- /dev/null
+++ b/private/unimodem/new/mic/tsym.cpp
@@ -0,0 +1,65 @@
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// TSYM.CPP -- Component tests for classes:
+// CInfSymbolTable
+// CInfSymbol
+//
+// Copyright (c) 1996 Microsoft Corporation
+//
+//
+// History:
+// 05/21/96 JosephJ Created
+//
+#include "common.h"
+#include "test.h"
+
+
+#define SIMPLE 0
+#define COMPLEX 1
+#define ACTUAL 2
+
+//#define TEST_TYPE (SIMPLE)
+#define TEST_TYPE (COMPLEX)
+//#define TEST_TYPE (ACTUAL)
+
+extern const TCHAR *rgpszSimpleResp[];
+extern const TCHAR *rgpszComplexResp[];
+extern const TCHAR *rgpszActualResp[];
+
+
+#if (TEST_TYPE==SIMPLE)
+# define TEST_RESP_ARRAY rgpszSimpleResp
+#elif (TEST_TYPE==COMPLEX)
+# define TEST_RESP_ARRAY rgpszComplexResp
+#elif (TEST_TYPE==ACTUAL)
+# define TEST_RESP_ARRAY rgpszActualResp
+#endif
+
+static const TCHAR **rgpchStrings = TEST_RESP_ARRAY;
+
+int main_tsym(int argc, char * argv[])
+{
+ const TCHAR **pch = NULL;
+
+ for (pch = rgpchStrings; *pch; pch++)
+ {
+ const CInfSymbol *pSym = gSymtab.Lookup(*pch, TRUE);
+ if (pSym) {pSym->Dump(); pSym->Release(); pSym=0;}
+ }
+
+ printf("+++\n");
+
+ for (pch = rgpchStrings; *pch; pch++)
+ {
+ const CInfSymbol *pSym = gSymtab.Lookup(*pch, TRUE);
+ if (pSym) {pSym->Dump(); pSym->Release(); pSym=0;}
+ }
+
+ printf("+++\n");
+
+ gSymtab.Dump();
+
+ return 0;
+}
diff --git a/private/unimodem/new/readme.txt b/private/unimodem/new/readme.txt
new file mode 100644
index 000000000..6ac5b68ed
--- /dev/null
+++ b/private/unimodem/new/readme.txt
@@ -0,0 +1,11 @@
+[match] Fast response matching code
+ 3/24/96 JOSEPHJ Code which builds a tree given a list of possible modem
+ responses and uses this tree to determine how many characters
+ to read and to match the characters read against one of the
+ possible responses.
+
+[slot]
+ 3/24/96 JOSEPHJ Code that implements basic IPC for some external process
+ to notify unimodem of external events. It is implemented using
+ one mailslot and one semaphore, and allows arbitary framed data
+ to be sent to the unimode process.
diff --git a/private/unimodem/new/slot/client.c b/private/unimodem/new/slot/client.c
new file mode 100644
index 000000000..c77d385ee
--- /dev/null
+++ b/private/unimodem/new/slot/client.c
@@ -0,0 +1,47 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Implements the unimodem TSP notification mechanism:
+// The higher level API: UnimodemNotifyTSP()
+//
+//****************************************************************************
+#define UNICODE
+#include <windows.h>
+#include "slot.h"
+#include "..\..\inc\tspnotif.h"
+
+
+BOOL WINAPI UnimodemNotifyTSP(PNOTIFICATION_FRAME pnf)
+{
+ BOOL fRet=FALSE;
+ HNOTIFICATION hN=0;
+
+ if (pnf->dwSig!=dwNFRAME_SIG || pnf->dwSize<sizeof(*pnf) ||
+ pnf->dwSize>MAX_NOTIFICATION_FRAME_SIZE)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ goto end;
+ }
+
+ hN = notifCreate(FALSE, SLOTNAME_UNIMODEM_NOTIFY_TSP, 0, 0);
+
+ if (hN)
+ {
+ fRet = notifWriteMsg(hN, (LPBYTE) pnf, pnf->dwSize);
+ notifFree(hN); hN=0;
+ }
+
+end:
+
+ return fRet;
+}
diff --git a/private/unimodem/new/slot/main.c b/private/unimodem/new/slot/main.c
new file mode 100644
index 000000000..b60d85f5a
--- /dev/null
+++ b/private/unimodem/new/slot/main.c
@@ -0,0 +1,514 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: MAIN.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Test the notification support.
+// Tests both the higher-level api (UnimodemNotifyTSP)
+// and the lower level notifXXX apis. The latter
+// are tested later on in the file, and the header file
+// "slot.h" is included there, not at the start of this
+// file, because the higher-level tests do not need to
+// include "slot.h"
+//
+//****************************************************************************
+#define UNICODE
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "..\..\inc\tspnotif.h"
+
+#define SLOTNAME SLOTNAME_UNIMODEM_NOTIFY_TSP
+
+#define TSPI_NOTIF_A 101
+#define TSPI_NOTIF_B 102
+#define TSPI_NOTIF_QUIT 999
+
+#define ASSERT(_c) \
+ ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__))
+#define DPRINTF(_fmt) printf(_fmt)
+#define DPRINTF1(_fmt,_arg) printf(_fmt,_arg)
+#define DPRINTF2(_fmt,_arg,_arg2) printf(_fmt,_arg,_arg2)
+#define DPRINTF3(_fmt,_arg,_arg2,_arg3) printf(_fmt,_arg,_arg2,_arg3)
+
+BOOL InitGlobals(int argc, char *argv[]);
+void Server(void);
+void Client_LL(void); // LowLevel -- calls notif* apis
+void Client_HL(void); // HighLevel -- calls UnimodemNotifyTSP
+void ProcessFrame(PNOTIFICATION_FRAME pnf);
+BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize);
+BOOL ReadFrame_UI(PNOTIFICATION_FRAME pnf, DWORD dwcbMax);
+BOOL ReadFrame_Auto(PNOTIFICATION_FRAME pnf, DWORD dwcbMax);
+
+#define READFRAME(_pnf, _max) ReadFrame_Auto(_pnf, _max)
+//#define READFRAME(_pnf, _max) ReadFrame_UI(_pnf, _max)
+
+//#define CLIENT() Client_LL()
+#define CLIENT() Client_HL()
+
+
+BOOL InitFrame_CplReEnum(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount);
+BOOL InitFrame_CplChangeDCC(PNOTIFICATION_FRAME, DWORD, DWORD);
+BOOL InitFrame_Simple(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount);
+
+#define NOTIF_CPL_REENUM 1
+#define NOTIF_CPL_CHANGE_DCC 2
+#define INIT_TYPE NOTIF_CPL_CHANGE_DCC
+
+#if (INIT_TYPE==NOTIF_CPL_REENUM)
+ #define INIT_FRAME InitFrame_CplReEnum
+#elif (INIT_TYPE==NOTIF_CPL_CHANGE_DCC)
+ #define INIT_FRAME InitFrame_CplChangeDCC
+#else
+ #define INIT_FRAME InitFrame_Simple
+#endif
+
+struct
+{
+ BOOL fQuit;
+ BOOL fServer;
+
+} gMain;
+
+int __cdecl main(int argc, char *argv[])
+{
+ // init globals
+ if (!InitGlobals(argc, argv)) goto end;
+
+ if (gMain.fServer) Server();
+ else CLIENT();
+
+end:
+ return 0;
+}
+
+BOOL InitGlobals(int argc, char *argv[])
+{
+ BOOL fRet=FALSE;
+ char *pc;
+
+ if (argc!=2) goto end;
+
+ pc=argv[1];
+ if (*pc!='-' && *pc!='/') goto end;
+ *pc++;
+ switch(*pc++)
+ {
+ case 's':
+ gMain.fServer=TRUE;
+ break;
+ case 'c':
+ break;
+ default:
+ goto end;
+ }
+
+ DPRINTF1("Ha!%d\n", gMain.fServer);
+ fRet=TRUE;
+
+end:
+ return fRet;
+}
+
+
+void ProcessFrame(PNOTIFICATION_FRAME pnf)
+{
+ if (pnf->dwSig!=dwNFRAME_SIG)
+ {
+ ASSERT(FALSE);
+ return;
+ }
+
+ switch(pnf->dwType)
+ {
+ case TSPI_NOTIF_A:
+ DPRINTF("Got NOTIF_A\n");
+ break;
+ case TSPI_NOTIF_B:
+ DPRINTF("Got NOTIF_B\n");
+ break;
+ case TSPI_NOTIF_QUIT:
+ DPRINTF("Got NOTIF_QUIT, Quitting...\n");
+ gMain.fQuit=TRUE;
+ break;
+ default:
+ DPRINTF1("Got unknown notif type 0x%lu. Quitting\n", pnf->dwType);
+ gMain.fQuit=TRUE;
+ break;
+ }
+}
+
+
+void Client_HL(void)
+{
+ struct {
+ DWORD dw0;
+ DWORD dw1;
+ BYTE rgb[256];
+ } EmptyFr;
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+ DWORD dwcbMax=sizeof(EmptyFr);
+ DWORD dwcbServerMax=0;
+
+ // Get input from user, submit request
+ pnf->dwSig=pnf->dwSize=0;
+ while(READFRAME(pnf, dwcbMax))
+ {
+ ASSERT(pnf->dwSig==dwNFRAME_SIG);
+ if (!UnimodemNotifyTSP(pnf))
+ {
+ DPRINTF1("UnimodemNotifyTSP(-) failed. GetLastError=0x%lx. Exiting.\n",
+ (unsigned long) GetLastError());
+ // break;
+ }
+ pnf->dwSig=pnf->dwSize=0;
+ }
+
+ return;
+}
+
+BOOL ReadFrame_UI(PNOTIFICATION_FRAME pnf, DWORD dwcbMax)
+{
+ BOOL fRet=FALSE;
+ char rgchTmp[128];
+ DWORD dwType=0;
+ BOOL fInputError=FALSE;
+
+ if (dwcbMax<sizeof(*pnf))
+ {
+ DPRINTF1("ReadFrame: input frame too small (%lu)\n",
+ dwcbMax);
+ goto end;
+ }
+
+ fInputError=TRUE;
+
+ if (scanf("%s", rgchTmp)==1)
+ {
+ if (lstrlenA(rgchTmp)==1)
+ {
+ fInputError=FALSE;
+ switch(*rgchTmp)
+ {
+ case 'a':
+ DPRINTF("sending NOTIF_A\n");
+ dwType = TSPI_NOTIF_A;
+ break;
+ case 'b':
+ DPRINTF("sending NOTIF_B\n");
+ dwType = TSPI_NOTIF_B;
+ break;
+ case 'q':
+ DPRINTF("sending NOTIF_QUIT\n");
+ dwType = TSPI_NOTIF_QUIT;
+ break;
+ case 'x':
+ DPRINTF("Exiting\n");
+ break;
+ default:
+ fInputError=TRUE;
+ break;
+ }
+ }
+ }
+
+ if (dwType)
+ {
+ pnf->dwSig=dwNFRAME_SIG;
+ pnf->dwSize=sizeof(*pnf);
+ pnf->dwType=dwType;
+ fRet=TRUE;
+ }
+
+ if (fInputError)
+ {
+ DPRINTF("Bad/no input. Quitting...\n");
+ }
+
+end:
+ return fRet;
+}
+
+BOOL ReadFrame_Auto(PNOTIFICATION_FRAME pnf, DWORD dwcbMax)
+{
+ static dwCount=0;
+ DWORD dwSleepAmount;
+ BOOL fRet=FALSE;
+
+ if (!dwCount++)
+ {
+ srand((ULONG) GetTickCount());
+ }
+
+# define MAXSLEEP 10000
+ dwSleepAmount = ((DWORD) rand()) % MAXSLEEP;
+
+ Sleep(dwSleepAmount);
+
+ // Quit after 100 -- currently disabled.
+ //if (dwCount>100) goto end;
+
+ fRet = INIT_FRAME(pnf, dwcbMax, dwCount);
+
+// end:
+ return fRet;
+}
+
+BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize)
+{
+ return (pnf && pnf->dwSig==dwNFRAME_SIG && pnf->dwSize>=sizeof(*pnf) &&
+ pnf->dwSize==dwTrueSize &&
+ pnf->dwSize<=MAX_NOTIFICATION_FRAME_SIZE);
+}
+
+// ----------------------------- TEST INTERNAL STUFF --------------------
+#include "slot.h"
+void ProcessNotification(HNOTIFICATION hN);
+
+// Server Thread
+void Server(void)
+{
+ HNOTIFICATION hN=0;
+ DWORD dwLastErr=0;
+ HANDLE hObj=NULL;
+
+ // Create slot
+ hN = notifCreate(TRUE, SLOTNAME, MAX_NOTIFICATION_FRAME_SIZE, 100);
+ if (!hN)
+ {
+ DPRINTF3("notifServerCreate(\"%s\", %lu) failed. GetLastError=0x%lx.\n",
+ (LPCSTR) SLOTNAME,
+ (unsigned long) MAX_NOTIFICATION_FRAME_SIZE,
+ (unsigned long) GetLastError());
+ goto end;
+ }
+ if (!(hObj=notifGetObj(hN)))
+ {
+ DPRINTF("notifGetObj failed\n");
+ goto end;
+ }
+
+ // Wait and process messages
+ while(!gMain.fQuit)
+ {
+ UINT u=WaitForSingleObject(hObj, 5000);
+ if (u==WAIT_OBJECT_0)
+ {
+ ProcessNotification(hN);
+ //Sleep(1000);
+ }
+ }
+
+end:
+ if (hN)
+ {
+ notifFree(hN); hN=0;
+ }
+ ;
+}
+
+
+
+void ProcessNotification(HNOTIFICATION hN)
+{
+ BOOL fRet;
+ struct {
+ DWORD dw0;
+ DWORD dw1;
+ BYTE rgb[256];
+ } EmptyFr;
+ DWORD dwcbMax=sizeof(EmptyFr);
+ DWORD dwcbRead=0;
+
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+
+ pnf->dwSig=pnf->dwSize=0;
+
+ fRet=notifReadMsg(hN, (LPBYTE) pnf, dwcbMax, &dwcbRead);
+ if (!fRet)
+ {
+ DPRINTF1("notifReadFrame(...) failed. GetLastError=0x%lx.\n",
+ (unsigned long) GetLastError());
+ goto end;
+ }
+
+ // Verify validity of msg...
+ if (!ValidateFrame(pnf, dwcbRead))
+ {
+ DPRINTF("Invalid frame\n");
+ goto end;
+ }
+ ASSERT(pnf->dwSig==dwNFRAME_SIG);
+ ASSERT(pnf->dwSize<=dwcbMax);
+ ASSERT(pnf->dwSize<=MAX_NOTIFICATION_FRAME_SIZE);
+
+ ProcessFrame(pnf);
+
+end:
+ return;
+}
+
+void Client_LL(void)
+{
+ HNOTIFICATION hN=0;
+ DWORD dwLastErr=0;
+ struct {
+ DWORD dw0;
+ DWORD dw1;
+ BYTE rgb[256];
+ } EmptyFr;
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+ DWORD dwcbMax=sizeof(EmptyFr);
+ DWORD dwcbServerMax=0;
+
+ // Open slot
+ hN = notifCreate(FALSE, SLOTNAME, 0, 0);
+ if (!hN)
+ {
+ DPRINTF2("notifClientOpen(\"%s\", -) failed. GetLastError=0x%lx.\n",
+ (LPCSTR) SLOTNAME,
+ (unsigned long) GetLastError());
+ goto end;
+ }
+ dwcbServerMax=notifGetMaxSize(hN);
+
+ if (dwcbServerMax<dwcbMax)
+ {
+ DPRINTF2("Warning -- server max size = %lu; Our max=%lu\n",
+ dwcbServerMax,
+ dwcbMax);
+ }
+
+ // Get input from user, submit request
+ pnf->dwSig=pnf->dwSize=0;
+ while(READFRAME(pnf, dwcbMax))
+ {
+ ASSERT(pnf->dwSig==dwNFRAME_SIG);
+ if (!notifWriteMsg(hN, (LPBYTE)pnf, pnf->dwSize))
+ {
+ DPRINTF1("notifWriteFrame(-) failed. GetLastError=0x%lx. Exiting.\n",
+ (unsigned long) GetLastError());
+ break;
+ }
+ pnf->dwSig=pnf->dwSize=0;
+ }
+
+end:
+ if (hN)
+ {
+ notifFree(hN); hN=0;
+ }
+}
+
+BOOL InitFrame_Simple(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount)
+{
+ BOOL fRet=FALSE;
+ DWORD dwType=0;
+ DWORD dwFlags=0;
+
+ if (dwcbMax<sizeof(*pnf))
+ {
+ DPRINTF1("ReadFrame: input frame too small (%lu)\n",
+ dwcbMax);
+ goto end;
+ }
+
+ if (dwCount&0x1)
+ {
+ DPRINTF("sending NOTIF_A\n");
+ dwType = TSPI_NOTIF_A;
+ }
+ else
+ {
+ DPRINTF("sending NOTIF_B\n");
+ dwType = TSPI_NOTIF_B;
+ }
+
+ pnf->dwSig=dwNFRAME_SIG;
+ pnf->dwSize=sizeof(*pnf);
+ pnf->dwType=dwType;
+ pnf->dwFlags=dwFlags;
+ fRet=TRUE;
+
+end:
+ return fRet;
+}
+
+BOOL InitFrame_CplReEnum(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount)
+{
+ BOOL fRet=FALSE;
+ DWORD dwType=0;
+ DWORD dwFlags=0;
+
+ if (dwcbMax<sizeof(*pnf))
+ {
+ DPRINTF1("ReadFrame: input frame too small (%lu)\n",
+ dwcbMax);
+ goto end;
+ }
+
+ dwType = TSPNOTIF_TYPE_CPL;
+ dwFlags = fTSPNOTIF_FLAG_CPL_REENUM;
+
+ pnf->dwSig=dwNFRAME_SIG;
+ pnf->dwSize=sizeof(*pnf);
+ pnf->dwType=dwType;
+ pnf->dwFlags=dwFlags;
+ fRet=TRUE;
+
+end:
+ return fRet;
+}
+
+BOOL InitFrame_CplChangeDCC
+(
+ PNOTIFICATION_FRAME pnf,
+ DWORD dwcbMax,
+ DWORD dwCount
+)
+{
+ BOOL fRet=FALSE;
+ DWORD dwType=0;
+ DWORD dwFlags=0;
+ LPCTSTR rglpctszNames[3] =
+ {
+ TEXT("Zoom Fax Modem V.34X Model 470"),
+ TEXT("Zoom Fax Modem V.34X Model 470 #2"),
+ TEXT("blah")
+ };
+ LPCTSTR lpctszFriendlyName = rglpctszNames[dwCount%3];
+ UINT u = lstrlen(lpctszFriendlyName);
+
+ if (dwcbMax< (sizeof(*pnf)+(u+1)*sizeof(TCHAR)))
+ {
+ DPRINTF1("ReadFrame: input frame too small (%lu)\n",
+ dwcbMax);
+ goto end;
+ }
+
+ pnf->dwSig = dwNFRAME_SIG;
+ pnf->dwSize = dwcbMax;
+ pnf->dwType = TSPNOTIF_TYPE_CPL;
+ pnf->dwFlags = fTSPNOTIF_FLAG_CPL_DEFAULT_COMMCONFIG_CHANGE;
+
+ #ifdef UNICODE
+ pnf->dwFlags |= fTSPNOTIF_FLAG_UNICODE;
+ #endif // UNICODE
+
+ lstrcpy((TCHAR *)pnf->rgb, lpctszFriendlyName);
+
+ printf("Sending ChangeDCC[%s]\n", lpctszFriendlyName);
+
+ fRet=TRUE;
+
+end:
+ return fRet;
+}
diff --git a/private/unimodem/new/slot/makefile b/private/unimodem/new/slot/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/new/slot/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/new/slot/sec.c b/private/unimodem/new/slot/sec.c
new file mode 100644
index 000000000..786e2b5ed
--- /dev/null
+++ b/private/unimodem/new/slot/sec.c
@@ -0,0 +1,169 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SEC.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/27/96 JosephJ Created
+//
+//
+// Description: Security-related helper functions
+//
+//****************************************************************************
+#define UNICODE
+#include <windows.h>
+#include <stdio.h>
+#include "sec.h"
+
+#define DPRINTF2(_format, _a1, _a2) printf(_format, _a1, _a2)
+
+#define ASSERT(_c) \
+ ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__))
+
+//****************************************************************************
+// Description: This procedure will allocate and initialize a security
+// descriptor with the specificed attributes.
+//
+// Returns: pointer to an allocated and initialized security descriptor.
+// If NULL, GetLastError() will return the appropriate error code.
+//
+// History:
+// 3/27/96 JosephJ Created
+//****************************************************************************/
+//
+PSECURITY_DESCRIPTOR AllocateSecurityDescriptor (
+ PSID_IDENTIFIER_AUTHORITY pSIA,
+ DWORD dwRID,
+ DWORD dwRights,
+ PSID pSidOwner,
+ PSID pSidGroup
+ )
+{
+ PSID pObjSid = NULL;
+ PACL pDacl = NULL;
+ PSECURITY_DESCRIPTOR pSD = NULL;
+
+ pSD = LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH+256);
+
+ if (!pSD) goto end_fail;
+
+ // Set up the SID for the admins that will be allowed to have
+ // access. This SID will have 1 sub-authority
+ if (!AllocateAndInitializeSid(
+ pSIA,
+ 1,
+ dwRID, 0, 0, 0, 0, 0, 0, 0,
+ &pObjSid
+ ))
+ {
+ goto end_fail;
+ }
+
+ // Set up the DACL that will allow all processes with the above SID
+ // access specified in dwRights. It should be large enough to hold all ACEs.
+ //
+ {
+ DWORD cbDaclSize = sizeof(ACCESS_ALLOWED_ACE) +
+ GetLengthSid(pObjSid) +
+ sizeof(ACL);
+
+ pDacl = (PACL)LocalAlloc( LPTR, cbDaclSize );
+ if (!pDacl)
+ {
+ goto end_fail;
+ }
+
+ if ( !InitializeAcl( pDacl, cbDaclSize, ACL_REVISION2 ) )
+ {
+ goto end_fail;
+ }
+ }
+
+ // Add the ACE to the DACL
+ //
+ if ( !AddAccessAllowedAce( pDacl, ACL_REVISION2, dwRights, pObjSid))
+ {
+ goto end_fail;
+ }
+
+ // Create the security descriptor and put the DACL in it.
+ //
+ if ( !InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION ))
+ {
+ goto end_fail;
+ }
+
+ if ( !SetSecurityDescriptorDacl(pSD, TRUE, pDacl, FALSE ) )
+ {
+ goto end_fail;
+ }
+
+ // Set owner for the descriptor
+ //
+ if ( !SetSecurityDescriptorOwner( pSD, pSidOwner, FALSE) )
+ {
+ goto end_fail;
+ }
+
+ // Set group for the descriptor
+ //
+ if ( !SetSecurityDescriptorGroup( pSD, pSidGroup, FALSE) )
+ {
+ goto end_fail;
+ }
+
+ FreeSid(pObjSid);
+ return pSD;
+
+
+end_fail:
+ {
+ DWORD dwRetCode = GetLastError();
+
+ if (pDacl) { LocalFree(pDacl); pDacl=0;}
+
+ if (pObjSid) { FreeSid(pObjSid); pObjSid=0;}
+
+ if (pSD) { LocalFree(pSD); pSD=0;}
+
+ SetLastError(dwRetCode);
+ }
+ return NULL;
+}
+
+
+//****************************************************************************
+// Description: Frees a security descriptor previously allocated by
+// AllocateSecurityDescriptor.
+//
+// History:
+// 3/27/96 JosephJ Created
+//****************************************************************************/
+void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD)
+{
+ PSID pObjSid = NULL;
+ PACL pDacl = NULL;
+ BOOL fGotAcl=FALSE, fByDefault=FALSE;
+
+
+ // Free Dacl, if user had allocated it.
+ if (GetSecurityDescriptorDacl(pSD, &fGotAcl, &pDacl, &fByDefault ))
+ {
+ if (fGotAcl && !fByDefault && pDacl)
+ {
+ LocalFree(pDacl);
+ }
+ }
+ else
+ {
+ ASSERT(FALSE); // We should not be calling this function with such
+ // an pSD.
+ }
+
+ LocalFree(pSD);
+
+}
diff --git a/private/unimodem/new/slot/sec.h b/private/unimodem/new/slot/sec.h
new file mode 100644
index 000000000..9ec615f7e
--- /dev/null
+++ b/private/unimodem/new/slot/sec.h
@@ -0,0 +1,24 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SEC.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/27/96 JosephJ Created
+//
+//
+// Description: Security-related helper functions
+//
+//****************************************************************************
+PSECURITY_DESCRIPTOR AllocateSecurityDescriptor (
+ PSID_IDENTIFIER_AUTHORITY pSIA,
+ DWORD dwRID,
+ DWORD dwRights,
+ PSID pSidOwner,
+ PSID pSidGroup
+ );
+void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD);
diff --git a/private/unimodem/new/slot/slot.c b/private/unimodem/new/slot/slot.c
new file mode 100644
index 000000000..35236c439
--- /dev/null
+++ b/private/unimodem/new/slot/slot.c
@@ -0,0 +1,486 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Implements the unimodem TSP notification mechanism:
+// The lower level (notifXXXX) APIs
+//
+//****************************************************************************
+
+#define UNICODE
+#include <windows.h>
+#include <stdio.h>
+#include "slot.h"
+#include "sec.h"
+
+#define T(_str) TEXT(_str)
+
+#define ASSERT(_c) \
+ ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__))
+#define DPRINTF(_fmt) printf(_fmt)
+#define DPRINTF1(_fmt,_arg) printf(_fmt,_arg)
+#define DPRINTF2(_fmt,_arg,_arg2) printf(_fmt,_arg,_arg2)
+#define DPRINTF3(_fmt,_arg,_arg2,_arg3) printf(_fmt,_arg,_arg2,_arg3)
+
+#define fNOTIF_STATE_DEINIT 0
+#define fNOTIF_STATE_INIT_SERVER 1
+#define fNOTIF_STATE_INIT_CLIENT 2
+
+#define IS_SERVER(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_SERVER)
+#define IS_CLIENT(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_CLIENT)
+
+
+// The following help define the fully-qualified mailslot and semaphore names.
+#define dwNOTIFSTATE_SIG (0x53CB31A0L)
+#define FULLNAME_TEMPLATE T("--.-mailslot-%08lx-%s")
+
+// Keeps the state of a notification (either client or server).
+// It is cast to a DWORD to form the handle returned by notifCreate()
+typedef struct
+{
+ DWORD dwSig; // should be dwNOTIFSTATE_SIG when inited
+ HANDLE hSem;
+ HANDLE hSlot;
+ DWORD dwState;
+ DWORD dwcbMax;
+
+} NOTIFICATION_STATE, *PNOTIFICATION_STATE;
+
+DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz,
+ DWORD dwMaxSize,
+ DWORD dwMaxPending);
+DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz);
+PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn);
+
+
+//****************************************************************************
+// Function: Creates a notification object -- either as server or client.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+HNOTIFICATION notifCreate(
+ BOOL fServer, // TRUE ==> Server
+ LPCTSTR lptszName, // Name to associate with this object
+ DWORD dwMaxSize, // Max size of frames written/read
+ // (Ignored if (!fServer))
+ DWORD dwMaxPending // Max number of notification frames allowed
+ // to be pending. (Ignored if (!fServer))
+)
+{
+ PNOTIFICATION_STATE pns=NULL;
+ HNOTIFICATION hn=0;
+ TCHAR rgtchTmp[MAX_NOTIFICATION_NAME_SIZE+23];
+ UINT u = lstrlen(lptszName);
+ DWORD dwErr=0;
+
+ // Format of semaphore name is --.-mailslot-sig-name
+ // Example: "--.-mailslot-8cb45651-unimodem"
+ // To create the equivalent mailslot, we run through and change
+ // all '-' to '\'s (if the name containts '-', they will get converted --
+ // big deal.)
+ if ((u+23)>(sizeof(rgtchTmp)/sizeof(TCHAR))) // 13(prefix)+ 9(sig-) +1(null)
+ {
+ dwErr = ERROR_INVALID_PARAMETER;
+ goto end;
+ }
+
+ pns=LocalAlloc(LPTR, sizeof(*pns));
+ if (!pns) goto end;
+
+ wsprintf(rgtchTmp,FULLNAME_TEMPLATE,
+ (unsigned long) dwNOTIFSTATE_SIG,
+ lptszName);
+
+ DPRINTF1("Semaphore name = [%s]\n", rgtchTmp);
+
+ if (fServer) dwErr = inotif_server_create(pns, rgtchTmp,
+ dwMaxSize, dwMaxPending);
+ else dwErr = inotif_client_open(pns, rgtchTmp);
+
+ if (dwErr) goto end;
+ pns->dwSig=dwNOTIFSTATE_SIG;
+ hn = (HNOTIFICATION)pns;
+
+end:
+ if (!hn)
+ {
+ if (!dwErr) dwErr=GetLastError();
+ if (pns) LocalFree(pns);
+ SetLastError(dwErr);
+ }
+ return hn;
+}
+
+//****************************************************************************
+// Function: Free a notification object
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void notifFree(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (hn)
+ {
+ pns->dwSig=0;
+ CloseHandle(pns->hSem); pns->hSem=0;
+ CloseHandle(pns->hSlot); pns->hSlot=0;
+ LocalFree(pns);
+ }
+}
+
+//****************************************************************************
+// Function: Retrieve the synchronization object handle accociated with
+// the notiication object. NOTE: This handle is valid until
+// the notification object is alive. It must NOT be deleted
+// externally. Must be a server object.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+HANDLE notifGetObj(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (pns && IS_SERVER(pns))
+ {
+ return pns->hSem;
+ }
+ else if (pns)
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return NULL;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return NULL;
+ }
+}
+
+//****************************************************************************
+// Function: Retrieves the max allowable size of the frame (server only)
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD notifGetMaxSize(HNOTIFICATION hn)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ if (pns && IS_SERVER(pns))
+ {
+ return pns->dwcbMax;
+ }
+ else
+ {
+ if (pns)
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+ return 0;
+ }
+}
+
+
+//****************************************************************************
+// Function: (Server only) Reads a notification msg, if any. Does not block.
+// A return value of FALSE and a GetLastError value of ERROR_NO_DATA
+// indicates that no frame was available..
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifReadMsg(HNOTIFICATION hn,
+ LPBYTE lpb,
+ DWORD dwcbMax,
+ LPDWORD lpdwRead)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ BOOL fRet=FALSE;
+ *lpdwRead=0;
+
+ if (pns)
+ {
+ DWORD dwRead=0;
+
+ if(!IS_SERVER(pns))
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ goto end;
+ }
+
+ fRet = ReadFile(pns->hSlot, lpb, dwcbMax, lpdwRead, NULL);
+
+ if (!fRet)
+ {
+ DPRINTF("ReadFile failed!\n");
+ goto end;
+ }
+
+ DPRINTF("Success!\n");
+ fRet=TRUE;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+
+end:
+ return fRet;
+}
+
+
+//****************************************************************************
+// Function: Returns the size of the next frame in the queue. Returns TRUE
+// even if there is no data in the queue -- in this case, *lpdwcb
+// is set to 0. Returns FALSE if there is some other error.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb)
+{
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return FALSE;
+}
+
+
+//****************************************************************************
+// Function: (Client side). Write a notification msg.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb)
+{
+ PNOTIFICATION_STATE pns = inotif_getstate(hn);
+ BOOL fRet=FALSE;
+
+ if (pns)
+ {
+ DWORD dwWritten=0;
+
+ if(!IS_CLIENT(pns))
+ {
+ SetLastError(ERROR_NOT_SUPPORTED);
+ goto end;
+ }
+
+ fRet = WriteFile(pns->hSlot, lpb, dwcb, &dwWritten, NULL);
+ if (fRet)
+ {
+ fRet=ReleaseSemaphore(pns->hSem,1,NULL);
+ if (!fRet)
+ {
+ DPRINTF("ReleaseSemaphore failed!\n");
+ goto end;
+ }
+ }
+ if (!fRet || dwWritten!=dwcb)
+ {
+ DWORD dwErr = GetLastError();
+ DPRINTF3("WriteFile failed. fRet=%lu; dwWritten=%lu; Err=%lu\n",
+ fRet, dwcb, dwErr);
+ SetLastError(dwErr);
+ goto end;
+ }
+ DPRINTF("notifWriteFrame: success!\n");
+ fRet=TRUE;
+ }
+ else
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ }
+
+end:
+ return fRet;
+}
+
+
+//****************************************************************************
+// Function: (internal) create the notif object -- server side.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz, DWORD dwMaxSize,
+ DWORD dwMaxPending)
+{
+ DWORD dwErr=ERROR_INVALID_PARAMETER;
+ TCHAR c, *pc = lptsz;
+ SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY;
+ SECURITY_ATTRIBUTES sa, *psa=NULL;
+
+ PSECURITY_DESCRIPTOR pSD = AllocateSecurityDescriptor (
+ &siaWorld,
+ SECURITY_WORLD_RID,
+ STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL
+ | SEMAPHORE_ALL_ACCESS
+ | SEMAPHORE_MODIFY_STATE
+ | GENERIC_READ
+ | GENERIC_WRITE
+ ,
+ NULL,
+ NULL
+ );
+
+ if (!pSD)
+ {
+ DPRINTF1("WARNING:AllocateSecurityDescriptor(-) returns error 0x%lx\n",
+ GetLastError());
+ }
+ else
+ {
+ DPRINTF("AllocateSecurityDescriptor(-) returns SUCCESS\n");
+ sa.nLength = sizeof(sa);
+ sa.bInheritHandle=FALSE;
+ sa.lpSecurityDescriptor = pSD;
+ psa = &sa;
+
+ }
+
+
+ // Create mailslot name -- make sure there are no '\'s
+ while(c=*pc++) {if (c=='\\') pc[-1]='-';}
+ DPRINTF1("Semaphore name = [%s]\n", lptsz);
+
+ // Create Semaphore
+ {
+ pns->hSem=CreateSemaphore(psa, 0, dwMaxPending, lptsz);
+ if (pns->hSem && (dwErr=(GetLastError()==ERROR_ALREADY_EXISTS)))
+ {
+ DPRINTF1("Semaphore %s already exists!\n", lptsz);
+ CloseHandle(pns->hSem);
+ pns->hSem=NULL;
+ }
+ if (!pns->hSem) goto end_fail;
+ }
+
+ // Create mailslot name
+ pc = lptsz;
+ while(c=*pc++) {if (c=='-') pc[-1]='\\';}
+
+ DPRINTF1("Mailslot name = [%s]\n", lptsz);
+
+ // CreateMailSlot -- specify size, zero-delay
+ pns->hSlot=CreateMailslot(lptsz, dwMaxSize, 0, psa);
+ if (!pns->hSlot)
+ {
+ dwErr = GetLastError();
+ CloseHandle(pns->hSem); pns->hSem=0;
+ goto end_fail;
+ }
+
+ DPRINTF("Mailslot created!\n");
+
+ // set state and maxsize
+ pns->dwState=fNOTIF_STATE_INIT_SERVER;
+ pns->dwcbMax=dwMaxSize;
+ dwErr=0;
+ goto end;
+
+end_fail:
+ if (!dwErr) dwErr=GetLastError();
+ if (!dwErr) dwErr=ERROR_INVALID_PARAMETER;
+
+end:
+ if (pSD) {FreeSecurityDescriptor(pSD);}
+ return dwErr;
+}
+
+
+//****************************************************************************
+// Function: (internal) create the notif object -- client side.
+// The server must be already up and running, or we will
+// fail.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz)
+{
+ DWORD dwErr=ERROR_INVALID_PARAMETER;
+ TCHAR c, *pc = lptsz;
+
+ // Create mailslot name -- convert '-' to '\';
+ while(c=*pc++) {if (c=='-') pc[-1]='\\';}
+ DPRINTF1("Mailslot name = [%s]\n", lptsz);
+
+ // Open mailslot ...
+ pns->hSlot=CreateFile(
+ lptsz,
+ GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL
+ );
+
+ if (!pns->hSlot)
+ {
+ DPRINTF("Couldn't open mailslot for writing\n");
+ goto end_fail;
+ }
+
+ // Create Semaphore name -- convert '\' to '-';
+ pc=lptsz;
+ while(c=*pc++) {if (c=='\\') pc[-1]='-';}
+ DPRINTF1("Sempahore name = [%s]\n", lptsz);
+
+ pns->hSem=OpenSemaphore(SEMAPHORE_MODIFY_STATE, FALSE, lptsz);
+ //pns->hSem=OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, lptsz);
+ if (!pns->hSem) {
+ DPRINTF("Could not open semaphore\n");
+ dwErr=GetLastError();
+ CloseHandle(pns->hSlot); pns->hSlot=0;
+ goto end_fail;
+ }
+
+ // set state and maxsize
+ pns->dwState=fNOTIF_STATE_INIT_CLIENT;
+ pns->dwcbMax=0; // Apparently you can't get the max size of the mailslot.
+ dwErr=0;
+ goto end;
+
+end_fail:
+ if (!dwErr) dwErr=GetLastError();
+ if (!dwErr) dwErr=ERROR_INVALID_PARAMETER;
+
+end:
+ return dwErr;
+}
+
+//****************************************************************************
+// Function: (internal) validates and converts a handle to a ptr to state.
+//
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn)
+{
+ if (hn)
+ {
+ PNOTIFICATION_STATE pns= (PNOTIFICATION_STATE) hn;
+ if (pns->dwSig!=dwNOTIFSTATE_SIG)
+ {
+ DPRINTF1("Bad hotification handle 0x%lu\n", hn);
+ ASSERT(FALSE);
+ return NULL;
+ }
+ return pns;
+ }
+ return NULL;
+}
diff --git a/private/unimodem/new/slot/slot.h b/private/unimodem/new/slot/slot.h
new file mode 100644
index 000000000..a8ea4fbe9
--- /dev/null
+++ b/private/unimodem/new/slot/slot.h
@@ -0,0 +1,32 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Interface to the unimodem TSP notification mechanism:
+// The lower level (notifXXXX) APIs
+//
+//****************************************************************************
+
+#define MAX_NOTIFICATION_NAME_SIZE 256
+
+
+typedef DWORD HNOTIFICATION;
+
+HNOTIFICATION notifCreate(BOOL fServer, LPCTSTR lptszName, DWORD dwMaxSize,
+ DWORD dwMaxPending);
+void notifFree(HNOTIFICATION hn);
+
+HANDLE notifGetObj(HNOTIFICATION hn);
+DWORD notifGetMaxSize(HNOTIFICATION hn);
+BOOL notifReadMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb, LPDWORD lpdwRead);
+BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb);
+BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb);
diff --git a/private/unimodem/new/slot/sources b/private/unimodem/new/slot/sources
new file mode 100644
index 000000000..fb7d59080
--- /dev/null
+++ b/private/unimodem/new/slot/sources
@@ -0,0 +1,27 @@
+MAJORCOMP=net
+MINORCOMP=unimodem
+
+TARGETNAME=tslot
+TARGETPATH=obj
+TARGETTYPE=PROGRAM
+TARGETLIBS=\
+ $(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib
+
+
+INCLUDES=$(BASEDIR)\public\sdk\inc;.
+
+C_DEFINES=-DWINVER=0x0400
+
+USE_CRTDLL=1
+
+SOURCES=slot.c \
+ client.c \
+ sec.c \
+ main.c
+
+UMTYPE=console
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/resource/external.ico b/private/unimodem/resource/external.ico
new file mode 100644
index 000000000..61798814e
--- /dev/null
+++ b/private/unimodem/resource/external.ico
Binary files differ
diff --git a/private/unimodem/resource/internal.ico b/private/unimodem/resource/internal.ico
new file mode 100644
index 000000000..6550b5c40
--- /dev/null
+++ b/private/unimodem/resource/internal.ico
Binary files differ
diff --git a/private/unimodem/resource/modem.ico b/private/unimodem/resource/modem.ico
new file mode 100644
index 000000000..e20d9aafb
--- /dev/null
+++ b/private/unimodem/resource/modem.ico
Binary files differ
diff --git a/private/unimodem/resource/nullmdm.ico b/private/unimodem/resource/nullmdm.ico
new file mode 100644
index 000000000..0ab0b33af
--- /dev/null
+++ b/private/unimodem/resource/nullmdm.ico
Binary files differ
diff --git a/private/unimodem/resource/pcmcia.ico b/private/unimodem/resource/pcmcia.ico
new file mode 100644
index 000000000..d16be97da
--- /dev/null
+++ b/private/unimodem/resource/pcmcia.ico
Binary files differ
diff --git a/private/unimodem/serialui/cstrings.c b/private/unimodem/serialui/cstrings.c
new file mode 100644
index 000000000..9b23635b5
--- /dev/null
+++ b/private/unimodem/serialui/cstrings.c
@@ -0,0 +1,30 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: cstrings.c
+//
+// This file contains read-only string constants
+//
+// History:
+// 12-23-93 ScottH Created
+// 11-06-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+#include "proj.h"
+
+#pragma data_seg(DATASEG_READONLY)
+
+TCHAR const FAR c_szWinHelpFile[] = TEXT("windows.hlp");
+
+// Registry key names
+
+TCHAR const FAR c_szPortClass[] = TEXT("ports");
+TCHAR const FAR c_szDeviceDesc[] = TEXT("DeviceDesc");
+TCHAR const FAR c_szPortName[] = TEXT("PortName");
+TCHAR const FAR c_szFriendlyName[] = REGSTR_VAL_FRIENDLYNAME;
+TCHAR const FAR c_szDCB[] = TEXT("DCB");
+
+#pragma data_seg()
+
diff --git a/private/unimodem/serialui/cstrings.h b/private/unimodem/serialui/cstrings.h
new file mode 100644
index 000000000..432253aef
--- /dev/null
+++ b/private/unimodem/serialui/cstrings.h
@@ -0,0 +1,23 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: cstrings.h
+//
+//---------------------------------------------------------------------------
+
+#ifndef _CSTRINGS_H_
+#define _CSTRINGS_H_
+
+extern TCHAR const FAR c_szWinHelpFile[];
+
+// Registry key names
+
+extern TCHAR const FAR c_szPortClass[];
+extern TCHAR const FAR c_szDeviceDesc[];
+extern TCHAR const FAR c_szPortName[];
+extern TCHAR const FAR c_szFriendlyName[];
+extern TCHAR const FAR c_szDCB[];
+
+#endif // _CSTRINGS_H_
+
diff --git a/private/unimodem/serialui/dlgids.h b/private/unimodem/serialui/dlgids.h
new file mode 100644
index 000000000..c36d5f5e1
--- /dev/null
+++ b/private/unimodem/serialui/dlgids.h
@@ -0,0 +1,42 @@
+//{{NO_DEPENDENCIES}}
+// App Studio generated include file.
+// Used by TEMPLATE.RC
+//
+#define IDD_ADV_PORT 101
+#define IDD_PORTSETTINGS 119
+#define IDC_DEFAULTS 1000
+#define IDC_RXFIFO_USAGE 1003
+#define IDC_TXFIFO_USAGE 1004
+#define IDC_LBL_RXFIFO 1005
+#define IDC_LBL_RXFIFO_LO 1006
+#define IDC_LBL_RXFIFO_HI 1007
+#define IDC_FIFO_USAGE 1008
+#define IDC_LBL_TXFIFO 1009
+#define IDC_LBL_TXFIFO_LO 1010
+#define IDC_LBL_TXFIFO_HI 1011
+#define IDC_PS_PORT 1046
+#define IDC_PS_LBL_BAUDRATE 1047
+#define IDC_PS_BAUDRATE 1048
+#define IDC_PS_LBL_DATABITS 1049
+#define IDC_PS_DATABITS 1050
+#define IDC_PS_LBL_PARITY 1051
+#define IDC_PS_PARITY 1052
+#define IDC_PS_LBL_STOPBITS 1053
+#define IDC_PS_STOPBITS 1054
+#define IDC_PS_LBL_FLOWCTL 1055
+#define IDC_PS_FLOWCTL 1056
+#define IDC_PS_PB_RESTORE 1058
+#define IDC_PS_ADVANCED 1059
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 103
+#define _APS_NEXT_COMMAND_VALUE 101
+#define _APS_NEXT_CONTROL_VALUE 1061
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/private/unimodem/serialui/dll.c b/private/unimodem/serialui/dll.c
new file mode 100644
index 000000000..1df35f06d
--- /dev/null
+++ b/private/unimodem/serialui/dll.c
@@ -0,0 +1,291 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1995
+//
+// File: dll.c
+//
+// This file contains the library entry points
+//
+// History:
+// 12-23-93 ScottH Created
+// 9-22-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h"
+#include <rovdbg.h> // debug assertion code
+
+// Global data
+//
+int g_cProcesses = 0;
+BOOL g_bAdminUser;
+
+#ifdef WIN32
+
+CRITICAL_SECTION g_csDll = { 0 };
+
+#endif // WIN32
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the DLL
+Returns:
+Cond: --
+*/
+BOOL PRIVATE Dll_Initialize(void)
+ {
+ BOOL bRet = TRUE;
+
+ InitCommonControls();
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Register window classes per process
+Returns:
+Cond: --
+*/
+BOOL PRIVATE InitWindowClasses(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Terminate DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_Terminate(
+ HINSTANCE hinst)
+ {
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Unregister window classes per process
+Returns:
+Cond: --
+*/
+void PRIVATE TermWindowClasses(
+ HINSTANCE hinst)
+ {
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Attach a process to this DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessAttach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+#ifdef WIN32
+
+ if (g_cProcesses == 0)
+ {
+ InitializeCriticalSection(&g_csDll);
+ }
+
+ g_bAdminUser = IsAdminUser();
+#endif // WIN32
+
+ if (bSuccess)
+ {
+ g_hinst = hDll;
+
+#ifdef DEBUG
+
+ // We do this simply to load the debug .ini flags
+ //
+ RovComm_ProcessIniFile();
+
+ TRACE_MSG(TF_GENERAL, "Process Attach [%d] (hDll = %lx)", g_cProcesses, hDll);
+ DEBUG_BREAK(BF_ONPROCESSATT);
+
+#endif
+
+ if (g_cProcesses++ == 0)
+ {
+ bSuccess = Dll_Initialize();
+ }
+
+ if (bSuccess)
+ {
+ // (Only do this if we succeeded above)
+ //
+ // Register the window classes again (they are per-process)
+ //
+ bSuccess = InitWindowClasses(hDll);
+ }
+ }
+
+ return bSuccess;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Detach a process from the DLL
+Returns: --
+Cond: --
+*/
+BOOL PRIVATE Dll_ProcessDetach(HINSTANCE hDll)
+ {
+ BOOL bSuccess = TRUE;
+
+ ASSERT(hDll == g_hinst);
+
+ DEBUG_CODE( TRACE_MSG(TF_GENERAL, "Process Detach [%d] (hDll = %lx)",
+ g_cProcesses-1, hDll); )
+
+ DEBUG_CODE( DEBUG_BREAK(BF_ONPROCESSDET); )
+
+ if (--g_cProcesses == 0)
+ {
+ bSuccess = Dll_Terminate(g_hinst);
+ }
+
+#ifdef WIN32
+
+ if (g_cProcesses == 0)
+ {
+ DeleteCriticalSection(&g_csDll);
+ }
+
+#endif // WIN32
+
+ TermWindowClasses(hDll);
+
+ return bSuccess;
+ }
+
+
+//
+// Per-instance data
+//
+#pragma data_seg(DATASEG_PERINSTANCE)
+
+HINSTANCE g_hinst = 0;
+
+#pragma data_seg()
+
+
+// **************************************************************************
+// WIN32 specific code
+// **************************************************************************
+
+#ifdef WIN32
+
+#ifdef DEBUG
+BOOL g_bExclusive=FALSE;
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Enter an exclusive section
+Returns: --
+Cond: --
+*/
+void PUBLIC Dll_EnterExclusive(void)
+ {
+ EnterCriticalSection(&g_csDll);
+
+#ifdef DEBUG
+ g_bExclusive = TRUE;
+#endif
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Leave an exclusive section
+Returns: --
+Cond: --
+*/
+void PUBLIC Dll_LeaveExclusive(void)
+ {
+#ifdef DEBUG
+ g_bExclusive = FALSE;
+#endif
+
+ LeaveCriticalSection(&g_csDll);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Win32 Libmain
+Returns: --
+Cond: --
+*/
+BOOL APIENTRY LibMain(
+ HANDLE hDll,
+ DWORD dwReason,
+ LPVOID lpReserved)
+ {
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ Dll_ProcessAttach(hDll);
+ break;
+
+ case DLL_PROCESS_DETACH:
+ Dll_ProcessDetach(hDll);
+ break;
+
+ case DLL_THREAD_ATTACH:
+
+#ifdef DEBUG
+
+ DEBUG_BREAK(BF_ONTHREADATT);
+
+#endif
+
+ break;
+
+ case DLL_THREAD_DETACH:
+
+#ifdef DEBUG
+
+ DEBUG_BREAK(BF_ONTHREADDET);
+
+#endif
+
+ break;
+
+ default:
+ break;
+ }
+
+ return TRUE;
+ }
+
+
+#else // WIN32
+
+
+// **************************************************************************
+// WIN16 specific code
+// **************************************************************************
+
+
+BOOL CALLBACK LibMain(HINSTANCE hinst, UINT wDS, DWORD unused)
+ {
+ return Dll_ProcessAttach(hinst);
+ }
+
+BOOL CALLBACK WEP(BOOL fSystemExit)
+ {
+ return Dll_ProcessDetach(g_hinst);
+ }
+
+#endif // WIN32
+
+
+
+
diff --git a/private/unimodem/serialui/dll.h b/private/unimodem/serialui/dll.h
new file mode 100644
index 000000000..2157968ef
--- /dev/null
+++ b/private/unimodem/serialui/dll.h
@@ -0,0 +1,44 @@
+//
+// dll.h
+//
+
+#ifndef __DLL_H__
+#define __DLL_H__
+
+extern HINSTANCE g_hinst;
+
+#ifdef WIN32
+
+// Notes:
+// 1. Never "return" from the critical section.
+// 2. Never "SendMessage" or "Yield" from the critical section.
+// 3. Never call USER API which may yield.
+// 4. Always make the critical section as small as possible.
+// 5. Critical sections in Win95 block across processes. In NT
+// they are per-process only, so use mutexes instead.
+//
+
+#define WIN32_CODE(x) x
+
+void PUBLIC Dll_EnterExclusive(void);
+void PUBLIC Dll_LeaveExclusive(void);
+extern BOOL g_bExclusive;
+extern BOOL g_bAdminUser;
+#define USER_IS_ADMIN() (g_bAdminUser)
+
+#define ENTER_X() Dll_EnterExclusive();
+#define LEAVE_X() Dll_LeaveExclusive();
+#define ASSERT_X() ASSERT(g_bExclusive)
+
+#else // WIN32
+
+#define WIN32_CODE(x)
+
+#define ENTER_X()
+#define LEAVE_X()
+#define ASSERT_X()
+
+#endif // WIN32
+
+#endif //!__DLL_H__
+
diff --git a/private/unimodem/serialui/makefile b/private/unimodem/serialui/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/serialui/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/serialui/port.c b/private/unimodem/serialui/port.c
new file mode 100644
index 000000000..5d0068b49
--- /dev/null
+++ b/private/unimodem/serialui/port.c
@@ -0,0 +1,1085 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: port.c
+//
+// This files contains the dialog code for the Port Settings property page.
+//
+// History:
+// 2-09-94 ScottH Created
+// 11-06-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h"
+
+#ifdef CS_HELP // Context-sensitive help
+#include "..\..\..\..\win\core\inc\help.h"
+#endif
+
+// This is the structure that is used to fill the
+// max speed listbox
+typedef struct _Bauds
+ {
+ DWORD dwDTERate;
+ int ids;
+ } Bauds;
+
+static Bauds g_rgbauds[] = {
+ { 110L, IDS_BAUD_110 },
+ { 300L, IDS_BAUD_300 },
+ { 1200L, IDS_BAUD_1200 },
+ { 2400L, IDS_BAUD_2400 },
+ { 4800L, IDS_BAUD_4800 },
+ { 9600L, IDS_BAUD_9600 },
+ { 19200, IDS_BAUD_19200 },
+ { 38400, IDS_BAUD_38400 },
+ { 57600, IDS_BAUD_57600 },
+ { 115200, IDS_BAUD_115200 },
+ { 230400, IDS_BAUD_230400 },
+ { 460800, IDS_BAUD_460800 },
+ { 921600, IDS_BAUD_921600 },
+ };
+
+// Command IDs for the parity listbox
+#define CMD_PARITY_EVEN 1
+#define CMD_PARITY_ODD 2
+#define CMD_PARITY_NONE 3
+#define CMD_PARITY_MARK 4
+#define CMD_PARITY_SPACE 5
+
+// Command IDs for the flow control listbox
+#define CMD_FLOWCTL_XONXOFF 1
+#define CMD_FLOWCTL_HARDWARE 2
+#define CMD_FLOWCTL_NONE 3
+
+// This table is the generic port settings table
+// that is used to fill the various listboxes
+typedef struct _PortValues
+ {
+ union {
+ BYTE bytesize;
+ BYTE cmd;
+ BYTE stopbits;
+ };
+ int ids;
+ } PortValues, FAR * LPPORTVALUES;
+
+
+#pragma data_seg(DATASEG_READONLY)
+
+// This is the structure that is used to fill the data bits listbox
+static PortValues s_rgbytesize[] = {
+ { 4, IDS_BYTESIZE_4 },
+ { 5, IDS_BYTESIZE_5 },
+ { 6, IDS_BYTESIZE_6 },
+ { 7, IDS_BYTESIZE_7 },
+ { 8, IDS_BYTESIZE_8 },
+ };
+
+// This is the structure that is used to fill the parity listbox
+static PortValues s_rgparity[] = {
+ { CMD_PARITY_EVEN, IDS_PARITY_EVEN },
+ { CMD_PARITY_ODD, IDS_PARITY_ODD },
+ { CMD_PARITY_NONE, IDS_PARITY_NONE },
+ { CMD_PARITY_MARK, IDS_PARITY_MARK },
+ { CMD_PARITY_SPACE, IDS_PARITY_SPACE },
+ };
+
+// This is the structure that is used to fill the stopbits listbox
+static PortValues s_rgstopbits[] = {
+ { ONESTOPBIT, IDS_STOPBITS_1 },
+ { ONE5STOPBITS, IDS_STOPBITS_1_5 },
+ { TWOSTOPBITS, IDS_STOPBITS_2 },
+ };
+
+// This is the structure that is used to fill the flow control listbox
+static PortValues s_rgflowctl[] = {
+ { CMD_FLOWCTL_XONXOFF, IDS_FLOWCTL_XONXOFF },
+ { CMD_FLOWCTL_HARDWARE, IDS_FLOWCTL_HARDWARE },
+ { CMD_FLOWCTL_NONE, IDS_FLOWCTL_NONE },
+ };
+
+#pragma data_seg()
+
+
+typedef struct tagPORT
+ {
+ HWND hdlg; // dialog handle
+ HWND hwndBaudRate;
+ HWND hwndDataBits;
+ HWND hwndParity;
+ HWND hwndStopBits;
+ HWND hwndFlowCtl;
+
+ LPPORTINFO pportinfo; // pointer to shared working buffer
+
+ } PORT, FAR * PPORT;
+
+
+// This structure contains the default settings for the dialog
+static struct _DefPortSettings
+ {
+ int iSelBaud;
+ int iSelDataBits;
+ int iSelParity;
+ int iSelStopBits;
+ int iSelFlowCtl;
+ } s_defportsettings;
+
+// These are default settings
+#define DEFAULT_BAUDRATE 9600L
+#define DEFAULT_BYTESIZE 8
+#define DEFAULT_PARITY CMD_PARITY_NONE
+#define DEFAULT_STOPBITS ONESTOPBIT
+#define DEFAULT_FLOWCTL CMD_FLOWCTL_NONE
+
+
+#define Port_GetPtr(hwnd) (PPORT)GetWindowLong(hwnd, DWL_USER)
+#define Port_SetPtr(hwnd, lp) (PPORT)SetWindowLong(hwnd, DWL_USER, (LONG)(lp))
+
+UINT WINAPI FeFiFoFum(HWND hwndOwner, LPCTSTR pszPortName);
+
+
+/*----------------------------------------------------------
+Purpose: Fills the baud rate combobox with the possible baud
+ rates that Windows supports.
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_FillBaud(
+ PPORT this)
+ {
+ HWND hwndCB = this->hwndBaudRate;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+ int i;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ int iSel;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAYSIZE(g_rgbauds); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, g_rgbauds[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, g_rgbauds[i].dwDTERate);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_BAUDRATE == g_rgbauds[i].dwDTERate)
+ {
+ iDef = n;
+ }
+ if (pdcb->BaudRate == g_rgbauds[i].dwDTERate)
+ {
+ iMatch = n;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+ s_defportsettings.iSelBaud = iDef;
+
+ // Does the DCB baudrate exist in our list of baud rates?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the bytesize combobox with the possible byte sizes.
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_FillDataBits(
+ PPORT this)
+ {
+ HWND hwndCB = this->hwndDataBits;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAYSIZE(s_rgbytesize); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgbytesize[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgbytesize[i].bytesize);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_BYTESIZE == s_rgbytesize[i].bytesize)
+ {
+ iDef = n;
+ }
+ if (pdcb->ByteSize == s_rgbytesize[i].bytesize)
+ {
+ iMatch = n;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+ s_defportsettings.iSelDataBits = iDef;
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the parity combobox with the possible settings.
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_FillParity(
+ PPORT this)
+ {
+ HWND hwndCB = this->hwndParity;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAYSIZE(s_rgparity); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgparity[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgparity[i].cmd);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_PARITY == s_rgparity[i].cmd)
+ {
+ iDef = n;
+ }
+ switch (s_rgparity[i].cmd)
+ {
+ case CMD_PARITY_EVEN:
+ if (TRUE == pdcb->fParity && EVENPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_ODD:
+ if (TRUE == pdcb->fParity && ODDPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_NONE:
+ if (FALSE == pdcb->fParity && NOPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_MARK:
+ if (TRUE == pdcb->fParity && MARKPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ case CMD_PARITY_SPACE:
+ if (TRUE == pdcb->fParity && SPACEPARITY == pdcb->Parity)
+ iMatch = n;
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+ s_defportsettings.iSelParity = iDef;
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the stopbits combobox with the possible settings.
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_FillStopBits(
+ PPORT this)
+ {
+ HWND hwndCB = this->hwndStopBits;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAYSIZE(s_rgstopbits); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgstopbits[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgstopbits[i].stopbits);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_STOPBITS == s_rgstopbits[i].stopbits)
+ {
+ iDef = n;
+ }
+ if (pdcb->StopBits == s_rgstopbits[i].stopbits)
+ {
+ iMatch = n;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+ s_defportsettings.iSelStopBits = iDef;
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Fills the flow control combobox with the possible settings.
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_FillFlowCtl(
+ PPORT this)
+ {
+ HWND hwndCB = this->hwndFlowCtl;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+ int i;
+ int iSel;
+ int n;
+ int iMatch = -1;
+ int iDef = -1;
+ TCHAR sz[MAXMEDLEN];
+
+ // Fill the listbox
+ for (i = 0; i < ARRAYSIZE(s_rgflowctl); i++)
+ {
+ n = ComboBox_AddString(hwndCB, SzFromIDS(g_hinst, s_rgflowctl[i].ids, sz, SIZECHARS(sz)));
+ ComboBox_SetItemData(hwndCB, n, s_rgflowctl[i].cmd);
+
+ // Keep our eyes peeled for important values
+ if (DEFAULT_FLOWCTL == s_rgflowctl[i].cmd)
+ {
+ iDef = n;
+ }
+ switch (s_rgflowctl[i].cmd)
+ {
+ case CMD_FLOWCTL_XONXOFF:
+ if (TRUE == pdcb->fOutX && FALSE == pdcb->fOutxCtsFlow)
+ iMatch = n;
+ break;
+
+ case CMD_FLOWCTL_HARDWARE:
+ if (FALSE == pdcb->fOutX && TRUE == pdcb->fOutxCtsFlow)
+ iMatch = n;
+ break;
+
+ case CMD_FLOWCTL_NONE:
+ if (FALSE == pdcb->fOutX && FALSE == pdcb->fOutxCtsFlow)
+ iMatch = n;
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+ }
+
+ ASSERT(-1 != iDef);
+ s_defportsettings.iSelFlowCtl = iDef;
+
+ // Does the DCB value exist in our list?
+ if (-1 == iMatch)
+ {
+ // No; choose the default
+ iSel = iDef;
+ }
+ else
+ {
+ // Yes; choose the matched value
+ ASSERT(-1 != iMatch);
+ iSel = iMatch;
+ }
+ ComboBox_SetCurSel(hwndCB, iSel);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_INITDIALOG Handler
+Returns: FALSE when we assign the control focus
+Cond: --
+*/
+BOOL PRIVATE Port_OnInitDialog(
+ PPORT this,
+ HWND hwndFocus,
+ LPARAM lParam) // expected to be PROPSHEETINFO
+ {
+ LPPROPSHEETPAGE lppsp = (LPPROPSHEETPAGE)lParam;
+ HWND hwnd = this->hdlg;
+
+ ASSERT((LPTSTR)lppsp->lParam);
+
+ this->pportinfo = (LPPORTINFO)lppsp->lParam;
+
+ // Save away the window handles
+ this->hwndBaudRate = GetDlgItem(hwnd, IDC_PS_BAUDRATE);
+ this->hwndDataBits = GetDlgItem(hwnd, IDC_PS_DATABITS);
+ this->hwndParity = GetDlgItem(hwnd, IDC_PS_PARITY);
+ this->hwndStopBits = GetDlgItem(hwnd, IDC_PS_STOPBITS);
+ this->hwndFlowCtl = GetDlgItem(hwnd, IDC_PS_FLOWCTL);
+
+ Port_FillBaud(this);
+ Port_FillDataBits(this);
+ Port_FillParity(this);
+ Port_FillStopBits(this);
+ Port_FillFlowCtl(this);
+
+#if !defined(SUPPORT_FIFO)
+
+ // Hide and disable the Advanced button
+ ShowWindow(GetDlgItem(hwnd, IDC_PS_ADVANCED), FALSE);
+ EnableWindow(GetDlgItem(hwnd, IDC_PS_ADVANCED), FALSE);
+
+#endif
+
+ return TRUE; // allow USER to set the initial focus
+ }
+
+/*----------------------------------------------------------
+Purpose: WM_COMMAND Handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_OnCommand(
+ PPORT this,
+ int id,
+ HWND hwndCtl,
+ UINT uNotifyCode)
+ {
+ HWND hwnd = this->hdlg;
+
+ switch (id)
+ {
+ case IDC_PS_PB_RESTORE:
+ // Set the values to the default settings
+ ComboBox_SetCurSel(this->hwndBaudRate, s_defportsettings.iSelBaud);
+ ComboBox_SetCurSel(this->hwndDataBits, s_defportsettings.iSelDataBits);
+ ComboBox_SetCurSel(this->hwndParity, s_defportsettings.iSelParity);
+ ComboBox_SetCurSel(this->hwndStopBits, s_defportsettings.iSelStopBits);
+ ComboBox_SetCurSel(this->hwndFlowCtl, s_defportsettings.iSelFlowCtl);
+ break;
+
+#ifdef SUPPORT_FIFO
+
+ case IDC_PS_ADVANCED:
+ FeFiFoFum(this->hdlg, this->pportinfo->szFriendlyName);
+ break;
+
+#endif
+
+ default:
+ break;
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: PSN_APPLY handler
+Returns: --
+Cond: --
+*/
+void PRIVATE Port_OnApply(
+ PPORT this)
+ {
+ int iSel;
+ BYTE cmd;
+ WIN32DCB FAR * pdcb = &this->pportinfo->dcb;
+
+ // Determine new speed settings
+ iSel = ComboBox_GetCurSel(this->hwndBaudRate);
+ pdcb->BaudRate = ComboBox_GetItemData(this->hwndBaudRate, iSel);
+
+
+ // Determine new byte size
+ iSel = ComboBox_GetCurSel(this->hwndDataBits);
+ pdcb->ByteSize = (BYTE)ComboBox_GetItemData(this->hwndDataBits, iSel);
+
+
+ // Determine new parity settings
+ iSel = ComboBox_GetCurSel(this->hwndParity);
+ cmd = (BYTE)ComboBox_GetItemData(this->hwndParity, iSel);
+ switch (cmd)
+ {
+ case CMD_PARITY_EVEN:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = EVENPARITY;
+ break;
+
+ case CMD_PARITY_ODD:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = ODDPARITY;
+ break;
+
+ case CMD_PARITY_NONE:
+ pdcb->fParity = FALSE;
+ pdcb->Parity = NOPARITY;
+ break;
+
+ case CMD_PARITY_MARK:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = MARKPARITY;
+ break;
+
+ case CMD_PARITY_SPACE:
+ pdcb->fParity = TRUE;
+ pdcb->Parity = SPACEPARITY;
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+
+ // Determine new stopbits setting
+ iSel = ComboBox_GetCurSel(this->hwndStopBits);
+ pdcb->StopBits = (BYTE)ComboBox_GetItemData(this->hwndStopBits, iSel);
+
+
+ // Determine new flow control settings
+ iSel = ComboBox_GetCurSel(this->hwndFlowCtl);
+ cmd = (BYTE)ComboBox_GetItemData(this->hwndFlowCtl, iSel);
+ switch (cmd)
+ {
+ case CMD_FLOWCTL_XONXOFF:
+ pdcb->fOutX = TRUE;
+ pdcb->fInX = TRUE;
+ pdcb->fOutxCtsFlow = FALSE;
+ pdcb->fRtsControl = RTS_CONTROL_DISABLE;
+ break;
+
+ case CMD_FLOWCTL_HARDWARE:
+ pdcb->fOutX = FALSE;
+ pdcb->fInX = FALSE;
+ pdcb->fOutxCtsFlow = TRUE;
+ pdcb->fRtsControl = RTS_CONTROL_HANDSHAKE;
+ break;
+
+ case CMD_FLOWCTL_NONE:
+ pdcb->fOutX = FALSE;
+ pdcb->fInX = FALSE;
+ pdcb->fOutxCtsFlow = FALSE;
+ pdcb->fRtsControl = RTS_CONTROL_DISABLE;
+ break;
+
+ default:
+ ASSERT(0); // should never be here
+ break;
+ }
+
+ this->pportinfo->idRet = IDOK;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: WM_NOTIFY handler
+Returns: varies
+Cond: --
+*/
+LRESULT PRIVATE Port_OnNotify(
+ PPORT this,
+ int idFrom,
+ NMHDR FAR * lpnmhdr)
+ {
+ LRESULT lRet = 0;
+
+ switch (lpnmhdr->code)
+ {
+ case PSN_SETACTIVE:
+ break;
+
+ case PSN_KILLACTIVE:
+ // N.b. This message is not sent if user clicks Cancel!
+ // N.b. This message is sent prior to PSN_APPLY
+ //
+ break;
+
+ case PSN_APPLY:
+ Port_OnApply(this);
+ break;
+
+ default:
+ break;
+ }
+
+ return lRet;
+ }
+
+
+///////////////////////////////////////////////////// EXPORTED FUNCTIONS
+
+static BOOL s_bPortRecurse = FALSE;
+
+LRESULT INLINE Port_DefProc(
+ HWND hDlg,
+ UINT msg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ ENTER_X()
+ {
+ s_bPortRecurse = TRUE;
+ }
+ LEAVE_X()
+
+ return DefDlgProc(hDlg, msg, wParam, lParam);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Real dialog proc
+Returns: varies
+Cond: --
+*/
+LRESULT Port_DlgProc(
+ PPORT this,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+#ifdef CS_HELP
+#pragma data_seg(DATASEG_READONLY)
+ const static DWORD rgHelpIDs[] = {
+ IDC_PS_LBL_BAUDRATE, IDH_PORT_BAUD,
+ IDC_PS_BAUDRATE, IDH_PORT_BAUD,
+ IDC_PS_LBL_DATABITS, IDH_PORT_DATA,
+ IDC_PS_DATABITS, IDH_PORT_DATA,
+ IDC_PS_LBL_PARITY, IDH_PORT_PARITY,
+ IDC_PS_PARITY, IDH_PORT_PARITY,
+ IDC_PS_LBL_STOPBITS, IDH_PORT_STOPBITS,
+ IDC_PS_STOPBITS, IDH_PORT_STOPBITS,
+ IDC_PS_LBL_FLOWCTL, IDH_PORT_FLOW,
+ IDC_PS_FLOWCTL, IDH_PORT_FLOW,
+ IDC_PS_PB_RESTORE, IDH_PORT_RESTORE,
+ 0, 0 };
+#pragma data_seg()
+#endif
+
+ switch (message)
+ {
+ HANDLE_MSG(this, WM_INITDIALOG, Port_OnInitDialog);
+ HANDLE_MSG(this, WM_COMMAND, Port_OnCommand);
+ HANDLE_MSG(this, WM_NOTIFY, Port_OnNotify);
+
+#ifdef CS_HELP
+ case WM_HELP:
+ WinHelp(((LPHELPINFO)lParam)->hItemHandle, c_szWinHelpFile, HELP_WM_HELP, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+
+ case WM_CONTEXTMENU:
+ WinHelp((HWND)wParam, c_szWinHelpFile, HELP_CONTEXTMENU, (DWORD)(LPVOID)rgHelpIDs);
+ return 0;
+#endif
+
+ default:
+ return Port_DefProc(this->hdlg, message, wParam, lParam);
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Dialog Wrapper
+Returns: varies
+Cond: --
+*/
+BOOL CALLBACK Port_WrapperProc(
+ HWND hDlg, // std params
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ PPORT this;
+
+ // Cool windowsx.h dialog technique. For full explanation, see
+ // WINDOWSX.TXT. This supports multiple-instancing of dialogs.
+ //
+ ENTER_X()
+ {
+ if (s_bPortRecurse)
+ {
+ s_bPortRecurse = FALSE;
+ LEAVE_X()
+ return FALSE;
+ }
+ }
+ LEAVE_X()
+
+ this = Port_GetPtr(hDlg);
+ if (this == NULL)
+ {
+ if (message == WM_INITDIALOG)
+ {
+ this = (PPORT)LocalAlloc(LPTR, sizeof(PORT));
+ if (!this)
+ {
+ MsgBox(g_hinst,
+ hDlg,
+ MAKEINTRESOURCE(IDS_OOM_PORT),
+ MAKEINTRESOURCE(IDS_CAP_PORT),
+ NULL,
+ MB_ERROR);
+ EndDialog(hDlg, IDCANCEL);
+ return (BOOL)Port_DefProc(hDlg, message, wParam, lParam);
+ }
+ this->hdlg = hDlg;
+ Port_SetPtr(hDlg, this);
+ }
+ else
+ {
+ return (BOOL)Port_DefProc(hDlg, message, wParam, lParam);
+ }
+ }
+
+ if (message == WM_DESTROY)
+ {
+ Port_DlgProc(this, message, wParam, lParam);
+ LocalFree((HLOCAL)OFFSETOF(this));
+ Port_SetPtr(hDlg, NULL);
+ return 0;
+ }
+
+ return SetDlgMsgResult(hDlg, message, Port_DlgProc(this, message, wParam, lParam));
+ }
+
+
+#ifdef SUPPORT_FIFO
+
+//
+// Advanced Port Settings
+//
+
+#pragma data_seg(DATASEG_READONLY)
+
+// Fifo related strings
+
+TCHAR const FAR c_szSettings[] = TEXT("Settings");
+TCHAR const FAR c_szComxFifo[] = TEXT("Fifo");
+TCHAR const FAR c_szEnh[] = TEXT("386Enh");
+TCHAR const FAR c_szSystem[] = TEXT("system.ini");
+
+#pragma data_seg()
+
+
+/*----------------------------------------------------------
+Purpose: Set the dialog controls
+
+Returns: --
+Cond: --
+*/
+void DisplayAdvSettings(
+ HWND hDlg,
+ BYTE RxTrigger,
+ BYTE TxTrigger,
+ BOOL bUseFifo)
+ {
+ SendDlgItemMessage(hDlg, IDC_RXFIFO_USAGE, TBM_SETRANGE, 0, 0x30000);
+ SendDlgItemMessage(hDlg, IDC_TXFIFO_USAGE, TBM_SETRANGE, 0, 0x30000);
+
+ // Use FIFO?
+ if ( !bUseFifo )
+ {
+ // No
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_LO), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_HI), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_RXFIFO_USAGE), FALSE);
+
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_LO), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_HI), FALSE);
+ EnableWindow(GetDlgItem(hDlg, IDC_TXFIFO_USAGE), FALSE);
+ CheckDlgButton(hDlg, IDC_FIFO_USAGE, FALSE);
+ }
+ else
+ {
+ CheckDlgButton(hDlg, IDC_FIFO_USAGE, TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_LO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_HI), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_RXFIFO_USAGE), TRUE);
+
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_LO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_HI), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_TXFIFO_USAGE), TRUE);
+ SendDlgItemMessage(hDlg, IDC_RXFIFO_USAGE, TBM_SETPOS,
+ TRUE, RxTrigger);
+ SendDlgItemMessage(hDlg, IDC_TXFIFO_USAGE, TBM_SETPOS,
+ TRUE, TxTrigger/4);
+ }
+ }
+
+
+typedef struct tagSETTINGS
+ {
+ BYTE fifoon;
+ BYTE txfifosize;
+ BYTE dsron;
+ BYTE rxtriggersize;
+ } SETTINGS;
+
+typedef enum
+ {
+ ACT_GET,
+ ACT_SET
+ } ACTION;
+
+BYTE RxTriggerValues[4]={0,0x40,0x80,0xC0};
+
+
+/*----------------------------------------------------------
+Purpose: Gets or sets the advanced settings of the port
+
+Returns: --
+Cond: --
+*/
+void GetSetAdvSettings(
+ LPCTSTR pszPortName,
+ BYTE FAR *RxTrigger,
+ BYTE FAR *TxTrigger,
+ BOOL FAR * pbUseFifo,
+ ACTION action)
+ {
+ LPFINDDEV pfd;
+ DWORD cbData;
+ SETTINGS settings;
+ TCHAR szFifo[256];
+ TCHAR OnStr[2] = TEXT("0");
+
+ ASSERT(pszPortName);
+
+ // In Win95, the FIFO settings were (wrongfully) stored in the
+ // device key. I've changed this to look in the driver key.
+ // (scotth)
+
+ if (FindDev_Create(&pfd, c_pguidPort, c_szFriendlyName, pszPortName) ||
+ FindDev_Create(&pfd, c_pguidPort, c_szPortName, pszPortName) ||
+ FindDev_Create(&pfd, c_pguidModem, c_szPortName, pszPortName))
+ {
+ switch (action)
+ {
+ case ACT_GET:
+ ASSERT(4 == sizeof(SETTINGS));
+
+ cbData = sizeof(SETTINGS);
+ if (ERROR_SUCCESS != RegQueryValueEx(pfd->hkeyDrv, c_szSettings, NULL,
+ NULL, (LPBYTE)&settings, &cbData))
+ {
+ // Default settings if not in registry
+ settings.fifoon = 0x02;
+ settings.dsron = 0;
+ settings.txfifosize = 16;
+ settings.rxtriggersize = 0x80;
+ }
+ if (!settings.fifoon)
+ *pbUseFifo = FALSE;
+ else
+ *pbUseFifo = TRUE;
+ settings.rxtriggersize = settings.rxtriggersize % 0xC1;
+ *RxTrigger = settings.rxtriggersize/0x40;
+ *TxTrigger = settings.txfifosize % 17;
+ break;
+
+ case ACT_SET:
+ if (FALSE == *pbUseFifo)
+ settings.fifoon = 0;
+ else
+ settings.fifoon = 2;
+
+ settings.rxtriggersize = RxTriggerValues[*RxTrigger];
+ settings.dsron = 0;
+ settings.txfifosize = (*TxTrigger)*5+1;
+ RegSetValueEx(pfd->hkeyDrv, c_szSettings, 0, REG_BINARY,
+ (LPBYTE)&settings, sizeof(SETTINGS));
+ break;
+
+ default:
+ ASSERT(0);
+ break;
+ }
+
+ cbData = sizeof(szFifo) - 6; // leave room for "fifo" on the end
+ RegQueryValueEx(pfd->hkeyDrv, c_szPortName, NULL, NULL, (LPBYTE)szFifo,
+ &cbData);
+
+ FindDev_Destroy(pfd);
+
+ lstrcat(szFifo, c_szComxFifo);
+ if (*pbUseFifo)
+ WritePrivateProfileString(c_szEnh, szFifo, NULL, c_szSystem);
+ else
+ WritePrivateProfileString(c_szEnh, szFifo, OnStr, c_szSystem);
+ }
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Dialog proc for advanced port settings
+
+Returns: standard
+Cond: --
+*/
+BOOL CALLBACK AdvPort_DlgProc(
+ HWND hDlg,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam)
+ {
+ BOOL bRet = FALSE;
+ BYTE rxtrigger, txtrigger;
+ BOOL bUseFifo;
+ LPCTSTR pszPortName;
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ pszPortName = (LPCTSTR)lParam;
+ SetWindowLong(hDlg, DWL_USER, (LONG)pszPortName);
+
+ GetSetAdvSettings(pszPortName, &rxtrigger, &txtrigger, &bUseFifo, ACT_GET);
+ DisplayAdvSettings(hDlg, rxtrigger, txtrigger, bUseFifo);
+ break;
+
+ case WM_COMMAND:
+ pszPortName = (LPCTSTR)GetWindowLong(hDlg, DWL_USER);
+ if (!pszPortName)
+ {
+ ASSERT(0);
+ break;
+ }
+
+ switch (wParam)
+ {
+ case IDOK:
+ if (IsDlgButtonChecked(hDlg, IDC_FIFO_USAGE))
+ bUseFifo = TRUE;
+ else
+ bUseFifo = FALSE;
+
+ rxtrigger = (BYTE)SendDlgItemMessage(hDlg,
+ IDC_RXFIFO_USAGE, TBM_GETPOS, 0, 0);
+ txtrigger = (BYTE)SendDlgItemMessage(hDlg,
+ IDC_TXFIFO_USAGE, TBM_GETPOS, 0, 0);
+
+ GetSetAdvSettings(pszPortName, &rxtrigger, &txtrigger, &bUseFifo, ACT_SET);
+
+ // Fall thru
+ // | |
+ // v v
+
+ case IDCANCEL:
+ EndDialog(hDlg, IDOK == wParam);
+ break;
+
+ case IDC_FIFO_USAGE:
+ if (!IsDlgButtonChecked(hDlg, IDC_FIFO_USAGE))
+ DisplayAdvSettings(hDlg, 0, 0, FALSE);
+ else
+ {
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_LO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_RXFIFO_HI), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_RXFIFO_USAGE), TRUE);
+
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_LO), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_LBL_TXFIFO_HI), TRUE);
+ EnableWindow(GetDlgItem(hDlg, IDC_TXFIFO_USAGE), TRUE);
+ }
+ break;
+
+ case IDC_DEFAULTS:
+ DisplayAdvSettings(hDlg, 2, 12, TRUE);
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Private entry point to show the Advanced Fifo dialog
+
+Returns: IDOK or IDCANCEL
+
+Cond: --
+*/
+UINT WINAPI FeFiFoFum(
+ HWND hwndOwner,
+ LPCTSTR pszPortName)
+ {
+ UINT uRet = (UINT)-1;
+
+ // Invoke the advanced dialog
+ if (pszPortName)
+ {
+ uRet = DialogBoxParam(g_hinst, MAKEINTRESOURCE(IDD_ADV_PORT),
+ hwndOwner, AdvPort_DlgProc, (LPARAM)pszPortName);
+ }
+ return uRet;
+ }
+
+#endif // SUPPORT_FIFO
diff --git a/private/unimodem/serialui/proj.h b/private/unimodem/serialui/proj.h
new file mode 100644
index 000000000..5c9f3789a
--- /dev/null
+++ b/private/unimodem/serialui/proj.h
@@ -0,0 +1,99 @@
+//
+// proj.h: Includes all files that are to be part of the precompiled
+// header.
+//
+
+#ifndef __PROJ_H__
+#define __PROJ_H__
+
+//
+// Private Defines
+//
+
+//#define SUPPORT_FIFO // Win95 only: support Advanced FIFO dialog
+//#define DCB_IN_REGISTRY // Plug-and-play: The port driver info is stored in the registry
+
+
+#define STRICT
+
+#if DBG > 0 && !defined(DEBUG)
+#define DEBUG
+#endif
+#if DBG > 0 && !defined(FULL_DEBUG)
+#define FULL_DEBUG
+#endif
+
+#define UNICODE
+
+// Defines for rovcomm.h
+
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NOPATH
+#define NOSYNC
+#ifndef DEBUG
+#define NOPROFILE
+#endif
+
+#define SZ_MODULEA "SERIALUI"
+#define SZ_MODULEW TEXT("SERIALUI")
+
+#ifdef DEBUG
+#define SZ_DEBUGSECTION TEXT("SERIALUI")
+#define SZ_DEBUGINI TEXT("unimdm.ini")
+#endif // DEBUG
+
+// Includes
+
+#define USECOMM
+
+#include <windows.h>
+#include <windowsx.h>
+
+#include <winerror.h>
+#include <commctrl.h> // needed by shlobj.h and our progress bar
+#include <prsht.h> // Property sheet stuff
+#include <rovcomm.h>
+#include <modemp.h>
+#include <shellapi.h> // for registration functions
+#include <regstr.h>
+
+#ifdef WIN95
+#include <setupx.h> // PnP setup/installer services
+#else
+#include <setupapi.h> // PnP setup/installer services
+#endif
+
+#define MAXBUFLEN MAX_BUF
+#define MAXMSGLEN MAX_BUF_MSG
+#define MAXMEDLEN MAX_BUF_MED
+#define MAXSHORTLEN MAX_BUF_SHORT
+
+#ifndef LINE_LEN
+#define LINE_LEN MAXBUFLEN
+#endif
+
+// local includes
+//
+#include "dll.h"
+#include "cstrings.h" // Read-only string constants
+#include "util.h" // Utility functions
+#include "serialui.h"
+#include "rcids.h"
+#include "dlgids.h"
+
+//****************************************************************************
+//
+//****************************************************************************
+
+
+// Dump flags
+#define DF_DCB 0x00000001
+#define DF_MODEMSETTINGS 0x00000002
+#define DF_DEVCAPS 0x00000004
+
+#endif //!__PROJ_H__
+
diff --git a/private/unimodem/serialui/rcids.h b/private/unimodem/serialui/rcids.h
new file mode 100644
index 000000000..e165180ab
--- /dev/null
+++ b/private/unimodem/serialui/rcids.h
@@ -0,0 +1,109 @@
+//{{NO_DEPENDENCIES}}
+// App Studio generated include file.
+// Used by SYNCUI.RC
+//
+
+// Icon values
+//
+#define IDI_NULL_MODEM 700
+#define IDI_EXTERNAL_MODEM 701
+#define IDI_INTERNAL_MODEM 702
+#define IDI_PCMCIA_MODEM 703
+
+// Bitmap values
+//
+#define IDB_ACTIONS 108
+#define IDB_SMALLACTIONS_MASK 111
+#define IDB_CONTAIN 801
+#define IDB_CONTAIN_MASK 802
+#define IDB_ACTIONS_MASK 803
+#define IDB_SMALLACTIONS 804
+#define IDB_MENU_MASK 806
+#define IDB_MENU 806
+
+// Random stuff
+//
+#define IDS_NULL_MODEM 180
+#define IDS_EXTERNAL_MODEM 181
+#define IDS_INTERNAL_MODEM 182
+#define IDS_PCMCIA_MODEM 183
+#define IDS_PARALLEL_MODEM 184
+#define IDS_PARALLEL_PORT 185
+
+#define IDS_BAUD_110 200
+#define IDS_BAUD_1200 201
+#define IDS_BAUD_2400 202
+#define IDS_BAUD_4800 203
+#define IDS_BAUD_9600 204
+#define IDS_BAUD_14400 205
+#define IDS_BAUD_19200 206
+#define IDS_BAUD_38400 207
+#define IDS_BAUD_56K 208
+#define IDS_BAUD_128K 209
+#define IDS_BAUD_115200 210
+#define IDS_BAUD_57600 211
+#define IDS_BAUD_FASTEST 212
+#define IDS_BAUD_075 213
+#define IDS_BAUD_134_5 214
+#define IDS_BAUD_150 215
+#define IDS_BAUD_300 216
+#define IDS_BAUD_600 217
+#define IDS_BAUD_1800 218
+#define IDS_BAUD_7200 219
+#define IDS_BAUD_230400 220
+#define IDS_BAUD_460800 221
+#define IDS_BAUD_921600 222
+
+#define IDS_BYTESIZE_4 240
+#define IDS_BYTESIZE_5 241
+#define IDS_BYTESIZE_6 242
+#define IDS_BYTESIZE_7 243
+#define IDS_BYTESIZE_8 244
+
+#define IDS_PARITY_EVEN 250
+#define IDS_PARITY_ODD 251
+#define IDS_PARITY_NONE 252
+#define IDS_PARITY_MARK 253
+#define IDS_PARITY_SPACE 254
+#define IDS_STOPBITS_1 255
+#define IDS_STOPBITS_1_5 256
+#define IDS_STOPBITS_2 257
+
+#define IDS_FLOWCTL_XONXOFF 260
+#define IDS_FLOWCTL_HARDWARE 261
+#define IDS_FLOWCTL_NONE 262
+
+#define IDS_LOGFILE 270
+
+// Messages
+//
+
+// Captions
+//
+#define IDS_CAP_GENERAL 340
+#define IDS_CAP_SETTINGS 341
+#define IDS_CAP_PORT 342
+
+// Formatted strings
+//
+
+// Error strings
+//
+
+// Out-of-memory strings
+//
+#define IDS_OOM_GENERAL 460
+#define IDS_OOM_SETTINGS 461
+#define IDS_OOM_PORT 462
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NEXT_RESOURCE_VALUE 113
+#define _APS_NEXT_COMMAND_VALUE 105
+#define _APS_NEXT_CONTROL_VALUE 1006
+#define _APS_NEXT_SYMED_VALUE 105
+#endif
+#endif
diff --git a/private/unimodem/serialui/serialui.c b/private/unimodem/serialui/serialui.c
new file mode 100644
index 000000000..b1baad242
--- /dev/null
+++ b/private/unimodem/serialui/serialui.c
@@ -0,0 +1,989 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: serialui.c
+//
+// This files contains the DLL entry-points.
+//
+// Much of this file contains the code that builds the default property dialog
+// for serial ports.
+//
+// History:
+// 1-12-94 ScottH Created
+// 8-15-94 ScottH Split from modemui.dll
+// 11-06-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+
+#include "proj.h" // common headers
+
+#define INITGUID
+#include <initguid.h>
+#include <devguid.h>
+
+#pragma data_seg(DATASEG_READONLY)
+
+LPGUID c_pguidModem = (LPGUID)&GUID_DEVCLASS_MODEM;
+
+// BUGBUG (scotth): it looks like for the NT SUR release, that there
+// will be no Port class key or GUID. So we have to hack something
+// up.
+#ifdef DCB_IN_REGISTRY
+LPGUID c_pguidPort = (LPGUID)&GUID_DEVCLASS_PORT;
+#else
+LPGUID c_pguidPort = (LPGUID)NULL;
+#endif
+
+#pragma data_seg()
+
+
+#define MAX_PROP_PAGES 8 // Define a reasonable limit
+
+
+#ifdef DEBUG
+
+//-----------------------------------------------------------------------------------
+// Debug routines
+//-----------------------------------------------------------------------------------
+
+/*----------------------------------------------------------
+Purpose: Dumps the DCB struct
+Returns: --
+Cond: --
+*/
+void PRIVATE DumpDCB(
+ LPWIN32DCB pdcb)
+ {
+ ASSERT(pdcb);
+
+ if (IsFlagSet(g_dwDumpFlags, DF_DCB))
+ {
+ int i;
+ LPDWORD pdw = (LPDWORD)pdcb;
+
+ TRACE_MSG(TF_ALWAYS, "DCB %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ pdw += 4;
+ for (i = 0; i < sizeof(WIN32DCB)/sizeof(DWORD); i += 4, pdw += 4)
+ {
+ TRACE_MSG(TF_ALWAYS, " %08lx %08lx %08lx %08lx", pdw[0], pdw[1], pdw[2], pdw[3]);
+ }
+ }
+ }
+
+#endif //DEBUG
+
+
+//-----------------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Composes a string of the format "baud,parity,data,stopbit"
+
+Returns: --
+Cond: --
+*/
+void PRIVATE ComposeModeComString(
+ LPCOMMCONFIG pcc,
+ LPTSTR pszBuffer)
+ {
+ WIN32DCB FAR * pdcb = &pcc->dcb;
+ TCHAR chParity;
+ LPCTSTR pszStop;
+ TCHAR chFlow;
+
+ static TCHAR rgchParity[] = {'n', 'o', 'e', 'm', 's'};
+ static LPCTSTR rgpszStop[] = {TEXT("1"), TEXT("1.5"), TEXT("2")};
+
+ // Parity
+ ASSERT(!pdcb->fParity && NOPARITY == pdcb->Parity || pdcb->fParity);
+ ASSERT(0 <= pdcb->Parity && ARRAYSIZE(rgchParity) > pdcb->Parity);
+
+ if (0 <= pdcb->Parity && ARRAYSIZE(rgchParity) > pdcb->Parity)
+ {
+ chParity = rgchParity[pdcb->Parity];
+ }
+ else
+ {
+ chParity = rgchParity[0]; // Safety net
+ }
+
+ // Stop bits
+ ASSERT(0 <= pdcb->StopBits && ARRAYSIZE(rgpszStop) > pdcb->StopBits);
+
+ if (0 <= pdcb->StopBits && ARRAYSIZE(rgpszStop) > pdcb->StopBits)
+ {
+ pszStop = rgpszStop[pdcb->StopBits];
+ }
+ else
+ {
+ pszStop = rgpszStop[0]; // Safety net
+ }
+
+ // Flow control
+ if (FALSE != pdcb->fOutX && FALSE == pdcb->fOutxCtsFlow)
+ {
+ chFlow = 'x'; // XON/XOFF flow control
+ }
+ else if (FALSE == pdcb->fOutX && FALSE != pdcb->fOutxCtsFlow)
+ {
+ chFlow = 'p'; // Hardware flow control
+ }
+ else
+ {
+ chFlow = ' '; // No flow control
+ }
+
+ wsprintf(pszBuffer, TEXT("%ld,%c,%d,%s,%c"), pdcb->BaudRate, chParity, pdcb->ByteSize,
+ pszStop, chFlow);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Initialize the port info.
+
+Returns: --
+Cond: --
+*/
+void PRIVATE InitializePortInfo(
+ LPCTSTR pszFriendlyName,
+ LPPORTINFO pportinfo,
+ LPCOMMCONFIG pcc)
+ {
+ ASSERT(pportinfo);
+ ASSERT(pcc);
+
+ // Read-only fields
+ pportinfo->pcc = pcc;
+
+ BltByte(&pportinfo->dcb, &pcc->dcb, sizeof(pportinfo->dcb));
+
+ lstrcpyn(pportinfo->szFriendlyName, pszFriendlyName, SIZECHARS(pportinfo->szFriendlyName));
+ }
+
+
+
+/*----------------------------------------------------------
+Purpose: Gets a WIN32DCB from the registry.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD
+PRIVATE
+RegQueryDCB(
+ IN LPFINDDEV pfd,
+ OUT WIN32DCB FAR * pdcb)
+ {
+ DWORD dwRet = ERROR_BADKEY;
+
+#ifdef DCB_IN_REGISTRY
+
+ DWORD cbData;
+
+ ASSERT(pdcb);
+
+ // Does the DCB key exist in the driver key?
+ if (ERROR_SUCCESS == RegQueryValueEx(pfd->hkeyDrv, c_szDCB, NULL, NULL, NULL, &cbData))
+ {
+ // Yes; is the size in the registry okay?
+ if (sizeof(*pdcb) < cbData)
+ {
+ // No; the registry has bogus data
+ dwRet = ERROR_BADDB;
+ }
+ else
+ {
+ // Yes; get the DCB from the registry
+ if (ERROR_SUCCESS == RegQueryValueEx(pfd->hkeyDrv, c_szDCB, NULL, NULL, (LPBYTE)pdcb, &cbData))
+ {
+ if (sizeof(*pdcb) == pdcb->DCBlength)
+ {
+ dwRet = NO_ERROR;
+ }
+ else
+ {
+ dwRet = ERROR_BADDB;
+ }
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+ }
+ }
+
+#else
+
+#pragma data_seg(DATASEG_READONLY)
+ static TCHAR const FAR c_szDefaultDCBString[] = TEXT("96,n,8,1");
+#pragma data_seg()
+
+ TCHAR sz[MAX_BUF_MED];
+ TCHAR szKey[MAX_BUF_SHORT];
+
+ lstrcpy(szKey, pfd->szPort);
+ lstrcat(szKey, TEXT(":"));
+
+ GetProfileString(c_szPortClass, szKey, c_szDefaultDCBString, sz, SIZECHARS(sz));
+
+ TRACE_MSG(TF_GENERAL, "DCB string is \"%s\"", sz);
+
+ // Convert the DCB string to a DCB structure
+ if ( !BuildCommDCB(sz, pdcb) )
+ {
+ dwRet = GetLastError();
+
+ ASSERT(NO_ERROR != dwRet);
+ }
+ else
+ {
+ dwRet = NO_ERROR;
+ }
+
+#endif
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Save the DCB to the permanent storage
+
+Returns: win32 error
+Cond: --
+*/
+DWORD
+PRIVATE
+RegSetDCB(
+ IN LPFINDDEV pfd,
+ IN WIN32DCB FAR * pdcb)
+ {
+ DWORD dwRet;
+
+#ifdef DCB_IN_REGISTRY
+
+ DWORD cbData;
+
+ // Write the DCB to the driver key
+ cbData = sizeof(WIN32DCB);
+ dwRet = RegSetValueEx(pfd->hkeyDrv, c_szDCB, 0, REG_BINARY, (LPBYTE)&pcc->dcb, cbData);
+
+#else
+
+ dwRet = NO_ERROR;
+
+#endif
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Frees the portinfo struct
+
+Returns: --
+Cond: --
+*/
+void PRIVATE FreePortInfo(
+ LPPORTINFO pportinfo)
+ {
+ if (pportinfo)
+ {
+ if (pportinfo->pcc)
+ LocalFree(LOCALOF(pportinfo->pcc));
+
+ LocalFree(LOCALOF(pportinfo));
+ }
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Release the data associated with the Port Settings page
+Returns: --
+Cond: --
+*/
+UINT CALLBACK PortSettingsCallback(
+ HWND hwnd,
+ UINT uMsg,
+ LPPROPSHEETPAGE ppsp)
+ {
+ DBG_ENTER("PortSettingsCallback");
+
+ if (PSPCB_RELEASE == uMsg)
+ {
+ LPPORTINFO pportinfo = (LPPORTINFO)ppsp->lParam;
+ LPCOMMCONFIG pcc;
+
+ ASSERT(pportinfo);
+
+ pcc = pportinfo->pcc;
+
+ if (IDOK == pportinfo->idRet)
+ {
+ // Save the changes back to the commconfig struct
+ TRACE_MSG(TF_GENERAL, "Saving DCB");
+
+ BltByte(&pcc->dcb, &pportinfo->dcb, sizeof(pcc->dcb));
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ // Are we releasing from the Device Mgr?
+ if (IsFlagSet(pportinfo->uFlags, SIF_FROM_DEVMGR))
+ {
+ // Yes; save the commconfig now as well
+ drvSetDefaultCommConfig(pportinfo->szFriendlyName, pcc, pcc->dwSize);
+
+ // Free the portinfo struct only when called from the Device Mgr
+ FreePortInfo(pportinfo);
+ }
+ }
+
+ TRACE_MSG(TF_GENERAL, "Releasing the Port Settings page");
+ }
+
+ DBG_EXIT("PortSettingsCallback");
+ return TRUE;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Add the port settings page.
+
+Returns: ERROR_ value
+
+Cond: --
+*/
+DWORD PRIVATE AddPortSettingsPage(
+ LPPORTINFO pportinfo,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam)
+ {
+ DWORD dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ PROPSHEETPAGE psp;
+ HPROPSHEETPAGE hpage;
+
+ ASSERT(pportinfo);
+ ASSERT(pfnAdd);
+
+ // Add the Port Settings property page
+ //
+ psp.dwSize = sizeof(PROPSHEETPAGE);
+ psp.dwFlags = PSP_USECALLBACK;
+ psp.hInstance = g_hinst;
+ psp.pszTemplate = MAKEINTRESOURCE(IDD_PORTSETTINGS);
+ psp.pfnDlgProc = Port_WrapperProc;
+ psp.lParam = (LPARAM)pportinfo;
+ psp.pfnCallback = PortSettingsCallback;
+
+ hpage = CreatePropertySheetPage(&psp);
+ if (hpage)
+ {
+ if (!pfnAdd(hpage, lParam))
+ DestroyPropertySheetPage(hpage);
+ else
+ dwRet = NO_ERROR;
+ }
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Function that is called by EnumPropPages entry-point to
+ add property pages.
+
+Returns: TRUE on success
+ FALSE on failure
+
+Cond: --
+*/
+BOOL CALLBACK AddInstallerPropPage(
+ HPROPSHEETPAGE hPage,
+ LPARAM lParam)
+ {
+ PROPSHEETHEADER FAR * ppsh = (PROPSHEETHEADER FAR *)lParam;
+
+ if (ppsh->nPages < MAX_PROP_PAGES)
+ {
+ ppsh->phpage[ppsh->nPages] = hPage;
+ ++ppsh->nPages;
+ return(TRUE);
+ }
+ return(FALSE);
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Bring up property sheet for a serial port
+
+Returns: ERROR_ value
+Cond: --
+*/
+DWORD PRIVATE DoProperties(
+ LPCTSTR pszFriendlyName,
+ HWND hwndParent,
+ LPCOMMCONFIG pcc)
+ {
+ DWORD dwRet;
+ PROPSHEETHEADER psh;
+ HPROPSHEETPAGE hpsPages[MAX_PROP_PAGES];
+ LPPORTINFO pportinfo;
+
+ // Initialize the PropertySheet Header
+ psh.dwSize = sizeof(psh);
+ psh.dwFlags = PSH_PROPTITLE;
+ psh.hwndParent = hwndParent;
+ psh.hInstance = g_hinst;
+ psh.nPages = 0;
+ psh.nStartPage = 0;
+ psh.phpage = (HPROPSHEETPAGE FAR *)hpsPages;
+
+ // Allocate the working buffer
+ //
+ pportinfo = (LPPORTINFO)LocalAlloc(LPTR, sizeof(*pportinfo));
+ if (pportinfo)
+ {
+ InitializePortInfo(pszFriendlyName, pportinfo, pcc);
+ psh.pszCaption = pportinfo->szFriendlyName;
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ dwRet = AddPortSettingsPage(pportinfo, AddInstallerPropPage, (LPARAM)&psh);
+
+ if (NO_ERROR == dwRet)
+ {
+ // Show the property sheet
+ PropertySheet(&psh);
+
+ dwRet = (IDOK == pportinfo->idRet) ? NO_ERROR : ERROR_CANCELLED;
+ }
+
+ // Clear the pcc field so FreePortInfo does not prematurely free it,
+ // since we did not allocate it.
+ pportinfo->pcc = NULL;
+ FreePortInfo(pportinfo);
+ }
+ else
+ {
+ dwRet = ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+ return dwRet;
+ }
+
+
+#ifdef WIN95
+
+// The Device Manager allows DLLs to add pages to the properties
+// of a device. EnumPropPages is the entry-point that it would
+// call to add pages.
+//
+// This is not implemented in NT.
+
+
+/*----------------------------------------------------------
+Purpose: Derives a PORTINFO struct from a device info.
+
+Returns: TRUE on success
+
+Cond: --
+*/
+BOOL PRIVATE DeviceInfoToPortInfo(
+ LPDEVICE_INFO pdi,
+ LPPORTINFO pportinfo)
+ {
+ BOOL bRet = FALSE;
+ LPFINDDEV pfd;
+ COMMCONFIG ccDummy;
+ LPCOMMCONFIG pcommconfig;
+ DWORD cbSize;
+ DWORD cbData;
+ TCHAR szFriendly[MAXFRIENDLYNAME];
+
+ // Find the device by looking for the device description. (Note the
+ // device description is not always the same as the friendly name.)
+
+ if (FindDev_Create(&pfd, c_pguidPort, c_szDeviceDesc, pdi->szDescription))
+ {
+ cbData = sizeof(szFriendly);
+ if (ERROR_SUCCESS == RegQueryValueEx(pfd->hkeyDev, c_szFriendlyName, NULL, NULL,
+ (LPBYTE)szFriendly, &cbData))
+ {
+ ccDummy.dwProviderSubType = PST_RS232;
+ cbSize = sizeof(COMMCONFIG);
+ drvGetDefaultCommConfig(szFriendly, &ccDummy, &cbSize);
+
+ pcommconfig = (LPCOMMCONFIG)LocalAlloc(LPTR, (UINT)cbSize);
+ if (pcommconfig)
+ {
+ // Get the commconfig from the registry
+ pcommconfig->dwProviderSubType = PST_RS232;
+ if (NO_ERROR == drvGetDefaultCommConfig(szFriendly, pcommconfig,
+ &cbSize))
+ {
+ // Initialize the modem info from the commconfig
+ InitializePortInfo(szFriendly, pportinfo, pcommconfig);
+
+ SetFlag(pportinfo->uFlags, SIF_FROM_DEVMGR);
+ bRet = TRUE;
+ }
+ else
+ {
+ // Failure
+ LocalFree(LOCALOF(pcommconfig));
+ }
+
+ // pcommconfig is freed in ReleasePortSettingsPage
+ }
+ }
+ FindDev_Destroy(pfd);
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: EnumDevicePropPages entry-point. This entry-point
+ gets called only when the Device Manager asks for
+ additional property pages.
+
+Returns: TRUE on success
+ FALSE if pages could not be added
+Cond: --
+*/
+BOOL WINAPI EnumPropPages(
+ LPDEVICE_INFO pdi,
+ LPFNADDPROPSHEETPAGE pfnAdd,
+ LPARAM lParam) // Don't touch the lParam value, just pass it on!
+ {
+ BOOL bRet = FALSE;
+ LPPORTINFO pportinfo;
+
+ DBG_ENTER("EnumPropPages");
+
+ ASSERT(pdi);
+ ASSERT(pfnAdd);
+
+ pportinfo = (LPPORTINFO)LocalAlloc(LPTR, sizeof(*pportinfo));
+ if (pportinfo)
+ {
+ // Convert the device info struct to a portinfo.
+ bRet = DeviceInfoToPortInfo(pdi, pportinfo);
+ if (bRet)
+ {
+ AddPortSettingsPage(pportinfo, pfnAdd, lParam);
+ }
+ else
+ {
+ // Failed
+ FreePortInfo(pportinfo);
+ }
+ // pportinfo is freed in ReleasePortSettingsPage
+ }
+
+ DBG_EXIT_BOOL("EnumPropPages", bRet);
+
+ return bRet;
+ }
+#endif
+
+
+/*----------------------------------------------------------
+Purpose: Invokes the serial port configuration dialog.
+
+Returns: One of the ERROR_ values
+Cond: --
+*/
+DWORD
+PRIVATE
+MyCommConfigDialog(
+ IN LPFINDDEV pfd,
+ IN LPCTSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+ {
+ DWORD dwRet;
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(sizeof(*pcc) <= pcc->dwSize);
+
+ dwRet = DoProperties(pszFriendlyName, hwndOwner, pcc);
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Gets the default COMMCONFIG for the specified device.
+ This API doesn't require a handle.
+
+ If the caller passed in a null device name or a null
+ commconfig pointer, this function will set *pdwSize to
+ the minimum COMMCONFIG size. Calling this function
+ a second time (after setting the dwSize and dwProviderSubType
+ fields) will verify if the size is correct.
+
+ So generally, when getting a commconfig for serial ports,
+ the process is:
+
+ COMMCONFIG ccDummy;
+ LPCOMMCONFIG pcc;
+ DWORD dwSize = sizeof(*pcc);
+
+ // Determine real size of COMMCONFIG for RS-232 subtype
+ ccDummy.dwProviderSubType = PST_RS232;
+ GetDefaultCommConfig(pszFriendlyName, &ccDummy, &dwSize);
+
+ // Allocate real commconfig struct and initialize
+ pcc = LocalAlloc(LPTR, dwSize);
+ if (pcc)
+ {
+ pcc->dwProviderSubType = PST_RS232;
+ GetDefaultCommConfig(pszFriendlyName, pcc, &dwSize);
+ ....
+ }
+
+Returns: One of the ERROR_ values in winerror.h
+
+Cond: --
+*/
+DWORD
+PRIVATE
+MyGetDefaultCommConfig(
+ IN LPFINDDEV pfd,
+ IN LPCTSTR pszFriendlyName,
+ OUT LPCOMMCONFIG pcc,
+ OUT LPDWORD pdwSize)
+ {
+ DWORD dwRet;
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(pdwSize);
+ ASSERT(sizeof(*pcc) <= *pdwSize);
+
+ *pdwSize = sizeof(*pcc);
+
+ // Initialize the commconfig structure
+ pcc->dwSize = *pdwSize;
+ pcc->wVersion = COMMCONFIG_VERSION_1;
+ pcc->dwProviderSubType = PST_RS232;
+ pcc->dwProviderOffset = 0;
+ pcc->dwProviderSize = 0;
+
+ dwRet = RegQueryDCB(pfd, &pcc->dcb);
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ return dwRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Sets the default COMMCONFIG for the specified device.
+ This API doesn't require a handle. This function
+ strictly modifies the registry. Use SetCommConfig
+ to set the COMMCONFIG of an open device.
+
+ If the dwSize parameter or the dwSize field are invalid
+ sizes (given the dwProviderSubType field in COMMCONFIG),
+ then this function fails.
+
+Returns: One of the ERROR_ return values
+
+Cond: --
+*/
+DWORD
+PRIVATE
+MySetDefaultCommConfig(
+ IN LPFINDDEV pfd,
+ IN LPCTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc)
+ {
+ DWORD dwRet;
+ TCHAR szValue[MAX_BUF_SHORT];
+ TCHAR szKey[MAX_BUF_SHORT];
+
+ ASSERT(pfd);
+ // (Wrapper should have checked these first)
+ ASSERT(pszFriendlyName);
+ ASSERT(pcc);
+ ASSERT(sizeof(*pcc) <= pcc->dwSize);
+
+ ASSERT(0 == pcc->dwProviderSize);
+ ASSERT(0 == pcc->dwProviderOffset);
+
+ dwRet = RegSetDCB(pfd, &pcc->dcb);
+
+ if (NO_ERROR == dwRet)
+ {
+ // For Win 3.1 compatibility, write some info to win.ini
+ lstrcpy(szKey, pfd->szPort);
+ lstrcat(szKey, TEXT(":"));
+
+ // Delete the old win.ini entry first
+ WriteProfileString(c_szPortClass, szKey, NULL);
+
+ ComposeModeComString(pcc, szValue);
+ WriteProfileString(c_szPortClass, szKey, szValue);
+
+#ifdef WIN95
+ {
+ DWORD dwRecipients;
+
+ // Send a broadcast proclaiming that the win.ini has changed
+ // (Use the internal BroadcastSystemMessage to avoid deadlocks.
+ // SendMessageTimeout would be more appropriate, but that is
+ // not exported for 16-bit dlls. PostMessage is not good because
+ // lParam is a pointer.)
+
+ dwRecipients = BSM_APPLICATIONS;
+ BroadcastSystemMessage(BSF_NOHANG, &dwRecipients, WM_WININICHANGE,
+ NULL, (LPARAM)c_szPortClass);
+ }
+#else
+ {
+ SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, (LPARAM)c_szPortClass);
+ }
+#endif
+ }
+
+
+ DEBUG_CODE( DumpDCB(&pcc->dcb); )
+
+ return dwRet;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Entry-points provided for KERNEL32 APIs
+//-----------------------------------------------------------------------------------
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvCommConfigDialogA(
+ IN LPCSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+#else
+drvCommConfigDialogW(
+ IN LPCWSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for CommConfigDialog
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvCommConfigDialog(
+ IN LPCTSTR pszFriendlyName,
+ IN HWND hwndOwner,
+ IN OUT LPCOMMCONFIG pcc)
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ DEBUG_CODE( TRACE_MSG(TF_FUNC, "drvCommConfigDialog(%s, ...) entered",
+ Dbg_SafeStr(pszFriendlyName)); )
+
+ // We support friendly names (eg, "Communications Port (COM1)") or
+ // portname values (eg, "COM1").
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ // Is the size sufficient?
+ else if (sizeof(*pcc) > pcc->dwSize)
+ {
+ // No
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ }
+ else if (FindDev_Create(&pfd, c_pguidPort, c_szFriendlyName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidPort, c_szPortName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidModem, c_szPortName, pszFriendlyName))
+ {
+ dwRet = MyCommConfigDialog(pfd, pszFriendlyName, hwndOwner, pcc);
+
+ FindDev_Destroy(pfd);
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD("drvCommConfigDialog", dwRet);
+
+ return dwRet;
+ }
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvGetDefaultCommConfigA(
+ IN LPCSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+#else
+drvGetDefaultCommConfigW(
+ IN LPCWSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for GetDefaultCommConfig
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvGetDefaultCommConfig(
+ IN LPCTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN OUT LPDWORD pdwSize)
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ DEBUG_CODE( TRACE_MSG(TF_FUNC, "drvGetDefaultCommConfig(%s, ...) entered",
+ Dbg_SafeStr(pszFriendlyName)); )
+
+ // We support friendly names (eg, "Communications Port (COM1)") or
+ // portname values (eg, "COM1").
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc ||
+ NULL == pdwSize)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ // Is the size sufficient?
+ else if (sizeof(*pcc) > *pdwSize)
+ {
+ // No; return correct value
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ *pdwSize = sizeof(*pcc);
+ }
+ else if (FindDev_Create(&pfd, c_pguidPort, c_szFriendlyName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidPort, c_szPortName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidModem, c_szPortName, pszFriendlyName))
+ {
+ dwRet = MyGetDefaultCommConfig(pfd, pszFriendlyName, pcc, pdwSize);
+
+ FindDev_Destroy(pfd);
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD("drvGetDefaultCommConfig", dwRet);
+
+ return dwRet;
+ }
+
+
+DWORD
+APIENTRY
+#ifdef UNICODE
+drvSetDefaultCommConfigA(
+ IN LPSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize)
+#else
+drvSetDefaultCommConfigW(
+ IN LPWSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize)
+#endif
+ {
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Entry point for SetDefaultCommConfig
+
+Returns: standard error value in winerror.h
+Cond: --
+*/
+DWORD
+APIENTRY
+drvSetDefaultCommConfig(
+ IN LPTSTR pszFriendlyName,
+ IN LPCOMMCONFIG pcc,
+ IN DWORD dwSize) // This is ignored
+ {
+ DWORD dwRet;
+ LPFINDDEV pfd;
+
+ // BUGBUG (scotth): it is not great that the dwSize parameter is
+ // ignored. It should have been used. I was young and foolish
+ // back when I originally implemented this. It should be reviewed
+ // whether to start looking at this parameter now.
+
+ DEBUG_CODE( TRACE_MSG(TF_FUNC, "drvSetDefaultCommConfig(%s, ...) entered",
+ Dbg_SafeStr(pszFriendlyName)); )
+
+ // We support friendly names (eg, "Communications Port (COM1)") or
+ // portname values (eg, "COM1").
+
+ if (NULL == pszFriendlyName ||
+ NULL == pcc)
+ {
+ dwRet = ERROR_INVALID_PARAMETER;
+ }
+ // Is the size sufficient?
+ else if (sizeof(*pcc) > pcc->dwSize)
+ {
+ // No
+ dwRet = ERROR_INSUFFICIENT_BUFFER;
+ }
+ else if (FindDev_Create(&pfd, c_pguidPort, c_szFriendlyName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidPort, c_szPortName, pszFriendlyName) ||
+ FindDev_Create(&pfd, c_pguidModem, c_szPortName, pszFriendlyName))
+ {
+ dwRet = MySetDefaultCommConfig(pfd, pszFriendlyName, pcc);
+
+ FindDev_Destroy(pfd);
+ }
+ else
+ {
+ dwRet = ERROR_BADKEY;
+ }
+
+ DBG_EXIT_DWORD("drvSetDefaultCommConfig", dwRet);
+
+ return dwRet;
+ }
+
+
diff --git a/private/unimodem/serialui/serialui.def b/private/unimodem/serialui/serialui.def
new file mode 100644
index 000000000..aa2ee078f
--- /dev/null
+++ b/private/unimodem/serialui/serialui.def
@@ -0,0 +1,22 @@
+LIBRARY SERIALUI
+EXETYPE WINDOWS
+PROTMODE
+
+DESCRIPTION 'Windows Serial Port Properties'
+
+CODE MOVEABLE DISCARDABLE PRELOAD
+DATA MOVEABLE PRELOAD SINGLE
+
+HEAPSIZE 1024
+
+EXPORTS
+ ; Stubs to KERNEL32
+ drvCommConfigDialogW @2
+ drvCommConfigDialogA @3
+ drvSetDefaultCommConfigW @4
+ drvSetDefaultCommConfigA @5
+ drvGetDefaultCommConfigW @6
+ drvGetDefaultCommConfigA @7
+
+ ; Private entry point for FIFO
+ ;FeFiFoFum @8
diff --git a/private/unimodem/serialui/serialui.dlg b/private/unimodem/serialui/serialui.dlg
new file mode 100644
index 000000000..6887cab9d
--- /dev/null
+++ b/private/unimodem/serialui/serialui.dlg
@@ -0,0 +1,116 @@
+//{{NO_DEPENDENCIES}}
+//Microsoft App Studio generated resource script.
+//
+#include "dlgids.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+#include <commctrl.h>
+/////////////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_PORTSETTINGS DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Port Settings"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_PS_PORT,11,8,190,150
+ RTEXT "&Bits per second:",IDC_PS_LBL_BAUDRATE,26,28,54,8
+ COMBOBOX IDC_PS_BAUDRATE,84,26,99,60,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ RTEXT "&Data bits:",IDC_PS_LBL_DATABITS,26,54,54,8
+ COMBOBOX IDC_PS_DATABITS,84,52,99,60,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ RTEXT "&Parity:",IDC_PS_LBL_PARITY,26,80,54,8
+ COMBOBOX IDC_PS_PARITY,84,78,99,60,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ RTEXT "&Stop bits:",IDC_PS_LBL_STOPBITS,26,106,54,8
+ COMBOBOX IDC_PS_STOPBITS,84,104,99,45,CBS_DROPDOWNLIST |
+ WS_VSCROLL | WS_TABSTOP
+ RTEXT "&Flow control:",IDC_PS_LBL_FLOWCTL,26,132,54,8
+ COMBOBOX IDC_PS_FLOWCTL,84,130,99,45,CBS_DROPDOWNLIST | WS_VSCROLL |
+ WS_TABSTOP
+ PUSHBUTTON "&Advanced...",IDC_PS_ADVANCED, 11, 164, 74, 14, WS_GROUP
+ PUSHBUTTON "&Restore Defaults",IDC_PS_PB_RESTORE,127,164,74,14,
+ WS_GROUP
+END
+
+IDD_ADV_PORT DIALOG DISCARDABLE 0, 0, 304, 114
+STYLE DS_MODALFRAME | 4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Advanced Port Settings"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "",IDC_STATIC,11,8,225,95
+ CONTROL "Use &FIFO buffers (requires 16550 compatible UART)",
+ IDC_FIFO_USAGE,"Button",BS_AUTOCHECKBOX | WS_GROUP |
+ WS_TABSTOP,16,8,180,10
+ LTEXT "Select lower settings to correct connection problems.",
+ IDC_STATIC,16,25,200,10
+ LTEXT "Select higher settings for faster performance.",
+ IDC_STATIC,16,36,200,10
+ LTEXT "&Receive Buffer:",IDC_LBL_RXFIFO,16,57,50,8
+ CONTROL "RxFifo",IDC_RXFIFO_USAGE,"msctls_trackbar",WS_TABSTOP |
+ 0x1,96,55,100,16
+ LTEXT "Low (1)",IDC_LBL_RXFIFO_LO,71,57,25,8
+ LTEXT "High (14)",IDC_LBL_RXFIFO_HI,201,57,32,8
+ LTEXT "&Transmit Buffer:",IDC_LBL_TXFIFO,16,82,50,8
+ CONTROL "TxFifo",IDC_TXFIFO_USAGE,"msctls_trackbar",WS_TABSTOP |
+ 0x1,96,80,100,16
+ LTEXT "Low (1)",IDC_LBL_TXFIFO_LO,71,82,25,8
+ LTEXT "High (16)",IDC_LBL_TXFIFO_HI,201,82,32,8
+ DEFPUSHBUTTON "OK",IDOK,245,12,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,245,31,50,14
+ PUSHBUTTON "&Defaults",IDC_DEFAULTS,245,50,50,14
+END
+
+
+#ifdef APSTUDIO_INVOKED
+//////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "dlgids.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include <commctrl.h>\r\n"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // APSTUDIO_INVOKED
+
+
+#ifndef APSTUDIO_INVOKED
+////////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
diff --git a/private/unimodem/serialui/serialui.h b/private/unimodem/serialui/serialui.h
new file mode 100644
index 000000000..755841f5a
--- /dev/null
+++ b/private/unimodem/serialui/serialui.h
@@ -0,0 +1,47 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1994
+//
+// File: serialui.h
+//
+// This files contains the shared prototypes and macros.
+//
+// History:
+// 02-03-94 ScottH Created
+//
+//---------------------------------------------------------------------------
+
+
+#ifndef __SERIALUI_H__
+#define __SERIALUI_H__
+
+#define MAXPORTNAME 13
+#define MAXFRIENDLYNAME LINE_LEN // LINE_LEN is defined in setupx.h
+
+// Internal structure shared between port property pages.
+//
+typedef struct _PORTINFO
+ {
+ UINT uFlags; // One of SIF_* values
+ WIN32DCB dcb;
+ LPCOMMCONFIG pcc; // Read-only
+ int idRet;
+
+ TCHAR szFriendlyName[MAXFRIENDLYNAME];
+ } PortInfo, FAR * LPPORTINFO;
+
+// PortInfo Flags
+#define SIF_FROM_DEVMGR 0x0001
+
+
+extern LPGUID c_pguidModem;
+extern LPGUID c_pguidPort;
+
+//-------------------------------------------------------------------------
+// PORT.C
+//-------------------------------------------------------------------------
+
+BOOL CALLBACK Port_WrapperProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+#endif // __SERIALUI_H__
+
diff --git a/private/unimodem/serialui/serialui.rc b/private/unimodem/serialui/serialui.rc
new file mode 100644
index 000000000..3fab18ca8
--- /dev/null
+++ b/private/unimodem/serialui/serialui.rc
@@ -0,0 +1,77 @@
+#include "rcids.h"
+#include "dlgids.h"
+
+#include <windows.h>
+
+/* Version stamping */
+#include "serialui.rcv"
+
+/* Dialog resource */
+#include "serialui.dlg"
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Icons
+//
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_OOM_PORT "There is not enough memory to view the Port Settings dialog.\nClose some files or programs, and then try again."
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_CAP_PORT "Port Settings"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_BAUD_075 "75"
+ IDS_BAUD_134_5 "134.5"
+ IDS_BAUD_150 "150"
+ IDS_BAUD_300 "300"
+ IDS_BAUD_600 "600"
+ IDS_BAUD_1800 "1800"
+ IDS_BAUD_7200 "7200"
+ IDS_BAUD_110 "110"
+ IDS_BAUD_1200 "1200"
+ IDS_BAUD_2400 "2400"
+ IDS_BAUD_4800 "4800"
+ IDS_BAUD_9600 "9600"
+ IDS_BAUD_14400 "14400"
+ IDS_BAUD_19200 "19200"
+ IDS_BAUD_38400 "38400"
+ IDS_BAUD_56K "56000"
+ IDS_BAUD_57600 "57600"
+ IDS_BAUD_115200 "115200"
+ IDS_BAUD_128K "128000"
+ IDS_BAUD_230400 "230400"
+ IDS_BAUD_460800 "460800"
+ IDS_BAUD_921600, "921600"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_BYTESIZE_4 "4"
+ IDS_BYTESIZE_5 "5"
+ IDS_BYTESIZE_6 "6"
+ IDS_BYTESIZE_7 "7"
+ IDS_BYTESIZE_8 "8"
+ IDS_PARITY_EVEN "Even"
+ IDS_PARITY_ODD "Odd"
+ IDS_PARITY_NONE "None"
+ IDS_PARITY_MARK "Mark"
+ IDS_PARITY_SPACE "Space"
+ IDS_STOPBITS_1 "1"
+ IDS_STOPBITS_1_5 "1.5"
+ IDS_STOPBITS_2 "2"
+ IDS_FLOWCTL_XONXOFF "Xon / Xoff"
+ IDS_FLOWCTL_HARDWARE "Hardware"
+ IDS_FLOWCTL_NONE "None"
+END
diff --git a/private/unimodem/serialui/serialui.rcv b/private/unimodem/serialui/serialui.rcv
new file mode 100644
index 000000000..137aa9b7c
--- /dev/null
+++ b/private/unimodem/serialui/serialui.rcv
@@ -0,0 +1,19 @@
+/********************************************************************/
+/* SERIALUI.RCV */
+/********************************************************************/
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Serial Port Property Pages"
+#define VER_INTERNALNAME_STR "SERIALUI"
+#define VER_LEGALCOPYRIGHT_YEARS "1993-1995"
+#define VER_ORIGINALFILENAME_STR "SERIALUI.DLL"
+
+#ifdef WIN32
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+#include <common.ver>
+
diff --git a/private/unimodem/serialui/sources b/private/unimodem/serialui/sources
new file mode 100644
index 000000000..93946939d
--- /dev/null
+++ b/private/unimodem/serialui/sources
@@ -0,0 +1,79 @@
+!IF 0
+
+Copyright (c) 1994 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+
+Author:
+
+ Steve Cathcart (stevecat) 15-Nov-1994
+
+NOTE: Commented description of this file is in \nt\bak\bin\sources.tpl
+
+Use the following line when this is UNICODE ported
+
+NOT_UNICODE=1
+
+
+ $(BASEDIR)\public\sdk\lib\*\mpr.lib \
+
+!ENDIF
+
+MAJORCOMP=shell
+MINORCOMP=cpls
+
+TARGETNAME=serialui
+TARGETPATH=..\lib
+TARGETTYPE=DYNLINK
+TARGETLIBS=$(BASEDIR)\public\sdk\lib\*\kernel32.lib \
+ $(BASEDIR)\public\sdk\lib\*\user32.lib \
+ $(BASEDIR)\public\sdk\lib\*\comctl32.lib \
+ $(BASEDIR)\public\sdk\lib\*\shell32.lib \
+ $(BASEDIR)\public\sdk\lib\*\gdi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\libc.lib \
+ $(BASEDIR)\public\sdk\lib\*\uuid.lib \
+ $(BASEDIR)\public\sdk\lib\*\advapi32.lib \
+ $(BASEDIR)\public\sdk\lib\*\setupapi.lib \
+ ..\lib\*\rovcomm.lib
+
+DLLBASE=0x69000000
+
+DLLENTRY= LibMain
+
+NOT_LEAN_AND_MEAN=1
+
+INCLUDES=.;..\inc;..\..\inc;$(BASEDIR)\private\windows\inc
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+!IF "$(SHELLDBG)"=="1"
+C_DEFINES=$(C_DEFINES) -DDEBUG -DFULL_DEBUG
+!ENDIF
+
+UMTYPE=windows
+EXPECTED_WINVER=4.0
+
+SOURCES= serialui.rc \
+ serialui.c \
+ dll.c \
+ util.c \
+ cstrings.c \
+ port.c
+
+PRECOMPILED_INCLUDE=proj.h
+PRECOMPILED_PCH=proj.pch
+PRECOMPILED_OBJ=proj.obj
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/serialui/util.c b/private/unimodem/serialui/util.c
new file mode 100644
index 000000000..d8ac24627
--- /dev/null
+++ b/private/unimodem/serialui/util.c
@@ -0,0 +1,290 @@
+//---------------------------------------------------------------------------
+//
+// Copyright (c) Microsoft Corporation 1993-1996
+//
+// File: util.c
+//
+// This files contains all common utility routines
+//
+// History:
+// 12-23-93 ScottH Created
+// 09-22-95 ScottH Ported to NT
+//
+//---------------------------------------------------------------------------
+
+#include "proj.h" // common headers
+
+
+//-----------------------------------------------------------------------------------
+// Wrapper that finds a device instance
+//-----------------------------------------------------------------------------------
+
+
+/*----------------------------------------------------------
+Purpose: Enumerates the HKEY_LOCAL_MACHINE branch and finds the
+ device matching the given class and value. If there
+ are duplicate devices that match both criteria, only the
+ first device is returned.
+
+ Returns TRUE if the device was found.
+
+Returns: see above
+Cond: --
+*/
+BOOL
+PRIVATE
+FindDev_Find(
+ IN LPFINDDEV pfinddev,
+ IN LPGUID pguidClass, OPTIONAL
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue)
+ {
+ BOOL bRet = FALSE;
+ TCHAR szKey[MAX_BUF];
+ TCHAR szName[MAX_BUF];
+ HDEVINFO hdi;
+ DWORD dwRW = KEY_READ;
+
+ ASSERT(pfinddev);
+ ASSERT(pszValueName);
+ ASSERT(pszValue);
+
+ if (USER_IS_ADMIN()) dwRW |= KEY_WRITE;
+
+ // BUGBUG (scotth): hack to support no device instances because
+ // ports do not have a class GUID. This should be fixed after SUR.
+
+ // Is there a class GUID?
+ if (pguidClass)
+ {
+ // Yes; use it
+ hdi = CplDiGetClassDevs(pguidClass, NULL, NULL, 0);
+ if (INVALID_HANDLE_VALUE != hdi)
+ {
+ SP_DEVINFO_DATA devData;
+ DWORD iIndex = 0;
+ HKEY hkey;
+
+ // Look for the modem that has the matching value
+ devData.cbSize = sizeof(devData);
+ while (CplDiEnumDeviceInfo(hdi, iIndex, &devData))
+ {
+ hkey = CplDiOpenDevRegKey(hdi, &devData, DICS_FLAG_GLOBAL, 0, DIREG_DRV, dwRW);
+ if (INVALID_HANDLE_VALUE != hkey)
+ {
+ // Does the value match?
+ DWORD cbData = sizeof(szName);
+ if (NO_ERROR == RegQueryValueEx(hkey, pszValueName, NULL, NULL,
+ (LPBYTE)szName, &cbData) &&
+ IsSzEqual(pszValue, szName))
+ {
+ // Yes
+ pfinddev->hkeyDrv = hkey;
+ pfinddev->hdi = hdi;
+ BltByte(&pfinddev->devData, &devData, sizeof(devData));
+
+ // Don't close the driver key or free the DeviceInfoSet,
+ // but exit
+ bRet = TRUE;
+ break;
+ }
+ RegCloseKey(hkey);
+ }
+
+ iIndex++;
+ }
+
+ // Free the DeviceInfoSet if nothing was found. Otherwise, we will
+ // retain these handles so the caller can make use of this.
+ if ( !bRet )
+ {
+ CplDiDestroyDeviceInfoList(hdi);
+ }
+ }
+ }
+ else
+ {
+ // No; HACK ALERT! Hmm, it must be a port class in SUR.
+#pragma data_seg(DATASEG_READONLY)
+ static TCHAR const FAR c_szSerialComm[] = TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM");
+#pragma data_seg()
+
+ HKEY hkeyEnum;
+ DWORD iSubKey;
+ TCHAR szName[MAX_BUF];
+ DWORD cbName;
+ DWORD cbData;
+ DWORD dwType;
+ DWORD dwRet;
+
+ dwRet = RegOpenKey(HKEY_LOCAL_MACHINE, c_szSerialComm, &hkeyEnum);
+ if (NO_ERROR == dwRet)
+ {
+ ZeroInit(pfinddev);
+
+ iSubKey = 0;
+
+ cbName = sizeof(szName);
+ cbData = sizeof(pfinddev->szPort);
+
+ while (NO_ERROR == RegEnumValue(hkeyEnum, iSubKey++, szName,
+ &cbName, NULL, &dwType,
+ (LPBYTE)pfinddev->szPort, &cbData))
+ {
+ if (REG_SZ == dwType &&
+ 0 == lstrcmpi(pfinddev->szPort, pszValue))
+ {
+ bRet = TRUE;
+ break;
+ }
+
+ cbName = sizeof(szName);
+ cbData = sizeof(pfinddev->szPort);
+ }
+ RegCloseKey(hkeyEnum);
+ }
+ }
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Creates a FINDDEV structure given the device class,
+ and a valuename and its value.
+
+Returns: TRUE if the device is found in the system
+
+Cond: --
+*/
+BOOL
+PUBLIC
+FindDev_Create(
+ OUT LPFINDDEV FAR * ppfinddev,
+ IN LPGUID pguidClass, OPTIONAL
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue)
+ {
+ BOOL bRet;
+ LPFINDDEV pfinddev;
+
+ DEBUG_CODE( TRACE_MSG(TF_FUNC, " > FindDev_Create(....%s, %s, ...)",
+ Dbg_SafeStr(pszValueName), Dbg_SafeStr(pszValue)); )
+
+ ASSERT(ppfinddev);
+ ASSERT(pszValueName);
+ ASSERT(pszValue);
+
+ pfinddev = (LPFINDDEV)LocalAlloc(LPTR, sizeof(*pfinddev));
+ if (NULL == pfinddev)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ bRet = FindDev_Find(pfinddev, pguidClass, pszValueName, pszValue);
+
+ if (FALSE == bRet)
+ {
+ // Didn't find anything
+ FindDev_Destroy(pfinddev);
+ pfinddev = NULL;
+ }
+ }
+
+ *ppfinddev = pfinddev;
+
+ DBG_EXIT_BOOL(FindDev_Create, bRet);
+
+ return bRet;
+ }
+
+
+/*----------------------------------------------------------
+Purpose: Destroys a FINDDEV structure
+
+Returns: TRUE on success
+Cond: --
+*/
+BOOL
+PUBLIC
+FindDev_Destroy(
+ IN LPFINDDEV this)
+ {
+ BOOL bRet;
+
+ if (NULL == this)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ if (this->hkeyDrv)
+ RegCloseKey(this->hkeyDrv);
+
+ if (this->hdi && INVALID_HANDLE_VALUE != this->hdi)
+ CplDiDestroyDeviceInfoList(this->hdi);
+
+ LocalFreePtr(this);
+
+ bRet = TRUE;
+ }
+
+ return bRet;
+ }
+
+
+//-----------------------------------------------------------------------------------
+// Debug functions
+//-----------------------------------------------------------------------------------
+
+
+#ifdef DEBUG
+
+#pragma data_seg(DATASEG_READONLY)
+
+#ifdef WIN95
+struct _RETERRMAP
+ {
+ RETERR ret;
+ LPCTSTR psz;
+ } const c_rgreterrmap[] = {
+ { NO_ERROR, "NO_ERROR" },
+ { DI_ERROR, "DI_ERROR" },
+ { ERR_DI_INVALID_DEVICE_ID, "ERR_DI_INVALID_DEVICE_ID" },
+ { ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST, "ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST" },
+ { ERR_DI_REG_API, "ERR_DI_REG_API" },
+ { ERR_DI_LOW_MEM, "ERR_DI_LOW_MEM" },
+ { ERR_DI_BAD_DEV_INFO, "ERR_DI_BAD_DEV_INFO" },
+ { ERR_DI_INVALID_CLASS_INSTALLER, "ERR_DI_INVALID_CLASS_INSTALLER" },
+ { ERR_DI_DO_DEFAULT, "ERR_DI_DO_DEFAULT" },
+ { ERR_DI_USER_CANCEL, "ERR_DI_USER_CANCEL" },
+ { ERR_DI_NOFILECOPY, "ERR_DI_NOFILECOPY" },
+ { ERR_DI_BAD_CLASS_INFO, "ERR_DI_BAD_CLASS_INFO" },
+ };
+#endif
+
+#pragma data_seg()
+
+#ifdef WIN95
+/*----------------------------------------------------------
+Purpose: Returns the string form of a RETERR.
+
+Returns: String ptr
+Cond: --
+*/
+LPCTSTR PUBLIC Dbg_GetReterr(
+ RETERR ret)
+ {
+ int i;
+
+ for (i = 0; i < ARRAY_ELEMENTS(c_rgreterrmap); i++)
+ {
+ if (ret == c_rgreterrmap[i].ret)
+ return c_rgreterrmap[i].psz;
+ }
+ return "Unknown RETERR";
+ }
+#endif // WIN95
+
+#endif // DEBUG
diff --git a/private/unimodem/serialui/util.h b/private/unimodem/serialui/util.h
new file mode 100644
index 000000000..34eeb23fe
--- /dev/null
+++ b/private/unimodem/serialui/util.h
@@ -0,0 +1,40 @@
+//
+// util.h: Declares data, defines and struct types for common code
+// module.
+//
+//
+
+#ifndef __UTIL_H__
+#define __UTIL_H__
+
+#if defined(DEBUG) && defined(WIN95)
+LPCTSTR PUBLIC Dbg_GetReterr(RETERR ret);
+#endif
+
+//
+// FINDDEV structure
+//
+typedef struct tagFINDDEV
+ {
+ HDEVINFO hdi;
+ SP_DEVINFO_DATA devData;
+ HKEY hkeyDrv;
+ TCHAR szPort[MAX_BUF_SHORT];
+ } FINDEV, FAR * LPFINDDEV;
+
+BOOL
+PUBLIC
+FindDev_Create(
+ OUT LPFINDDEV FAR * ppfinddev,
+ IN LPGUID pguidClass,
+ IN LPCTSTR pszValueName,
+ IN LPCTSTR pszValue);
+
+BOOL
+PUBLIC
+FindDev_Destroy(
+ IN LPFINDDEV this);
+
+
+#endif // __UTIL_H__
+
diff --git a/private/unimodem/tapisp/cfgdlg.c b/private/unimodem/tapisp/cfgdlg.c
new file mode 100644
index 000000000..bc3c0fa18
--- /dev/null
+++ b/private/unimodem/tapisp/cfgdlg.c
@@ -0,0 +1,578 @@
+//****************************************************************************
+//
+// Module: Unimdm.tsp
+// File: cfgdlg.c
+// Content: This file contains the moudle configuration.
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Wed 04-Aug-1993 09:20:24 -by- Viroon Touranachun [viroont]
+// Ported from TAPI's atsp
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include "wndthrd.h"
+#include <regstr.h>
+#include <commctrl.h>
+#include "rcids.h"
+
+#ifdef UNDER_CONSTRUCTION
+#include "umdmhelp.h"
+
+#endif //UNDER_CONSTRUCTION
+
+// Private prototype exported by MODEMUI.DLL
+typedef DWORD (WINAPI *LPFNMDMDLG)(LPWSTR, HWND, LPCOMMCONFIG, LPVOID, DWORD);
+
+LRESULT UnimdmSettingProc (HWND hWnd, UINT message,
+ WPARAM wParam, LPARAM lParam);
+
+//****************************************************************************
+//*********************** The Device ID Specific Calls************************
+//****************************************************************************
+
+//****************************************************************************
+// void DevCfgDialog(HWND hwndOwner,
+// DWORD dwType,
+// DWORD dwDevCaps,
+// DWORD dwOptions,
+// LPDEVCFG lpDevCfg)
+//
+// Functions: Displays the modem property pages
+//
+// Return: None.
+//****************************************************************************
+
+void DevCfgDialog (HWND hwndOwner,
+ PPROPREQ pPropReq,
+ LPDEVCFG lpDevCfg)
+{
+ HMODULE hMdmUI;
+ PROPSHEETPAGE psp;
+ DCDI dcdi;
+ LPFNMDMDLG lpfnMdmDlg;
+ UINT uNumWideChars;
+#ifndef UNICODE
+ LPWSTR lpwszDeviceName;
+
+ // Convert pPropReq->szDeviceName (Ansi) to lpwszDeviceName (Unicode)
+
+ // Get number of wide chars to alloc
+ uNumWideChars = MultiByteToWideChar(CP_ACP,
+ MB_PRECOMPOSED,
+ pPropReq->szDeviceName,
+ -1,
+ NULL,
+ 0);
+
+ // Alloc with room for terminator
+ lpwszDeviceName = (LPWSTR)LocalAlloc(LPTR,
+ (1 + uNumWideChars) * sizeof(WCHAR));
+ if (NULL == lpwszDeviceName)
+ {
+ return;
+ }
+
+ // Do the conversion and call modemui.dll if it succeeds.
+ if (MultiByteToWideChar(CP_ACP,
+ MB_PRECOMPOSED,
+ pPropReq->szDeviceName,
+ -1,
+ lpwszDeviceName,
+ uNumWideChars))
+ {
+#endif // UNICODE
+
+ // Load the modemui library
+ //
+ if ((hMdmUI = LoadLibrary(TEXT("modemui.dll"))) != NULL)
+ {
+ if ((lpfnMdmDlg = (LPFNMDMDLG)GetProcAddress(hMdmUI,
+ "Mdm_CommConfigDialog"))
+ != NULL)
+ {
+ dcdi.dwType = pPropReq->dwMdmType;
+ dcdi.dwDevCaps = pPropReq->dwMdmCaps;
+ dcdi.dwOptions = pPropReq->dwMdmOptions;
+ dcdi.lpDevCfg = lpDevCfg;
+
+ // Prepare our own property page
+ //
+ psp.dwSize = sizeof(PROPSHEETPAGE);
+ psp.dwFlags = 0;
+ psp.hInstance = ghInstance;
+ psp.pszTemplate = MAKEINTRESOURCE(IDD_TERMINALSETTING);
+ psp.pfnDlgProc = UnimdmSettingProc;
+ psp.lParam = (LPARAM)(LPDCDI)&dcdi;
+ psp.pfnCallback = NULL;
+
+ // Bring up property sheets for modems and get the updated commconfig
+ //
+#ifdef UNICODE
+ (*lpfnMdmDlg)(pPropReq->szDeviceName, hwndOwner,
+#else // UNICODE
+ (*lpfnMdmDlg)(lpwszDeviceName, hwndOwner,
+#endif // UNICODE
+ (LPCOMMCONFIG)&(lpDevCfg->commconfig),
+ &psp , 1);
+ };
+ FreeLibrary(hMdmUI);
+ };
+#ifndef UNICODE
+ };
+ LocalFree(lpwszDeviceName);
+#endif // UNICODE
+ return;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TUISPI_lineConfigDialog(
+// TUISPIDLLCALLBACK pfnUIDLLCallback,
+// DWORD dwDeviceID,
+// HWND hwndOwner,
+// LPCSTR lpszDeviceClass)
+//
+// Functions: Allows the user to edit the modem configuration through UI. The
+// modification is applied to the line immediately.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALDEVICECLASS if invalid device class
+// LINEERR_NODEVICE if invalid device ID
+//****************************************************************************
+
+LONG
+TSPIAPI
+TUISPI_lineConfigDialog(
+ TUISPIDLLCALLBACK pfnUIDLLCallback,
+ DWORD dwDeviceID,
+ HWND hwndOwner,
+ LPCTSTR lpszDeviceClass
+ )
+{
+ PDLGREQ pDlgReq;
+ DWORD cbSize;
+ DWORD dwRet;
+ PROPREQ PropReq;
+
+ DBG_DDI_ENTER("TUISPI_lineConfigDialog");
+
+ // Validate the requested device class
+ //
+ if (lpszDeviceClass != NULL) {
+
+ if (lstrlen(lpszDeviceClass) != 0) {
+
+ if (!ValidateDevCfgClass(lpszDeviceClass)) {
+
+ DBG_DDI_EXIT("TUISPI_lineConfigDialog", LINEERR_INVALDEVICECLASS);
+ return LINEERR_INVALDEVICECLASS;
+ }
+ }
+ }
+
+ // Get the modem properties
+ //
+ PropReq.DlgReq.dwCmd = UI_REQ_GET_PROP;
+ PropReq.DlgReq.dwParam = 0;
+
+ (*pfnUIDLLCallback)(dwDeviceID, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&PropReq, sizeof(PropReq));
+
+ // Bring up property sheets for modems and get the updated commconfig
+ //
+ cbSize = PropReq.dwCfgSize+sizeof(DLGREQ);
+ if ((pDlgReq = (PDLGREQ)LocalAlloc(LPTR, cbSize)) != NULL)
+ {
+ pDlgReq->dwCmd = UI_REQ_GET_DEVCFG;
+ pDlgReq->dwParam = PropReq.dwCfgSize;
+ (*pfnUIDLLCallback)(dwDeviceID, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)pDlgReq, cbSize);
+
+ DevCfgDialog(hwndOwner, &PropReq, (PDEVCFG)(pDlgReq+1));
+
+ // Save the changes back
+ //
+ pDlgReq->dwCmd = UI_REQ_SET_DEVCFG;
+ (*pfnUIDLLCallback)(dwDeviceID, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)pDlgReq, cbSize);
+
+ LocalFree(pDlgReq);
+ dwRet = ERROR_SUCCESS;
+ }
+ else
+ {
+ dwRet = LINEERR_NOMEM;
+ };
+
+ DBG_DDI_EXIT("TUISPI_lineConfigDialog", dwRet);
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TUISPI_lineConfigDialogEdit(
+// TUISPIDLLCALLBACK pfnUIDLLCallback,
+// DWORD dwDeviceID,
+// HWND hwndOwner,
+// LPCSTR lpszDeviceClass,
+// LPVOID const lpDeviceConfigIn,
+// DWORD dwSize,
+// LPVARSTRING lpDeviceConfigOut)
+//
+// Functions: Allows the user to edit the modem configuration through UI. The
+// modem configuration is passed in and modified in the config
+// structure. The modification does not applied to the line.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALPOINTER if invalid input/output buffer pointer
+// LINEERR_INVALDEVICECLASS if invalid device class
+// LINEERR_STRUCTURETOOSMALL if output buffer is too small
+// LINEERR_NODEVICE if invalid device ID
+//****************************************************************************
+
+LONG
+TSPIAPI
+TUISPI_lineConfigDialogEdit(
+ TUISPIDLLCALLBACK pfnUIDLLCallback,
+ DWORD dwDeviceID,
+ HWND hwndOwner,
+ LPCTSTR lpszDeviceClass,
+ LPVOID const lpDeviceConfigIn,
+ DWORD dwSize,
+ LPVARSTRING lpDeviceConfigOut)
+{
+ PDLGREQ pDlgReq;
+ DWORD cbSize;
+ DWORD dwRet;
+ PROPREQ PropReq;
+
+ DBG_DDI_ENTER("TUISPI_lineConfigDialogEdit");
+
+ // Validate the input/output buffer
+ //
+ if (lpDeviceConfigOut == NULL)
+ {
+ DBG_DDI_EXIT("TUISPI_lineConfigDialogEdit", LINEERR_INVALPOINTER);
+ return LINEERR_INVALPOINTER;
+ }
+
+ if (lpDeviceConfigIn == NULL)
+ {
+ DBG_DDI_EXIT("TUISPI_lineConfigDialogEdit", LINEERR_INVALPOINTER);
+ return LINEERR_INVALPOINTER;
+ }
+
+ if (lpDeviceConfigOut->dwTotalSize < sizeof(VARSTRING))
+ {
+ DBG_DDI_EXIT("TUISPI_lineConfigDialogEdit", LINEERR_STRUCTURETOOSMALL);
+ return LINEERR_STRUCTURETOOSMALL;
+ }
+
+ // Validate the requested device class
+ //
+ if (lpszDeviceClass != NULL)
+ {
+ if (!ValidateDevCfgClass(lpszDeviceClass))
+ {
+ DBG_DDI_EXIT("TUISPI_lineConfigDialogEdit", LINEERR_INVALDEVICECLASS);
+ return LINEERR_INVALDEVICECLASS;
+ }
+ };
+
+ // Get the modem properties
+ //
+ PropReq.DlgReq.dwCmd = UI_REQ_GET_PROP;
+ PropReq.DlgReq.dwParam = 0;
+
+ (*pfnUIDLLCallback)(dwDeviceID, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&PropReq, sizeof(PropReq));
+
+ // Bring up property sheets for modems and get the updated commconfig
+ //
+ cbSize = PropReq.dwCfgSize+sizeof(DLGREQ);
+ if ((pDlgReq = (PDLGREQ)LocalAlloc(LPTR, cbSize)) != NULL)
+ {
+ PDEVCFG pDevCfg = (PDEVCFG)(pDlgReq+1);
+
+ pDlgReq->dwCmd = UI_REQ_GET_DEVCFG;
+ pDlgReq->dwParam = PropReq.dwCfgSize;
+ (*pfnUIDLLCallback)(dwDeviceID, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)pDlgReq, cbSize);
+
+ // Validate the device configuration structure
+ //
+ cbSize = ((LPDEVCFG)lpDeviceConfigIn)->dfgHdr.dwSize;
+ if ((cbSize > pDevCfg->dfgHdr.dwSize) ||
+ (pDevCfg->dfgHdr.dwVersion != ((LPDEVCFG)lpDeviceConfigIn)->dfgHdr.dwVersion))
+ {
+ dwRet = LINEERR_INVALPARAM;
+ }
+ else
+ {
+ dwRet = ERROR_SUCCESS;
+ };
+
+ LocalFree(pDlgReq);
+ }
+ else
+ {
+ dwRet = LINEERR_NOMEM;
+ };
+
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // Set the output buffer size
+ //
+ lpDeviceConfigOut->dwUsedSize = sizeof(VARSTRING);
+ lpDeviceConfigOut->dwNeededSize = sizeof(VARSTRING) + cbSize;
+
+ // Validate the output buffer size
+ //
+ if (lpDeviceConfigOut->dwTotalSize >= lpDeviceConfigOut->dwNeededSize)
+ {
+ LPDEVCFG lpDevConfig;
+
+ // Initialize the buffer
+ //
+ lpDeviceConfigOut->dwStringFormat = STRINGFORMAT_BINARY;
+ lpDeviceConfigOut->dwStringSize = cbSize;
+ lpDeviceConfigOut->dwStringOffset = sizeof(VARSTRING);
+ lpDeviceConfigOut->dwUsedSize += cbSize;
+
+ lpDevConfig = (LPDEVCFG)(lpDeviceConfigOut+1);
+ hmemcpy((LPBYTE)lpDevConfig, (LPBYTE)lpDeviceConfigIn, cbSize);
+
+ // Bring up property sheets for modems and get the updated commconfig
+ //
+ DevCfgDialog(hwndOwner, &PropReq, (LPDEVCFG)lpDevConfig);
+ };
+ };
+ DBG_DDI_EXIT("TUISPI_lineConfigDialogEdit", dwRet);
+ return dwRet;
+}
+
+//****************************************************************************
+// ErrMsgBox()
+//
+// Function: Displays an error message box from resource text.
+//
+// Returns: None.
+//
+//****************************************************************************
+
+void ErrMsgBox(HWND hwnd, UINT idsErr, UINT uStyle)
+{
+ LPTSTR pszTitle, pszMsg;
+ int iRet;
+
+ // Allocate the string buffer
+ if ((pszTitle = (LPTSTR)LocalAlloc(LMEM_FIXED,
+ (MAXTITLE+MAXMESSAGE) * sizeof(TCHAR)))
+ == NULL)
+ return;
+
+ // Fetch the UI title and message
+ iRet = LoadString(ghInstance, IDS_ERR_TITLE, pszTitle, MAXTITLE) + 1;
+ pszMsg = pszTitle + iRet;
+ LoadString(ghInstance, idsErr, pszMsg, MAXTITLE+MAXMESSAGE-iRet)+1;
+
+ // Popup the message
+ MessageBox(hwnd, pszMsg, pszTitle, uStyle);
+
+ LocalFree(pszTitle);
+ return;
+}
+
+//****************************************************************************
+// IsInvalidSetting()
+//
+// Function: Validate the option settings.
+//
+//****************************************************************************
+
+BOOL IsInvalidSetting(HWND hWnd)
+{
+ BOOL fValid = TRUE;
+ UINT uSet;
+
+ // Wait-for-bong setting
+ //
+ if(IsWindowEnabled(GetDlgItem(hWnd, IDC_WAIT_SEC)))
+ {
+ uSet = (UINT)GetDlgItemInt(hWnd, IDC_WAIT_SEC, &fValid, FALSE);
+
+ // Check the valid setting
+ //
+ if ((!fValid) || (uSet > MAX_WAIT_BONG) || (uSet < MIN_WAIT_BONG))
+ {
+ HWND hCtrl = GetDlgItem(hWnd, IDC_WAIT_SEC);
+
+ // It is invalid, tell the user to reset.
+ //
+ ErrMsgBox(hWnd, IDS_ERR_INV_WAIT, MB_OK | MB_ICONEXCLAMATION);
+ SetFocus(hCtrl);
+ Edit_SetSel(hCtrl, 0, 0x7FFFF);
+ fValid = FALSE;
+ };
+ };
+
+ return (!fValid);
+}
+
+//****************************************************************************
+// UnimdmSettingProc()
+//
+// Function: A callback function to handle the terminal setting property page.
+//
+//****************************************************************************
+
+LRESULT UnimdmSettingProc (HWND hWnd,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ LPDEVCFG lpDevCfg;
+ DWORD fdwOptions;
+
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ {
+ LPDCDI lpdcdi;
+
+ // Remember the pointer to the line device
+ //
+ lpdcdi = (LPDCDI)(((LPPROPSHEETPAGE)lParam)->lParam);
+
+ lpDevCfg = lpdcdi->lpDevCfg;
+ SetWindowLong(hWnd, DWL_USER, (LONG)lpDevCfg);
+ fdwOptions = GETOPTIONS(lpDevCfg);
+
+ // Initialize the appearance of the dialog box
+ CheckDlgButton(hWnd, IDC_TERMINAL_PRE,
+ fdwOptions & TERMINAL_PRE ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hWnd, IDC_TERMINAL_POST,
+ fdwOptions & TERMINAL_POST ? BST_CHECKED : BST_UNCHECKED);
+
+ // Don't enable manual dial unless the modem supports BLIND dialing
+ // We need that capability to be able to do it.
+ //
+ if (lpdcdi->dwOptions & MDM_BLIND_DIAL)
+ {
+ CheckDlgButton(hWnd, IDC_MANUAL_DIAL,
+ fdwOptions & MANUAL_DIAL ? BST_CHECKED : BST_UNCHECKED);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hWnd, IDC_MANUAL_DIAL), FALSE);
+ };
+
+ // Enable for bong UI only for a modem that does not support bong
+ if ((lpdcdi->dwType != DT_NULL_MODEM) &&
+ !(lpdcdi->dwDevCaps & LINEDEVCAPFLAGS_DIALBILLING))
+ {
+ UDACCEL udac;
+
+ SetDlgItemInt(hWnd, IDC_WAIT_SEC, GETWAITBONG(lpDevCfg), FALSE);
+ SendDlgItemMessage(hWnd, IDC_WAIT_SEC_ARRW, UDM_SETRANGE, 0,
+ MAKELPARAM(MAX_WAIT_BONG, MIN_WAIT_BONG));
+ SendDlgItemMessage(hWnd, IDC_WAIT_SEC_ARRW, UDM_GETACCEL, 1,
+ (LPARAM)(LPUDACCEL)&udac);
+ udac.nInc = INC_WAIT_BONG;
+ SendDlgItemMessage(hWnd, IDC_WAIT_SEC_ARRW, UDM_SETACCEL, 1,
+ (LPARAM)(LPUDACCEL)&udac);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hWnd, IDC_WAIT_TEXT), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_WAIT_SEC), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_WAIT_SEC_ARRW), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_WAIT_UNIT), FALSE);
+ };
+
+ // Never display lights for null modem
+ //
+ if (lpdcdi->dwType == DT_NULL_MODEM)
+ {
+ ShowWindow(GetDlgItem(hWnd, IDC_LAUNCH_LIGHTSGRP), SW_HIDE);
+ ShowWindow(GetDlgItem(hWnd, IDC_LAUNCH_LIGHTSGRP), SW_HIDE);
+ EnableWindow(GetDlgItem(hWnd, IDC_LAUNCH_LIGHTS), FALSE);
+ EnableWindow(GetDlgItem(hWnd, IDC_LAUNCH_LIGHTS), FALSE);
+ }
+ else
+ {
+ CheckDlgButton(hWnd, IDC_LAUNCH_LIGHTS,
+ fdwOptions & LAUNCH_LIGHTS ? BST_CHECKED : BST_UNCHECKED);
+ };
+ break;
+ }
+
+#ifdef UNDER_CONSTRUCTION
+ case WM_HELP:
+ case WM_CONTEXTMENU:
+ ContextHelp(gaUmdmOptions, message, wParam, lParam);
+ break;
+#endif // UNDER_CONSTRUCTION
+
+ case WM_NOTIFY:
+ switch(((NMHDR FAR *)lParam)->code)
+ {
+ case PSN_KILLACTIVE:
+ SetWindowLong(hWnd, DWL_MSGRESULT, (LONG)IsInvalidSetting(hWnd));
+ return TRUE;
+
+ case PSN_APPLY:
+ //
+ // The property sheet information is permanently applied
+ //
+ lpDevCfg = (LPDEVCFG)GetWindowLong(hWnd, DWL_USER);
+
+ // Wait-for-bong setting. We already validate it
+ //
+ if(IsWindowEnabled(GetDlgItem(hWnd, IDC_WAIT_SEC)))
+ {
+ BOOL fValid;
+ UINT uWait;
+
+ uWait = (WORD)GetDlgItemInt(hWnd, IDC_WAIT_SEC, &fValid, FALSE);
+ SETWAITBONG(lpDevCfg, uWait);
+ ASSERT(fValid);
+ };
+
+ // Other options
+ //
+ fdwOptions = TERMINAL_NONE;
+
+ if(IsDlgButtonChecked(hWnd, IDC_TERMINAL_PRE))
+ fdwOptions |= TERMINAL_PRE;
+
+ if(IsDlgButtonChecked(hWnd, IDC_TERMINAL_POST))
+ fdwOptions |= TERMINAL_POST;
+
+ if(IsDlgButtonChecked(hWnd, IDC_MANUAL_DIAL))
+ fdwOptions |= MANUAL_DIAL;
+
+ if(IsDlgButtonChecked(hWnd, IDC_LAUNCH_LIGHTS))
+ fdwOptions |= LAUNCH_LIGHTS;
+
+ // Record the setting
+ SETOPTIONS(lpDevCfg, fdwOptions);
+
+ return TRUE;
+
+ default:
+ break;
+ };
+ break;
+
+ default:
+ break;
+ }
+ return FALSE;
+}
diff --git a/private/unimodem/tapisp/client.c b/private/unimodem/tapisp/client.c
new file mode 100644
index 000000000..ecaec1ecc
--- /dev/null
+++ b/private/unimodem/tapisp/client.c
@@ -0,0 +1,47 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: SLOT.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/25/96 JosephJ Created
+//
+//
+// Description: Implements the unimodem TSP notification mechanism:
+// The higher level API: UnimodemNotifyTSP()
+//
+//****************************************************************************
+#define UNICODE
+#include <windows.h>
+#include "slot.h"
+#include "tspnotif.h"
+
+
+BOOL WINAPI UnimodemNotifyTSP(PNOTIFICATION_FRAME pnf)
+{
+ BOOL fRet=FALSE;
+ HNOTIFICATION hN=0;
+
+ if (pnf->dwSig!=dwNFRAME_SIG || pnf->dwSize<sizeof(*pnf) ||
+ pnf->dwSize>MAX_NOTIFICATION_FRAME_SIZE)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ goto end;
+ }
+
+ hN = notifCreate(FALSE, SLOTNAME_UNIMODEM_NOTIFY_TSP, 0, 0);
+
+ if (hN)
+ {
+ fRet = notifWriteMsg(hN, (LPBYTE) pnf, pnf->dwSize);
+ notifFree(hN); hN=0;
+ }
+
+end:
+
+ return fRet;
+}
diff --git a/private/unimodem/tapisp/common.c b/private/unimodem/tapisp/common.c
new file mode 100644
index 000000000..40ed7600a
--- /dev/null
+++ b/private/unimodem/tapisp/common.c
@@ -0,0 +1,572 @@
+/******************************************************************************
+
+(C) Copyright MICROSOFT Corp., 1987-1993
+
+Rob Williams, June 93 w/ State machine and parser plagarized from RAS
+
+******************************************************************************/
+
+#include "unimdm.h"
+#include "mcxp.h"
+#include "common.h"
+
+
+BOOL WINAPI
+InitializeModemCommonList(
+ PCOMMON_MODEM_LIST CommonList
+ )
+
+{
+ D_TRACE(McxDpf(999,"InitializeModemCommonList");)
+
+ CommonList->ListHead=NULL;
+
+ InitializeCriticalSection(
+ &CommonList->CriticalSection
+ );
+
+ traceRegisterObject(
+ &CommonList,
+ TSP_COMMON_LIST_GUID,
+ TSP_COMMON_LIST_VERSION,
+ 0,
+ 0
+ );
+
+ return TRUE;
+
+}
+
+VOID WINAPI
+RemoveCommonList(
+ PCOMMON_MODEM_LIST CommonList
+ )
+
+{
+
+ EnterCriticalSection(&CommonList->CriticalSection);
+
+ //
+ // we go through the list removing the final reference count from the modem
+ //
+ while (CommonList->ListHead != NULL) {
+ //
+ // The call to RemoveReferenceToCommon() will change CommonList->ListHead
+ // so this is not an infinite loop
+ //
+ ASSERT(CommonList->ListHead->Reference == 1);
+
+ RemoveReferenceToCommon(
+ CommonList,
+ CommonList->ListHead
+ );
+
+ }
+
+ traceUnRegisterObject(&CommonList, 0, 0);
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ DeleteCriticalSection(&CommonList->CriticalSection);
+
+ return;
+
+}
+
+PSTR WINAPI
+LoadDialElement(
+ HKEY hKey,
+ PSTR SubKeyName
+ )
+
+{
+
+ CHAR szTemp[MAX_PATH];
+ CHAR szTemp2[MAX_PATH];
+ DWORD dwSize;
+ DWORD dwType;
+ LONG Result;
+ PSTR StringToReturn;
+
+ dwSize=sizeof(szTemp);
+
+ Result=RegQueryValueExA(
+ hKey,
+ SubKeyName,
+ NULL,
+ &dwType,
+ (VOID *)szTemp,
+ &dwSize
+ );
+
+ if (Result != ERROR_SUCCESS || dwType != REG_SZ || dwSize == 0) {
+
+ return NULL;
+ }
+
+ ExpandMacros(szTemp, szTemp2, NULL, NULL, 0);
+
+ StringToReturn=LocalAlloc(LPTR, lstrlenA(szTemp2) + 1);
+
+ lstrcpyA(StringToReturn,szTemp2);
+
+ return StringToReturn;
+
+}
+
+
+
+
+COMMON_MODEM_LIST gCommonList;
+
+static CHAR szAnswer[] = "Answer";
+static CHAR szMonitor[]= "Monitor";
+static CHAR szInit[] = "Init";
+static CHAR szHangup[] = "Hangup";
+
+static CHAR DialComponents[COMMON_DIAL_MAX_INDEX+1][20] =
+ { {"Prefix"},
+ {"DialPrefix"},
+ {"Blind_On"},
+ {"Blind_Off"},
+ {"Tone"},
+ {"Pulse"},
+ {"DialSuffix"},
+ {"Terminator"}};
+
+
+
+PVOID WINAPI
+OpenCommonModemInfo(
+ PCOMMON_MODEM_LIST CommonList,
+ HKEY hKey
+ )
+
+{
+
+ CHAR IdString[MAX_PATH];
+ DWORD dwRetSize;
+ LONG Result;
+ DWORD dwType;
+ PCOMMON_MODEM_INFO pCommon;
+ HKEY hSettingsKey;
+ UINT i;
+
+ dwRetSize = MAX_PATH;
+
+ //
+ // get the inf file name from the registry
+ //
+ Result=RegQueryValueExA(
+ hKey,
+ "InfPath",
+ NULL,
+ &dwType,
+ (VOID *)IdString,
+ &dwRetSize
+ );
+
+
+ if (ERROR_SUCCESS != Result) {
+
+ return NULL;
+ }
+
+ lstrcatA(IdString,"\\");
+
+ dwRetSize = MAX_PATH;
+
+ //
+ // get the inf section name from the registry
+ //
+ Result=RegQueryValueExA(
+ hKey,
+ "InfSection",
+ NULL,
+ &dwType,
+ (VOID *)&IdString[lstrlenA(IdString)],
+ &dwRetSize
+ );
+
+ if (ERROR_SUCCESS != Result) {
+
+ return NULL;
+ }
+
+ //
+ // the name is now "inf-name\inf-section"
+ //
+ D_TRACE(McxDpf(999,"Common modem info name is %s",IdString);)
+
+
+
+ //
+ // see if this one is already around
+ //
+ EnterCriticalSection(&CommonList->CriticalSection);
+
+ pCommon=CommonList->ListHead;
+
+ while (pCommon != NULL) {
+
+ if (lstrcmpA(IdString, pCommon->IdString) == 0) {
+ //
+ // found, up the ref count and return
+ //
+ pCommon->Reference++;
+
+ D_TRACE(McxDpf(999,"Found Common modem info Match, ref=%d",pCommon->Reference);)
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ return pCommon;
+ }
+
+ pCommon=pCommon->Next;
+ }
+
+
+ //
+ // did not find it on the list, need to build a new one
+ //
+ pCommon=LocalAlloc(LPTR, sizeof(COMMON_MODEM_INFO));
+
+ if (pCommon == NULL) {
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ return NULL;
+ }
+
+ lstrcpyA(pCommon->IdString, IdString);
+
+
+ D_TRACE(McxDpf(999,"Creating new Common modem info");)
+
+
+ //
+ // build the response list
+ //
+ pCommon->ResponseList=NewBuildResponsesLinkedList(hKey);
+
+ if (pCommon->ResponseList == NULL) {
+
+ D_TRACE(McxDpf(999,"Could not build response list");)
+ goto Fail;
+ }
+
+ //
+ // get statis init string
+ //
+ pCommon->ModemCommands[COMMON_INIT_COMMANDS]=NewLoadRegCommands(hKey, szInit, NULL);
+
+ if (pCommon->ModemCommands[COMMON_INIT_COMMANDS] == NULL) {
+
+ D_TRACE(McxDpf(999,"Could not load init string");)
+ goto Fail;
+ }
+
+ //
+ // get monitor string
+ //
+ pCommon->ModemCommands[COMMON_MONITOR_COMMANDS]=NewLoadRegCommands(hKey, szMonitor, NULL);
+
+ if (pCommon->ModemCommands[COMMON_MONITOR_COMMANDS] == NULL) {
+
+ D_TRACE(McxDpf(999,"Could not load Monitor string");)
+ goto Fail;
+ }
+
+ //
+ // get answer string
+ //
+ pCommon->ModemCommands[COMMON_ANSWER_COMMANDS]=NewLoadRegCommands(hKey, szAnswer, NULL);
+
+ if (pCommon->ModemCommands[COMMON_ANSWER_COMMANDS] == NULL) {
+
+ D_TRACE(McxDpf(999,"Could not Load Answer string");)
+ goto Fail;
+ }
+#if 0
+ //
+ // get hangup string
+ //
+ pCommon->ModemCommands[COMMON_HANGUP_COMMANDS]=NewLoadRegCommands(hKey, szHangup, NULL);
+
+ if (pCommon->ModemCommands[COMMON_HANGUP_COMMANDS] == NULL) {
+
+ D_TRACE(McxDpf(999,"Could not load hangup string");)
+ goto Fail;
+ }
+#endif
+
+ if (RegOpenKeyA(hKey, szSettings, &hSettingsKey)==ERROR_SUCCESS) {
+
+ for (i=0; i<COMMON_DIAL_MAX_INDEX+1; i++) {
+
+ pCommon->DialComponents[i]=LoadDialElement(hSettingsKey,
+ DialComponents[i]);
+ D_TRACE(if (pCommon->DialComponents[i] == NULL) {
+ McxDpf(999,"Could not load %s",
+ DialComponents[i]);
+ }
+ )
+ }
+
+ RegCloseKey(hSettingsKey);
+ }
+
+
+ //
+ // set the reference count to 2 here so that when the modem is closed
+ // the common block will stick around until explicitly freed
+ //
+ pCommon->Reference=2;
+
+ pCommon->Next=CommonList->ListHead;
+
+ CommonList->ListHead=pCommon;
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ return pCommon;
+
+Fail:
+
+ //
+ // free any dial commands we loaded
+ //
+ for (i=0; i<COMMON_DIAL_MAX_INDEX+1; i++) {
+
+ if (pCommon->DialComponents[i] != NULL) {
+
+ LocalFree(pCommon->DialComponents[i]);
+ }
+ }
+
+ //
+ // free and modem commands that we loaded
+ //
+ for (i=0; i<COMMON_MAX_COMMANDS; i++) {
+
+ if (pCommon->ModemCommands[i] != NULL) {
+
+ LocalFree(pCommon->ModemCommands[i]);
+ }
+ }
+
+
+ //
+ // get rid of the response list if we got it
+ //
+ if (pCommon->ResponseList != NULL) {
+
+ LocalFree(pCommon->ResponseList);
+ }
+
+
+
+ LocalFree(pCommon);
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ return NULL;
+}
+
+
+
+VOID WINAPI
+RemoveReferenceToCommon(
+ PCOMMON_MODEM_LIST CommonList,
+ HANDLE hCommon
+ )
+
+{
+ PCOMMON_MODEM_INFO pCommon=(PCOMMON_MODEM_INFO)hCommon;
+ PCOMMON_MODEM_INFO Current;
+ PCOMMON_MODEM_INFO Prev;
+ UINT i;
+
+ ASSERT(pCommon != NULL);
+
+ EnterCriticalSection(&CommonList->CriticalSection);
+
+ pCommon->Reference--;
+
+ if (pCommon->Reference > 0) {
+ //
+ // not done with it yet
+ //
+ D_TRACE(McxDpf(999,"RemoveReferenceToCommon, ref=%d",
+ pCommon->Reference);)
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ return;
+ }
+
+ //
+ // ref count is zero get rid of the common block
+ //
+
+ Prev=NULL;
+ Current=CommonList->ListHead;
+
+ while (Current != NULL) {
+
+ if (Current == pCommon) {
+
+ if (Prev == NULL) {
+
+ CommonList->ListHead=Current->Next;
+
+ } else {
+
+ Prev->Next=Current->Next;
+ }
+ break;
+ }
+
+ Prev=Current;
+
+ Current=Current->Next;
+
+ }
+
+ ASSERT(Current != NULL);
+
+ LeaveCriticalSection(&CommonList->CriticalSection);
+
+ D_TRACE(McxDpf(999,"RemoveReferenceToCommon, removing common, %s",
+ pCommon->IdString);)
+
+ //
+ // free any dial commands we loaded
+ //
+ for (i=0; i<COMMON_DIAL_MAX_INDEX+1; i++) {
+
+ if (pCommon->DialComponents[i] != NULL) {
+
+ LocalFree(pCommon->DialComponents[i]);
+ }
+ }
+
+ //
+ // free and modem commands that we loaded
+ //
+ for (i=0; i<COMMON_MAX_COMMANDS; i++) {
+
+ if (pCommon->ModemCommands[i] != NULL) {
+
+ LocalFree(pCommon->ModemCommands[i]);
+ }
+ }
+
+
+ //
+ // get rid of the response list if we got it
+ //
+ if (pCommon->ResponseList != NULL) {
+
+ LocalFree(pCommon->ResponseList);
+ }
+
+
+
+ LocalFree(pCommon);
+
+ return;
+}
+
+
+
+
+HANDLE WINAPI
+GetCommonResponseList(
+ HANDLE hCommon
+ )
+
+{
+ PCOMMON_MODEM_INFO pCommon=(PCOMMON_MODEM_INFO)hCommon;
+
+ return (HANDLE)pCommon->ResponseList;
+
+}
+
+
+PSTR WINAPI
+GetCommonCommandStringCopy(
+ HANDLE hCommon,
+ UINT Index
+ )
+
+{
+ PCOMMON_MODEM_INFO pCommon=(PCOMMON_MODEM_INFO)hCommon;
+ PSTR Commands;
+ PSTR pTemp;
+
+ pTemp=pCommon->ModemCommands[Index];
+
+ while (1) {
+
+ if (*pTemp++ == '\0') {
+
+ if (*pTemp++ == '\0') {
+
+ break;
+ }
+ }
+ }
+
+
+
+ Commands=LocalAlloc(LPTR, pTemp-pCommon->ModemCommands[Index]);
+
+ if (NULL == Commands) {
+
+ D_TRACE(McxDpf(999,"GetCommonCommandStringCopy: Alloc failed");)
+
+ return NULL;
+ }
+
+ CopyMemory(Commands,pCommon->ModemCommands[Index],pTemp-pCommon->ModemCommands[Index]);
+
+ return Commands;
+
+}
+
+
+DWORD WINAPI
+GetCommonDialComponent(
+ HANDLE hCommon,
+ PSTR DestString,
+ DWORD DestLength,
+ DWORD Index
+ )
+
+{
+ PCOMMON_MODEM_INFO pCommon=(PCOMMON_MODEM_INFO)hCommon;
+ DWORD Length;
+
+ if (pCommon->DialComponents[Index] == NULL) {
+
+ lstrcpyA(DestString,"");
+
+ return 0;
+ }
+
+ Length=lstrlenA(pCommon->DialComponents[Index])+1;
+
+ if (Length+1 > DestLength) {
+
+ return 0;
+ }
+
+ lstrcpyA(
+ DestString,
+ pCommon->DialComponents[Index]
+ );
+
+ return Length;
+
+}
diff --git a/private/unimodem/tapisp/common.h b/private/unimodem/tapisp/common.h
new file mode 100644
index 000000000..d7d203139
--- /dev/null
+++ b/private/unimodem/tapisp/common.h
@@ -0,0 +1,88 @@
+#define COMMON_INIT_COMMANDS 0
+#define COMMON_MONITOR_COMMANDS 1
+#define COMMON_ANSWER_COMMANDS 2
+#define COMMON_HANGUP_COMMANDS 3
+
+#define COMMON_MAX_COMMANDS 4
+
+#define COMMON_DIAL_COMMOND_PREFIX 0
+#define COMMON_DIAL_PREFIX 1
+#define COMMON_DIAL_BLIND_ON 2
+#define COMMON_DIAL_BLIND_OFF 3
+#define COMMON_DIAL_TONE 4
+#define COMMON_DIAL_PULSE 5
+#define COMMON_DIAL_SUFFIX 6
+#define COMMON_DIAL_TERMINATION 7
+
+#define COMMON_DIAL_MAX_INDEX COMMON_DIAL_TERMINATION
+
+typedef struct _COMMON_MODEM_INFO {
+
+ struct _COMMON_MODEM_INFO * Next;
+ UINT Reference;
+
+ CHAR IdString[MAX_PATH];
+
+ PVOID ResponseList;
+
+ PSTR ModemCommands[COMMON_MAX_COMMANDS];
+
+ PSTR DialComponents[COMMON_DIAL_MAX_INDEX+1];
+
+} COMMON_MODEM_INFO, *PCOMMON_MODEM_INFO;
+
+typedef struct _COMMON_MODEM_LIST {
+
+ PCOMMON_MODEM_INFO volatile ListHead;
+
+ CRITICAL_SECTION CriticalSection;
+
+} COMMON_MODEM_LIST, *PCOMMON_MODEM_LIST;
+
+extern COMMON_MODEM_LIST gCommonList;
+
+
+BOOL WINAPI
+InitializeModemCommonList(
+ PCOMMON_MODEM_LIST CommonList
+ );
+
+VOID WINAPI
+RemoveCommonList(
+ PCOMMON_MODEM_LIST CommonList
+ );
+
+
+
+PVOID WINAPI
+OpenCommonModemInfo(
+ PCOMMON_MODEM_LIST CommonList,
+ HKEY hKey
+ );
+
+VOID WINAPI
+RemoveReferenceToCommon(
+ PCOMMON_MODEM_LIST CommonList,
+ HANDLE hCommon
+ );
+
+
+
+HANDLE WINAPI
+GetCommonResponseList(
+ HANDLE hCommon
+ );
+
+PSTR WINAPI
+GetCommonCommandStringCopy(
+ HANDLE hCommon,
+ UINT Index
+ );
+
+DWORD WINAPI
+GetCommonDialComponent(
+ HANDLE hCommon,
+ PSTR DestString,
+ DWORD DestLength,
+ DWORD Index
+ );
diff --git a/private/unimodem/tapisp/debug.c b/private/unimodem/tapisp/debug.c
new file mode 100644
index 000000000..e6e978008
--- /dev/null
+++ b/private/unimodem/tapisp/debug.c
@@ -0,0 +1,214 @@
+//****************************************************************************
+//
+// Module: UNIMDM.TSP
+// File: debug.c
+// Content: This file contains miscellaneous debug routines.
+// History:
+// Wed 12-Apr-1995 11:26:28 -by- Viroon Touranachun [viroont]
+//
+//****************************************************************************
+
+#include "unimdm.h"
+
+#ifdef DEBUG
+
+//========== Debug output routines =========================================
+
+LINEEVENT glpfnDebugEventProc;
+
+HLOCAL WINAPI DebugLocalFree(HLOCAL hMem)
+{
+ HLOCAL hlRet;
+
+#ifdef LocalFree
+#undef LocalFree
+#endif // LocalFree
+
+ FillMemory(hMem, (DWORD)LocalSize(LocalHandle(hMem)), 0x69);
+
+ if ((hlRet = LocalFree(hMem)) != NULL)
+ {
+ DPRINTF1("UnimodemFree: LocalFree failed, error=%ld", GetLastError());
+ }
+
+ return hlRet;
+}
+
+// LineEventProc spewing code.
+void DebugSetEventProc(LINEEVENT lineEventProc)
+{
+ glpfnDebugEventProc = lineEventProc;
+}
+
+void CALLBACK DebugEventProc(HTAPILINE htLine,
+ HTAPICALL htCall,
+ DWORD dwMsg,
+ DWORD dwParam1,
+ DWORD dwParam2,
+ DWORD dwParam3)
+{
+ DPRINTF3("EventProc: htLine=0x%0.8x htCall=0x%0.8x dwMsg=0x%0.8x",
+ htLine, htCall, dwMsg);
+ DPRINTF3("EventProc:dwParam1=0x%0.8x dwParam2=0x%0.8x dwParam3=0x%0.8x",
+ dwParam1, dwParam2, dwParam3);
+
+ (*(glpfnDebugEventProc))(htLine, htCall, dwMsg,
+ dwParam1, dwParam2, dwParam3);
+}
+
+
+VOID WINAPIV
+TspDpf(
+ UINT Id,
+ LPTSTR FormatString,
+ ...
+ )
+
+{
+ va_list VarArg;
+ TCHAR OutBuffer[1024];
+
+ if (DisplayDebug(TF_GENERAL)) {
+
+ wsprintf(
+ OutBuffer,
+ TEXT("%d - UNIMDM: "),
+ Id
+ );
+
+ va_start(VarArg,FormatString);
+
+ wvsprintf(
+ OutBuffer+lstrlen(OutBuffer),
+ FormatString,
+ VarArg
+ );
+
+ lstrcat(OutBuffer,TEXT("\n"));
+
+ OutputDebugString(OutBuffer);
+ }
+
+ return;
+
+}
+
+VOID WINAPIV
+McxDpf(
+ UINT Id,
+ LPSTR FormatString,
+ ...
+ )
+
+{
+ va_list VarArg;
+ CHAR OutBuffer[1024];
+
+ if (DisplayDebug(TF_GENERAL)) {
+
+ wsprintfA(
+ OutBuffer,
+ "%d - UNIMDM: ",
+ Id
+ );
+
+ va_start(VarArg,FormatString);
+
+ wvsprintfA(
+ OutBuffer+lstrlenA(OutBuffer),
+ FormatString,
+ VarArg
+ );
+
+ lstrcatA(OutBuffer,"\n");
+
+ OutputDebugStringA(OutBuffer);
+ }
+
+ return;
+
+}
+
+#ifdef TEST_GTC // Function versions of the GTC_macros
+
+BOOL GTC_AleB(DWORD dwA, DWORD dwB)
+{
+ BOOL fRet;
+
+// ((DWORD)(((_A)<=(_B)) \
+// ? (((_B)-(_A))<=GTC_MAXDELTA)\
+// : (((_A)-(_B))>GTC_MAXDELTA)))
+
+ if (dwA<=dwB)
+ {
+ if ((dwB-dwA)<=GTC_MAXDELTA)
+ {
+ fRet=TRUE;
+ }
+ else
+ {
+ DPRINTF2("GTC_AleB(%d,%d) !!ROLLOVER!!, returning FALSE\n",
+ dwA, dwB);
+ fRet= FALSE;
+ }
+
+ }
+ else
+ {
+ if ((dwA-dwB)>GTC_MAXDELTA)
+ {
+ DPRINTF2("GTC_AleB(%d,%d) !!ROLLOVER!!, returning TRUE\n",
+ dwA, dwB);
+ fRet= TRUE;
+ }
+ else
+ {
+ fRet= FALSE;
+ }
+ }
+ return fRet;
+}
+
+DWORD GTC_DELTA(DWORD dwStart, DWORD dwEnd)
+{
+ DWORD dwRet;
+// ((DWORD) \
+// (((_End)>=(_Start)) \
+// ? ((_End)-(_Start)) \
+// : ((_End)+(GTC_MASK-(_Start)))))
+ if (dwEnd>=dwStart)
+ {
+ dwRet= dwEnd-dwStart;
+ }
+ else
+ {
+ dwRet=dwEnd+(GTC_MASK-dwStart);
+ DPRINTF3("GTC_DELTA(%d,%d) !!ROLLOVER!!, returning %d\n",
+ dwStart, dwEnd, dwRet);
+ }
+
+ return dwRet;
+}
+
+void fnGTC_AequalsBplusC(LPDWORD lpdwA, DWORD dwB, DWORD dwC)
+{
+// ((_A=((_B)+(_C))&GTC_MASK),(_A)?(_A):((_A)=1))
+ DWORD dwA = dwB+dwC;
+ *lpdwA = dwA&GTC_MASK;
+ if (*lpdwA!=dwA)
+ {
+ DPRINTF3("GTC_A=B+C(%d,%d,%d) !!ROLLOVER!!\n",
+ *lpdwA, dwB, dwC);
+ }
+ if (!*lpdwA)
+ {
+ *lpdwA=1;
+ DPRINTF3("GTC_A=B+C(%d,%d,%d) !!ROLLOVER TO NULL!!\n",
+ *lpdwA, dwB, dwC);
+ }
+
+}
+
+#endif // TEST_GTC
+
+#endif // DEBUG
diff --git a/private/unimodem/tapisp/debug.h b/private/unimodem/tapisp/debug.h
new file mode 100644
index 000000000..f00723160
--- /dev/null
+++ b/private/unimodem/tapisp/debug.h
@@ -0,0 +1,182 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: debug.h
+// Content: This file contains the declaration for debug macros
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// History:
+//
+//****************************************************************************
+
+// Defines for rovcomm.h
+
+#define NORTL
+#define NOMEM
+#define NODA
+#define NOSHAREDHEAP
+#define NOFILEINFO
+#define NOCOLORHELP
+#define NODRAWTEXT
+#define NODIALOGHELPER
+#define NOMESSAGESTRING
+#define NOSTRING
+#define NOPATH
+#define NOSYNC
+#define NODI
+
+#define SZ_MODULEA "UNIMDM"
+#define SZ_MODULEW L##"UNIMDM"
+#define SZ_DEBUGSECTION L##"UNIMDM"
+#define SZ_DEBUGINI L##"unimdm.ini"
+
+#include <rovcomm.h>
+
+// Trace flags
+#define TF_DWDEVICEID 0x00010000
+#define TF_HDLINE 0x00020000
+#define TF_HDCALL 0x00040000
+#define TF_PLINEDEV 0x00080000
+#define TF_PMODEMINFO 0x00100000
+
+// Traditional DPRINTF defines
+
+
+#define DPRINTF(sz) TRACE_MSG(TF_GENERAL, sz)
+#define DPRINTF1(sz,x) TRACE_MSG(TF_GENERAL, sz, x)
+#define DPRINTF2(sz,x,y) TRACE_MSG(TF_GENERAL, sz, x, y)
+#define DPRINTF3(sz,x,y,z) TRACE_MSG(TF_GENERAL, sz, x, y, z)
+#define DPRINTF4(sz,w,x,y,z) TRACE_MSG(TF_GENERAL, sz, w, x, y, z)
+
+#define DPRINTFA(sz) TRACE_MSGA(TF_GENERAL, sz)
+#define DPRINTFA1(sz,x) TRACE_MSGA(TF_GENERAL, sz, x)
+#define DPRINTFA2(sz,x,y) TRACE_MSGA(TF_GENERAL, sz, x, y)
+#define DPRINTFA3(sz,x,y,z) TRACE_MSGA(TF_GENERAL, sz, x, y, z)
+#define DPRINTFA4(sz,w,x,y,z) TRACE_MSGA(TF_GENERAL, sz, w, x, y, z)
+
+#define SPTrace(x) DBG_ENTER(x)
+
+// Supplementary debug print macros
+
+#define DBG_DDI_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_DWDEVICEID, \
+ ">" fn "(dwDeviceID = %#08lx)", \
+ (ULONG)(dwDeviceID))
+
+#define DBG_HDL_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_HDLINE, \
+ ">" fn "(hdLine = %#08lx)", \
+ (ULONG)(hdLine))
+
+#define DBG_HDC_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_HDCALL, \
+ ">" fn "(hdCall = %#08lx)", \
+ (ULONG)(hdCall))
+
+#define DBG_PLD_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_PLINEDEV, \
+ ">" fn "(pLineDev = %#08lx)", \
+ (ULONG)(pLineDev))
+
+#define DBG_PMI_ENTER(fn) \
+ TRACE_MSG(TF_FUNC | TF_PMODEMINFO, \
+ ">" fn "(pModemInfo = %#08lx)", \
+ (ULONG)(pModemInfo))
+
+#define DBG_DDI_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_DWDEVICEID, \
+ "<" fn "(dwDeviceID = %#08lx) with %#08lx", \
+ (ULONG)(dwDeviceID), (ULONG)(ul))
+
+#define DBG_HDL_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_HDLINE, \
+ "<" fn "(hdLine = %#08lx) with %#08lx", \
+ (ULONG)(hdLine), (ULONG)(ul))
+
+#define DBG_HDC_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_HDCALL, \
+ "<" fn "(hdCall = %#08lx) with %#08lx", \
+ (ULONG)(hdCall), (ULONG)(ul))
+
+#define DBG_PLD_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_PLINEDEV, \
+ "<" fn "(pLineDev = %#08lx) with %#08lx", \
+ (ULONG)(pLineDev), (ULONG)(ul))
+
+#define DBG_PMI_EXIT(fn, ul) \
+ TRACE_MSG(TF_FUNC | TF_PMODEMINFO, \
+ "<" fn "(pModemInfo = %#08lx) with %#08lx", \
+ (ULONG)(pModemInfo), (ULONG)(ul))
+
+// Debug Messages
+//
+#ifdef DEBUG
+
+// LineEventProc spewing code.
+void DebugSetEventProc(LINEEVENT lineEventProc);
+void CALLBACK DebugEventProc(HTAPILINE htLine,
+ HTAPICALL htCall,
+ DWORD dwMsg,
+ DWORD dwParam1,
+ DWORD dwParam2,
+ DWORD dwParam3);
+
+HLOCAL WINAPI DebugLocalFree(HLOCAL hMem);
+
+#define LocalFree(hMem) DebugLocalFree(hMem)
+
+// Non-Unicode
+VOID WINAPIV
+McxDpf(
+ UINT Id,
+ LPSTR FormatString,
+ ...
+ );
+
+// Unicode
+VOID WINAPIV
+TspDpf(
+ UINT Id,
+ LPTSTR FormatString,
+ ...
+ );
+
+
+#define D_TRACE(_x) {_x}
+
+#define MCXPRINTF(sz) McxDpf(pModemInfo->mi_dwID, sz)
+#define MCXPRINTF1(sz,x) McxDpf(pModemInfo->mi_dwID, sz,x)
+#define MCXPRINTF2(sz,x,y) McxDpf(pModemInfo->mi_dwID, sz,x,y)
+#define MCXPRINTF3(sz,x,y,z) McxDpf(pModemInfo->mi_dwID, sz,x,y,z)
+#define MCXPRINTF4(sz,w,x,y,z) McxDpf(pModemInfo->mi_dwID, sz,w,x,y,z)
+
+#define TSPPRINTF(sz) TspDpf(pLineDev->dwID, TEXT(sz))
+#define TSPPRINTF1(sz,x) TspDpf(pLineDev->dwID, TEXT(sz),x)
+#define TSPPRINTF2(sz,x,y) TspDpf(pLineDev->dwID, TEXT(sz),x,y)
+#define TSPPRINTF3(sz,x,y,z) TspDpf(pLineDev->dwID, TEXT(sz),x,y,z)
+#define TSPPRINTF4(sz,w,x,y,z) TspDpf(pLineDev->dwID, TEXT(sz),w,x,y,z)
+
+
+
+
+#else
+
+#define D_TRACE(_x)
+
+#define MCXPRINTF(sz)
+#define MCXPRINTF1(sz,x)
+#define MCXPRINTF2(sz,x,y)
+#define MCXPRINTF3(sz,x,y,z)
+#define MCXPRINTF4(sz,w,x,y,z)
+
+#define TSPPRINTF(sz)
+#define TSPPRINTF1(sz,x)
+#define TSPPRINTF2(sz,x,y)
+#define TSPPRINTF3(sz,x,y,z)
+#define TSPPRINTF4(sz,w,x,y,z)
+
+
+
+
+#endif //ifdef DEBUG
diff --git a/private/unimodem/tapisp/devioctl.c b/private/unimodem/tapisp/devioctl.c
new file mode 100644
index 000000000..a51898cb6
--- /dev/null
+++ b/private/unimodem/tapisp/devioctl.c
@@ -0,0 +1,1160 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: devioctl.c
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 5/16/95 Viroon Touranachun Moved from mdmutil.c
+//
+//
+// Description: Interface to kernel-mode unimodem
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+
+
+#ifdef WINNT
+#ifndef USE_SERVICECONTROLLER
+// # error "Unimplemented"
+
+#define MODEM_SERVICE_NAME \
+ L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\modem"
+
+#endif // USE_SERVICECONTROLLER
+
+
+// Global variable for the modem.sys service
+BOOL bModemSysStarted = FALSE;
+CRITICAL_SECTION ServiceControlerCriticalSection;
+#endif // WINNT
+
+
+LONG WINAPI
+MCXSetModemSettings(
+ HANDLE hModem,
+ PMODEMSETTINGS lpMS
+ );
+
+
+//****************************************************************************
+// DWORD MapMcxResult (DWORD)
+//
+// Function: Maps internal error to a standard error code.
+//
+// Returns: standard error code
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD MapMcxResult (DWORD dwResult)
+{
+ switch (dwResult)
+ {
+ case MDM_SUCCESS:
+ return ERROR_SUCCESS;
+
+ case MDM_PENDING:
+ return ERROR_IO_PENDING;
+
+ default:
+ return ERROR_IO_DEVICE;
+ }
+}
+
+
+#ifdef USE_SERVICECONTROLLER
+
+LONG WINAPI
+StartModemDriver(
+ VOID
+ )
+
+{
+
+ LONG lResult=ERROR_SUCCESS; // Assume success
+ BOOL bResult;
+
+ SC_HANDLE schModemSys;
+ SC_HANDLE schSCManager;
+ SERVICE_STATUS ServiceStatus;
+
+ EnterCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+
+ if (!bModemSysStarted) {
+
+ schSCManager=OpenSCManager(
+ NULL,
+ NULL,
+ SC_MANAGER_ALL_ACCESS
+ );
+
+ if (schSCManager != NULL) {
+ //
+ // now on service
+ //
+ schModemSys=OpenService(
+ schSCManager,
+ TEXT("modem"),
+ SERVICE_START | SERVICE_STOP | SERVICE_QUERY_STATUS
+ );
+
+ if (schModemSys == NULL) {
+
+ DPRINTF("OpenService() for modem.sys failed!");
+ CloseServiceHandle(schSCManager);
+
+ lResult=ERROR_IO_DEVICE;
+
+ goto Leave;
+
+
+ }
+
+ bResult=QueryServiceStatus(
+ schModemSys,
+ &ServiceStatus
+ );
+
+ if (bResult) {
+
+ if (ServiceStatus.dwCurrentState != SERVICE_RUNNING) {
+
+ bResult=StartService(
+ schModemSys,
+ 0,
+ NULL
+ );
+
+ if (bResult) {
+
+ DPRINTF("StartService() for modem.sys succeeded!");
+
+ bModemSysStarted=TRUE;
+
+ } else {
+
+ DPRINTF("StartService() for modem.sys FAILED!");
+
+ lResult = GetLastError();
+
+ }
+
+ } else {
+
+ bModemSysStarted=TRUE;
+ }
+
+ } else {
+
+ lResult = GetLastError();
+
+ DPRINTF1("QueryServiceStatus() for modem.sys failed (%d)!", lResult);
+
+ }
+
+ CloseServiceHandle(schModemSys);
+
+ CloseServiceHandle(schSCManager);
+
+ } else {
+
+ DPRINTF("OpenSCManager() failed!");
+
+ lResult=ERROR_IO_DEVICE;
+
+ } // if opened SC macanger
+
+ } else {
+ //
+ // already running
+ //
+ }
+
+Leave:
+
+ LeaveCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+
+ return lResult;
+
+}
+
+
+
+LONG WINAPI
+StopModemDriver(
+ VOID
+ )
+
+{
+
+ LONG lResult;
+ BOOL bResult;
+
+ SC_HANDLE schModemSys;
+ SC_HANDLE schSCManager;
+ SERVICE_STATUS ServiceStatus;
+
+ EnterCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+
+ if (bModemSysStarted) {
+
+ schSCManager=OpenSCManager(
+ NULL,
+ NULL,
+ SC_MANAGER_ALL_ACCESS
+ );
+
+ if (schSCManager != NULL) {
+ //
+ // now on service
+ //
+ schModemSys=OpenService(
+ schSCManager,
+ TEXT("modem"),
+ SERVICE_START | SERVICE_STOP | SERVICE_QUERY_STATUS
+ );
+
+ if (schModemSys != NULL) {
+
+ bResult=ControlService(
+ schModemSys,
+ SERVICE_CONTROL_STOP,
+ &ServiceStatus
+ );
+
+ if (bResult) {
+
+ bModemSysStarted=TRUE;
+ }
+
+ CloseServiceHandle(schModemSys);
+
+ }
+
+ CloseServiceHandle(schSCManager);
+
+ }
+ }
+
+ LeaveCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ return ERROR_SUCCESS;
+
+}
+
+#else // !USE_SERVICECONTROLLER
+
+
+BOOL WINAPI
+ObtainLoadDriverPrivilege(
+ IN PBOOLEAN WasEnabled
+ ) {
+
+ NTSTATUS Status;
+
+ DPRINTF("ObtainLoadDriverPrivilege");
+
+
+ //
+ // Obtain the process's access token for the current thread
+ //
+
+ Status = RtlImpersonateSelf(SecurityImpersonation);
+
+ if (!NT_SUCCESS(Status)) {
+ DPRINTF1("RtlImpersonateSelf returned 0x%08x", Status);
+ return FALSE;
+ }
+
+
+ //
+ // request "Load-Driver" privileges for this thread
+ //
+
+ Status = RtlAdjustPrivilege(
+ SE_LOAD_DRIVER_PRIVILEGE,
+ TRUE,
+ TRUE,
+ WasEnabled
+ );
+
+ if (!NT_SUCCESS(Status)) {
+ DPRINTF1("RtlAdjustPrivileges returned 0x%08x", Status);
+ RevertToSelf();
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+VOID WINAPI
+ReleaseLoadDriverPrivilege(
+ IN PBOOLEAN WasEnabled
+ ) {
+
+ NTSTATUS Status;
+
+ DPRINTF("ReleaseLoadDriverPrivilege");
+
+
+ //
+ // See if we had to enable SE_LOAD_DRIVER_PRIVILEGE
+ //
+
+ if (!*WasEnabled) {
+
+ //
+ // relinquish "Load-Driver" privileges for this thread
+ //
+
+ Status = RtlAdjustPrivilege(
+ SE_LOAD_DRIVER_PRIVILEGE,
+ FALSE,
+ TRUE,
+ WasEnabled
+ );
+ }
+
+
+ //
+ // return the thread to its previous access token
+ //
+
+ RevertToSelf();
+}
+
+
+// # error "Unimplemented"
+
+static WCHAR g_rgwchBuffer[] = MODEM_SERVICE_NAME;
+static UNICODE_STRING g_usDriverName = {
+ sizeof(g_rgwchBuffer)-sizeof(WCHAR), //Length
+ sizeof(g_rgwchBuffer), //MaximumLength
+ g_rgwchBuffer //Buffer
+ };
+
+
+LONG WINAPI
+StartModemDriver(
+ VOID
+ )
+
+{
+
+ LONG lResult=ERROR_SUCCESS;
+
+ EnterCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ while (!bModemSysStarted) { // breakout-construct
+
+ NTSTATUS nts;
+ BOOLEAN WasEnabled;
+
+
+ //
+ // Enable our load-driver privilege
+ //
+
+ if (!ObtainLoadDriverPrivilege(&WasEnabled)) {
+ lResult = ERROR_ACCESS_DENIED;
+ break;
+ }
+
+
+ //
+ // Load modem.sys
+ //
+
+ nts = NtLoadDriver(&g_usDriverName);
+ if (NT_SUCCESS(nts) || nts==STATUS_IMAGE_ALREADY_LOADED)
+ {
+ DPRINTF1("NtLoadDriver returns %s",
+ (nts==STATUS_IMAGE_ALREADY_LOADED)
+ ? TEXT("Already loaded")
+ : TEXT("Success"));
+ bModemSysStarted=TRUE;
+ }
+ else
+ {
+ DPRINTF1("ERROR: NtLoadDriver fails(0x%lx)", (DWORD) nts);
+ lResult=ERROR_IO_DEVICE;
+ }
+
+
+ //
+ // relinquish "Load-Driver" privileges for this thread
+ //
+
+ ReleaseLoadDriverPrivilege(&WasEnabled);
+
+ break;
+ }
+
+ LeaveCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ return lResult;
+
+}
+
+
+
+LONG WINAPI
+StopModemDriver(
+ VOID
+ )
+
+{
+
+ LONG lResult=ERROR_SUCCESS;
+
+ EnterCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ while (bModemSysStarted) { // break-out construct
+
+ NTSTATUS nts;
+ BOOLEAN WasEnabled;
+
+
+ //
+ // Enable our load-driver privilege
+ //
+
+ if (!ObtainLoadDriverPrivilege(&WasEnabled)) {
+ lResult = ERROR_ACCESS_DENIED;
+ break;
+ }
+
+
+ //
+ // Unload modem.sys
+ //
+
+ nts = NtUnloadDriver(&g_usDriverName);
+
+ if (NT_SUCCESS(nts))
+ {
+ DPRINTF("NtUnloadDriver succeeded");
+ bModemSysStarted=FALSE;
+ }
+ else
+ {
+ DPRINTF1("ERROR: NtUnloadDriver fails(0x%lx)", (DWORD) nts);
+ lResult=ERROR_IO_DEVICE;
+ }
+
+
+ //
+ // relinquish "Load-Driver" privileges for this thread
+ //
+
+ ReleaseLoadDriverPrivilege(&WasEnabled);
+
+ break;
+ }
+
+ LeaveCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ return lResult;
+
+}
+
+#endif // !USE_SERVICECONTROLLER
+
+//****************************************************************************
+// DWORD OpenModem (PLINEDEV)
+//
+// Function: Opens the modem device.
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD OpenModem(PLINEDEV pLineDev, LPBYTE lpComConfig, DWORD dwSize)
+{
+ HANDLE hComm;
+ DCB dcb;
+ TCHAR szPort[MAXDEVICENAME+1];
+ DWORD dwRet;
+ SERVICE_STATUS ServiceStatus;
+ BOOL bResult;
+
+
+ TSPPRINTF("Open modem");
+
+ dwRet=StartModemDriver();
+
+ if (dwRet != ERROR_SUCCESS) {
+
+ return dwRet;
+
+ }
+
+
+ // Initialize szPort to be "\\.\"
+ lstrcpy(szPort, cszDevicePrefix);
+
+ // Concatenate FriendlyName onto szPort to form "\\.\Modem Name"
+ lstrcat(szPort, pLineDev->szDeviceName);
+
+ TSPPRINTF1("Device Name = %s", szPort);
+
+ // Open the modem port
+ //
+ hComm = CreateFile(szPort,
+ GENERIC_WRITE | GENERIC_READ,
+ FILE_SHARE_WRITE | FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
+
+ if (hComm == INVALID_HANDLE_VALUE)
+ {
+ dwRet = GetLastError();
+ TSPPRINTF1("hComm CreateFile() failed! (%d)", dwRet);
+ return dwRet;
+ };
+
+ if (!PurgeComm(hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR) ) {
+
+ dwRet = GetLastError();
+ CloseHandle(hComm);
+ return dwRet;
+ }
+
+
+
+ ASSERT(ghCompletionPort != NULL);
+
+ if (CreateIoCompletionPort(hComm,
+ ghCompletionPort,
+ (DWORD)pLineDev,
+ 0) == NULL)
+ {
+ dwRet = GetLastError();
+ CloseHandle(hComm);
+ return dwRet;
+ }
+
+ SetupComm (hComm, 4096, 4096);
+
+ // Open Mcx handle
+ //
+ if ((dwRet = MCXOpen(pLineDev->szDeviceName,
+ hComm,
+ pLineDev->szDriverKey,
+ &pLineDev->hModem,
+ pLineDev->dwID,
+ (DWORD)pLineDev))
+ == ERROR_SUCCESS)
+ {
+ pLineDev->hDevice = hComm;
+
+ // Set the modem configuration
+ //
+ UnimodemSetCommConfig(pLineDev, (LPCOMMCONFIG)lpComConfig, dwSize);
+ }
+ else
+ {
+ CloseHandle(hComm);
+ };
+
+ return (MapMcxResult(dwRet));
+}
+
+//****************************************************************************
+// DWORD CloseModem (PLINEDEV)
+//
+// Function: Opens the modem device.
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD CloseModem (PLINEDEV pLineDev)
+{
+ TSPPRINTF("Close modem");
+
+ //
+ // close comm handle as well
+ //
+ MCXClose(
+ pLineDev->hModem,
+ pLineDev->hDevice,
+ pLineDev->LineClosed
+ );
+
+ pLineDev->hModem = NULL;
+ pLineDev->hDevice = INVALID_DEVICE;
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD UnimodemInit (PLINEDEV)
+//
+// Function: Initializes the modem device.
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemInit (PLINEDEV pLineDev)
+{
+ MCX_IN mcxi;
+ DWORD dwRet;
+ LPCOMMCONFIG lpCommConfig;
+
+ lpCommConfig = (LPCOMMCONFIG)&(pLineDev->pDevCfg->commconfig);
+
+ // set the new configuration
+ //
+ UnimodemSetCommConfig(pLineDev,
+ lpCommConfig, lpCommConfig->dwSize);
+
+
+
+ // Prepare the input/output information
+ //
+ pLineDev->dwVxdPendingID++;
+
+ mcxi.dwReqID = pLineDev->dwVxdPendingID;
+ mcxi.pMcxOut = &pLineDev->McxOut;
+
+ pLineDev->McxOut.dwReqID = mcxi.dwReqID;
+ pLineDev->McxOut.dwResult = MDM_FAILURE;
+
+ TSPPRINTF1("UnimodemInit id: %d", pLineDev->dwVxdPendingID);
+
+ pLineDev->InitStringsAreValid=TRUE;
+
+ dwRet = MCXInit(pLineDev->hModem, &mcxi);
+ dwRet = MapMcxResult(dwRet);
+
+ // If the MCX call returns success, converts it to async success
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // The operation completes successfully synchronously
+ //
+ dwRet = ERROR_IO_PENDING;
+ pLineDev->McxOut.dwResult = MDM_SUCCESS;
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD UnimodemDial (PLINEDEV, LPSTR)
+//
+// Function: dials the modem device with the provided dialable string. A dial-
+// able string can be:
+// "" - originate
+// ";" - dialtone detection
+// "5551212" - dial and originate
+// "5551212;" - dial
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD
+UnimodemDial(
+ PLINEDEV pLineDev,
+ LPSTR szAddress,
+ DWORD DialOptions
+ )
+{
+ MCX_IN mcxi;
+ DWORD dwRet;
+ char szPhone[MAXADDRESSLEN+1];
+
+ // Prepare the input/output information
+ //
+ pLineDev->dwVxdPendingID++;
+
+ mcxi.dwReqID = pLineDev->dwVxdPendingID;
+ mcxi.pMcxOut = &pLineDev->McxOut;
+
+ pLineDev->McxOut.dwReqID = mcxi.dwReqID;
+ pLineDev->McxOut.dwResult = MDM_FAILURE;
+
+ lstrcpyA(szPhone, szAddress);
+
+ TSPPRINTF1("UnmodemDial id: %d", pLineDev->dwVxdPendingID);
+
+ dwRet = MCXDial(pLineDev->hModem, szPhone, &mcxi, DialOptions);
+ dwRet = MapMcxResult(dwRet);
+
+ // If the MCX call returns success, converts it to async success
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // The operation completes successfully synchronously
+ //
+ dwRet = ERROR_IO_PENDING;
+ pLineDev->McxOut.dwResult = MDM_SUCCESS;
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD UnimodemMonitor (PLINEDEV, DWORD)
+//
+// Function: Monitors the modem for an incoming call in two modes:
+// MONITOR_NON_CONTINUOUS - Notify the first ring only
+// MONITOR_CONTINUOUS - Notify each ring
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemMonitor (PLINEDEV pLineDev, DWORD dwType)
+{
+ MCX_IN mcxi;
+ DWORD dwRet;
+
+ // Prepare the input/output information
+ //
+ pLineDev->dwVxdPendingID++;
+
+ mcxi.dwReqID = pLineDev->dwVxdPendingID;
+ mcxi.pMcxOut = &pLineDev->McxOut;
+
+ pLineDev->McxOut.dwReqID = mcxi.dwReqID;
+ pLineDev->McxOut.dwResult = MDM_FAILURE;
+
+ TSPPRINTF1("UnmodemMonitor id: %d", pLineDev->dwVxdPendingID);
+
+ dwRet = MCXMonitor(pLineDev->hModem, dwType, &mcxi);
+ dwRet = MapMcxResult(dwRet);
+
+ // If the MCX call returns success, converts it to async success
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // The operation completes successfully synchronously
+ //
+ dwRet = ERROR_IO_PENDING;
+ pLineDev->McxOut.dwResult = MDM_SUCCESS;
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD UnimodemAnswer (PLINEDEV)
+//
+// Function: Answers the incoming call..
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemAnswer (PLINEDEV pLineDev)
+{
+ MCX_IN mcxi;
+ DWORD dwRet;
+
+ // Prepare the input/output information
+ //
+ pLineDev->dwVxdPendingID++;
+
+ mcxi.dwReqID = pLineDev->dwVxdPendingID;
+ mcxi.pMcxOut = &pLineDev->McxOut;
+
+ pLineDev->McxOut.dwReqID = mcxi.dwReqID;
+ pLineDev->McxOut.dwResult = MDM_FAILURE;
+
+ TSPPRINTF1("UnmodemAnswer id: %d", pLineDev->dwVxdPendingID);
+
+ dwRet = MCXAnswer(pLineDev->hModem, &mcxi);
+ dwRet = MapMcxResult(dwRet);
+
+ // If the MCX call returns success, converts it to async success
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // The operation completes successfully synchronously
+ //
+ dwRet = ERROR_IO_PENDING;
+ pLineDev->McxOut.dwResult = MDM_SUCCESS;
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+ };
+
+ return dwRet;
+}
+
+VOID WINAPI
+DisconnectHandler(
+ PLINEDEV pLineDev
+ )
+
+{
+ TSPPRINTF("DisconnectHandle:");
+
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DISCONNECTED, LINEDISCONNECTMODE_NORMAL);
+
+ return;
+
+}
+
+
+
+//****************************************************************************
+// DWORD UnimodemMonitorDisconnect (PLINEDEV)
+//
+// Function: Monitors the remote disconnection. When the remote disconnection
+// occurs, the function completes successfully in the async thread.
+//
+// Notes: This function never returns success synchrnously
+//
+// Returns: ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for synchrnous failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemMonitorDisconnect (PLINEDEV pLineDev)
+{
+
+ DWORD Result;
+
+ Result=McxRegisterDisconectHandler(
+ pLineDev->hModem,
+ DisconnectHandler,
+ pLineDev
+ );
+
+
+ return Result;
+
+}
+
+//****************************************************************************
+// DWORD UnimodemCancelMonitorDisconnect (PLINEDEV)
+//
+// Function: Cancel the pending monitoring remote disconnection request.
+// The async thread always ignore the cancellation result.
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemCancelMonitorDisconnect (PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ dwRet=McxDeregisterDisconnectHandler(
+ pLineDev->hModem
+ );
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD UnimodemHangup (PLINEDEV, BOOL)
+//
+// Function: Disconnect the modem locally. The caller can specifies whether
+// the function should complete synchrnously or asynchronously.
+//
+// Returns: ERROR_SUCCESS if success synchronously.
+// ERROR_IO_PENDING if the operation will complete asynchronously
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemHangup (PLINEDEV pLineDev, BOOL fSync)
+{
+ MCX_IN mcxi;
+ DWORD dwRet;
+
+ if(!fSync)
+ {
+ // Asynchronous request, use the default event
+ //
+ pLineDev->dwVxdPendingID++;
+
+ TSPPRINTF1("UnmodemAsyncHangup id: %d", pLineDev->dwVxdPendingID);
+ }
+ else
+ {
+ // Synchronous request, create a local event so we can wait for it here
+ //
+ if ((pLineDev->hSynchronizeEvent = CreateEvent(NULL, FALSE, FALSE, NULL)) == NULL)
+ {
+ return ERROR_OUTOFMEMORY;
+ };
+
+ TSPPRINTF("UnmodemSyncHangup");
+ };
+
+ // Prepare the input/output information
+ //
+ mcxi.dwReqID = pLineDev->dwVxdPendingID;
+ mcxi.pMcxOut = &pLineDev->McxOut;
+
+ pLineDev->McxOut.dwReqID = mcxi.dwReqID;
+ pLineDev->McxOut.dwResult = MDM_FAILURE;
+
+ // Hang up the line
+ //
+ dwRet = MCXHangup(pLineDev->hModem, &mcxi);
+ dwRet = MapMcxResult(dwRet);
+
+ switch(dwRet)
+ {
+ case ERROR_SUCCESS:
+ //
+ // The operation completes successfully synchronously
+ //
+ pLineDev->McxOut.dwResult = MDM_SUCCESS;
+
+ // If the operation is an async request, handles the result asynchronously
+ //
+ if (fSync)
+ {
+ TSPPRINTF("UnmodemSyncHangup completes");
+ CloseHandle(pLineDev->hSynchronizeEvent);
+ pLineDev->hSynchronizeEvent = NULL;
+ }
+ else
+ {
+ dwRet = ERROR_IO_PENDING;
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+ };
+ break;
+
+ case ERROR_IO_PENDING:
+ //
+ // If it is synchronous request, need to wait until it is done
+ //
+ if (fSync)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ WaitForSingleObject(pLineDev->hSynchronizeEvent, INFINITE);
+ CLAIM_LINEDEV(pLineDev);
+ CloseHandle(pLineDev->hSynchronizeEvent);
+ pLineDev->hSynchronizeEvent = NULL;
+ dwRet = ERROR_SUCCESS;
+ };
+ break;
+
+ default:
+ break;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD UnimodemGetCommConfig (PLINEDEV, LPCOMMCONFIG, LPDWORD)
+//
+// Function: Gets the modem comm configuration
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemGetCommConfig (PLINEDEV pLineDev, LPCOMMCONFIG lpCommConfig,
+ LPDWORD lpcb)
+{
+ DWORD dwRet;
+ TSPPRINTF("UnimodemGetCommConfig.");
+
+ dwRet = MCXGetCommConfig(pLineDev->hModem, lpCommConfig, lpcb);
+ return (MapMcxResult(dwRet));
+}
+
+//****************************************************************************
+// DWORD UnimodemSetCommConfig (PLINEDEV, LPCOMMCONFIG, DWORD)
+//
+// Function: Sets the modem comm configuration
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemSetCommConfig (PLINEDEV pLineDev, LPCOMMCONFIG lpCommConfig,
+ DWORD cb)
+{
+ DWORD dwRet;
+ TSPPRINTF("UnimodemSetCommConfig.");
+
+ dwRet = MCXSetCommConfig(pLineDev->hModem, lpCommConfig, cb);
+ return (MapMcxResult(dwRet));
+}
+
+
+#if 0
+//****************************************************************************
+// DWORD UnimodemSetCommConfig (PLINEDEV, LPCOMMCONFIG, DWORD)
+//
+// Function: Sets the modem comm configuration
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD WINAPI
+UnimodemSetModemSettings(
+ PLINEDEV pLineDev,
+ LPMODEMSETTINGS lpModemSettings
+ )
+{
+ DWORD dwRet;
+ TSPPRINTF("UnimodemSetModemSettings.");
+
+ dwRet = MCXSetModemSettings(pLineDev->hModem, lpModemSettings);
+
+ return (MapMcxResult(dwRet));
+}
+#endif
+
+
+
+
+//****************************************************************************
+// DWORD UnimodemSetPassthrough (PLINEDEV, DWORD)
+//
+// Function: Sets the modem passthrough mode to:
+// PASSTHROUGH_ON
+// PASSTHROUGH_OFF
+// PASSTHROUGH_OFF_BUT_CONNECTED
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemSetPassthrough (PLINEDEV pLineDev, DWORD dwMode)
+{
+ DWORD dwRet;
+ TSPPRINTF1("UnimodemSetPassthrough mode: %d", dwMode);
+
+ dwRet = MCXSetPassthrough(pLineDev->hModem, dwMode);
+ return (MapMcxResult(dwRet));
+}
+
+//****************************************************************************
+// DWORD UnimodemGetNegotiatedRate (PLINEDEV, LPDWORD)
+//
+// Function: Gets the modem connection speed
+//
+// Notes: This function is synchronous.
+//
+// Returns: ERROR_SUCCESS if success
+// an error code for failure
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD UnimodemGetNegotiatedRate (PLINEDEV pLineDev, LPDWORD lpdwRate)
+{
+ DWORD dwRet;
+
+ dwRet = MCXGetNegotiatedRate(pLineDev->hModem, lpdwRate);
+ return (MapMcxResult(dwRet));
+}
diff --git a/private/unimodem/tapisp/log.c b/private/unimodem/tapisp/log.c
new file mode 100644
index 000000000..30589a2ae
--- /dev/null
+++ b/private/unimodem/tapisp/log.c
@@ -0,0 +1,425 @@
+
+#include "unimdm.h"
+#include "mcxp.h"
+
+#include <ntddmodm.h>
+
+#define MAX_LOG_SIZE (128 * 1024)
+#define LOG_TEMP_BUFFER_SIZE (4096)
+
+
+
+VOID WINAPI
+ResizeLogFile(
+ HANDLE FileHandle
+ );
+
+
+
+
+HANDLE WINAPI
+ModemOpenLog(
+ LPSTR pszName
+ )
+
+{
+ HANDLE FileHandle;
+
+ FileHandle=CreateFileA(
+ pszName,
+ GENERIC_WRITE | GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL,
+ OPEN_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL
+ );
+
+ if (INVALID_HANDLE_VALUE == FileHandle) {
+
+ return NULL;
+
+ }
+
+ SetFilePointer(
+ FileHandle,
+ 0,
+ NULL,
+ FILE_END
+ );
+
+ return FileHandle;
+
+}
+
+
+VOID WINAPIV
+LogPrintf(
+ HANDLE FileHandle,
+ DWORD dwDeviceID,
+ LPSTR FormatString,
+ ...
+ )
+
+{
+ DWORD BytesWritten;
+ BOOL Result;
+ va_list VarArg;
+ SYSTEMTIME SysTime;
+ char OutBuffer[1024];
+
+ TRACE3(IDEVENT_LOG_PRINTF, dwDeviceID, &FormatString);
+
+ if (FileHandle == NULL) {
+
+ return;
+ }
+
+ va_start(VarArg,FormatString);
+
+ GetLocalTime(
+ &SysTime
+ );
+
+ wsprintfA(
+ OutBuffer,
+ "%02d-%02d-%04d %02d:%02d:%02d.%03d - ",
+ SysTime.wMonth,
+ SysTime.wDay,
+ SysTime.wYear,
+ SysTime.wHour,
+ SysTime.wMinute,
+ SysTime.wSecond,
+ SysTime.wMilliseconds
+ );
+
+
+ wvsprintfA(
+ OutBuffer+lstrlenA(OutBuffer),
+ FormatString,
+ VarArg
+ );
+
+ Result=WriteFile(
+ FileHandle,
+ OutBuffer,
+ lstrlenA(OutBuffer),
+ &BytesWritten,
+ NULL
+ );
+
+#ifdef DEBUG
+ if (!Result) {
+
+ DPRINTF("Write to log failed.");
+ }
+#endif
+
+ ResizeLogFile(
+ FileHandle
+ );
+
+ return;
+
+
+}
+
+
+
+
+VOID WINAPI
+ModemCloseLog(
+ HANDLE FileHandle
+ )
+
+{
+ if (FileHandle == NULL) {
+
+ return;
+ }
+
+ CloseHandle(
+ FileHandle
+ );
+
+ return;
+
+}
+
+VOID WINAPI
+FlushLog(
+ HANDLE FileHandle
+ )
+
+{
+ if (FileHandle == NULL) {
+
+ return;
+ }
+
+
+ FlushFileBuffers(FileHandle);
+
+ return;
+
+}
+
+
+
+VOID WINAPI
+LogString(
+ HANDLE FileHandle,
+ DWORD dwDeviceID,
+ DWORD StringID,
+ ...
+ )
+
+{
+
+
+
+ DWORD BytesWritten;
+ BOOL Result;
+ va_list VarArg;
+ SYSTEMTIME SysTime;
+ char OutBuffer[1024];
+ char FormatString[256];
+ int Length;
+
+ TRACE3(IDEVENT_LOG_STRING, dwDeviceID, &StringID);
+
+ if (FileHandle == NULL) {
+
+ return;
+ }
+
+ Length=LoadStringA(
+ ghInstance,
+ StringID,
+ FormatString,
+ sizeof(FormatString)
+ );
+
+ if (Length == 0) {
+
+#ifdef DEBUG
+ lstrcpyA(FormatString,"Bad String resource");
+#else
+ return;
+#endif
+
+ }
+
+
+
+ va_start(VarArg,StringID);
+
+ GetLocalTime(
+ &SysTime
+ );
+
+ wsprintfA(
+ OutBuffer,
+ "%02d-%02d-%04d %02d:%02d:%02d.%03d - ",
+ SysTime.wMonth,
+ SysTime.wDay,
+ SysTime.wYear,
+ SysTime.wHour,
+ SysTime.wMinute,
+ SysTime.wSecond,
+ SysTime.wMilliseconds
+ );
+
+
+ wvsprintfA(
+ OutBuffer+lstrlenA(OutBuffer),
+ FormatString,
+ VarArg
+ );
+
+ Result=WriteFile(
+ FileHandle,
+ OutBuffer,
+ lstrlenA(OutBuffer),
+ &BytesWritten,
+ NULL
+ );
+
+#ifdef DEBUG
+ if (!Result) {
+
+ DPRINTF("Write to log failed.");
+ }
+#endif
+
+ ResizeLogFile(
+ FileHandle
+ );
+
+ return;
+
+
+}
+
+
+
+
+
+VOID WINAPI
+ResizeLogFile(
+ HANDLE FileHandle
+ )
+
+{
+
+ DWORD FileSize;
+ LPBYTE TempBuffer;
+ OVERLAPPED OverLapped;
+ DWORD BytesRead;
+ BOOL bResult;
+ UINT i;
+ DWORD DestFileOffset;
+ DWORD SourceFileOffset;
+ DWORD BytesToMove;
+
+
+ FileSize=GetFileSize(FileHandle,NULL);
+
+ if (FileSize < MAX_LOG_SIZE) {
+
+ return;
+
+ }
+
+ D_TRACE(McxDpf(999,"Resizing log File, size=%d",FileSize);)
+
+ TempBuffer=LocalAlloc(LPTR,(LOG_TEMP_BUFFER_SIZE));
+
+ if (TempBuffer == NULL) {
+
+ return;
+
+ }
+
+ OverLapped.hEvent=NULL;
+ OverLapped.OffsetHigh=0;
+ OverLapped.Offset=FileSize-(MAX_LOG_SIZE/2);
+
+
+ bResult=ReadFile(
+ FileHandle,
+ TempBuffer,
+ LOG_TEMP_BUFFER_SIZE,
+ &BytesRead,
+ &OverLapped
+ );
+
+
+ if (!bResult) {
+
+ LocalFree(TempBuffer);
+
+ return;
+
+ }
+
+ //
+ // find the first character following a line feed
+ //
+ for (i=0; i < LOG_TEMP_BUFFER_SIZE; i++) {
+
+ if (TempBuffer[i] == '\n') {
+
+ break;
+
+ }
+ }
+
+ //
+ // source starts first char after LF
+ //
+ SourceFileOffset=(FileSize-(MAX_LOG_SIZE/2)) + i + 1;
+
+ DestFileOffset=0;
+
+ BytesToMove=FileSize-SourceFileOffset;
+
+ while (BytesToMove > 0) {
+
+ DWORD BytesNow;
+ DWORD BytesWritten;
+
+ OverLapped.hEvent=NULL;
+ OverLapped.OffsetHigh=0;
+ OverLapped.Offset=SourceFileOffset;
+
+ BytesNow= BytesToMove < LOG_TEMP_BUFFER_SIZE ? BytesToMove : LOG_TEMP_BUFFER_SIZE;
+
+ bResult=ReadFile(
+ FileHandle,
+ TempBuffer,
+ BytesNow,
+ &BytesRead,
+ &OverLapped
+ );
+
+ if (!bResult || BytesRead != BytesNow) {
+ //
+ // something bad happened, truncate the file
+ //
+ DestFileOffset=0;
+
+ break;
+
+ }
+
+ OverLapped.hEvent=NULL;
+ OverLapped.OffsetHigh=0;
+ OverLapped.Offset=DestFileOffset;
+
+
+ bResult=WriteFile(
+ FileHandle,
+ TempBuffer,
+ BytesRead,
+ &BytesWritten,
+ &OverLapped
+ );
+
+ if (!bResult || BytesWritten != BytesNow) {
+ //
+ // something bad happened, truncate the file
+ //
+ DestFileOffset=0;
+
+ break;
+
+ }
+
+
+ BytesToMove-=BytesRead;
+ SourceFileOffset+=BytesRead;
+ DestFileOffset+=BytesRead;
+
+ }
+
+ SetFilePointer(
+ FileHandle,
+ DestFileOffset,
+ NULL,
+ FILE_BEGIN
+ );
+
+ SetEndOfFile(
+ FileHandle
+ );
+
+
+ LocalFree(
+ TempBuffer
+ );
+
+
+ return;
+
+}
diff --git a/private/unimodem/tapisp/log.rc b/private/unimodem/tapisp/log.rc
new file mode 100644
index 000000000..4b5724c5d
--- /dev/null
+++ b/private/unimodem/tapisp/log.rc
@@ -0,0 +1,153 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "logids.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_OK "OK"
+ IDS_RESP_INFORMATIVE "Informative"
+ IDS_RESP_CONNECT "Connect"
+ IDS_RESP_ERROR "Error"
+ IDS_RESP_NO_CARRIER "No Carrier"
+ IDS_RESP_NO_DIALTONE "No Dialtone"
+ IDS_RESP_BUSY "Busy"
+ IDS_RESP_NO_ANSWER "No Answer"
+ IDS_RESP_RING "Ring"
+ IDS_RESP_SSV "SSV"
+ IDS_RESP_SMD "SMD"
+ IDS_RESP_SFA "SFA"
+ IDS_RESP_SRA "SRA"
+ IDS_RESP_SRQ "SRQ"
+ IDS_RESP_SRC "SRC"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_STO "STO"
+ IDS_RESP_SVM "SVM"
+ IDS_RESP_DRON "DRON"
+ IDS_RESP_DROF "DROF"
+ IDS_RESP_DATE "DATE"
+ IDS_RESP_TIME "TIME"
+ IDS_RESP_NMBR "NMBR"
+ IDS_RESP_NAME "NAME"
+ IDS_RESP_MESG "MESG"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_UNKNOWN "Unknown Response\r\n"
+
+
+
+
+ IDS_MSGLOG_CONNECTED "Connection established.\r\n"
+ IDS_MSGLOG_CONNECTEDBPS "Connection established at %dbps.\r\n"
+ IDS_MSGLOG_UNKNOWNERRORCONTROL "Error-control off or unknown.\r\n"
+ IDS_MSGLOG_CELLULAR "Cellular error-control on.\r\n"
+ IDS_MSGLOG_ERRORCONTROL "Error-control on.\r\n"
+ IDS_MSGLOG_COMPRESSION "Data compression on.\r\n"
+ IDS_MSGLOG_UNKNOWNCOMPRESSION "Data compression off or unknown.\r\n"
+
+ IDS_MSGPERF_WRDESC "Bytes sent to modem per second.\r\n"
+ IDS_MSGPERF_WRNAME "Bytes sent/sec\r\n"
+ IDS_MSGPERF_WRREG "SendRate\r\n"
+ IDS_MSGPERF_RDDESC "Bytes received from modem per second.\r\n"
+ IDS_MSGPERF_RDNAME "Bytes received/sec\r\n"
+ IDS_MSGPERF_RDREG "ReceiveRate\r\n"
+ IDS_MSGPERF_UNITS "Bytes\r\n"
+
+ IDS_MSGLOG_STATISTICS "Session Statistics:\r\n"
+ IDS_MSGLOG_READSTATS " Reads : %d bytes\r\n"
+ IDS_MSGLOG_WRITESTATS " Writes: %d bytes\r\n"
+ IDS_MSGLOG_FRAMEERRORSTATS " Frame Errors: %d\r\n"
+ IDS_MSGLOG_SERIALOVERRUNERRORSTATS "Serial Overrun Errors: %d\r\n"
+ IDS_MSGLOG_BUFFEROVERRUNERRORSTATS "Buffer Overrun Errors: %d\r\n"
+ IDS_MSGLOG_PARITYERRORSTATS " Parity Errors: %d\r\n"
+
+ IDS_MSGERR_FAILED_INITSTRINGCONSTRUCTION "ERROR: Init string construction failed.\r\n"
+ IDS_MSGERR_FAILED_INIT "ERROR: Init failed.\r\n"
+ IDS_MSGERR_FAILED_DIALSTRINGCONSTRUCTION "ERROR: Dial string construction failed for '%s'.\r\n"
+ IDS_MSGERR_FAILED_DIAL "ERROR: Dial failed.\r\n"
+ IDS_MSGERR_FAILED_MONITOR "ERROR: Monitor failed.\r\n"
+ IDS_MSGERR_FAILED_ANSWER "ERROR: Answer failed.\r\n"
+ IDS_MSGERR_FAILED_HANGUP "ERROR: Hangup failed.\r\n"
+ IDS_MSGERR_FAILED_FLUSH "ERROR: Unable to send command to the device.\r\n"
+ IDS_MSGERR_FAILED_RESPONSE "ERROR: Unable to recover from unrecognized response.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_ANSWER "ERROR: Voice Answer failed.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_DIALSETUP "ERROR: Voice dial setup failed.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_COMMAND "ERROR: Voice Command failed. %s\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_STARTWAVE "ERROR: Start wave play/record failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_STOPWAVE "ERROR: Stop wave play/record failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_SETFORMAT "ERROR: Failed to set wave foramt.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_WAVEOPEN "ERROR: Failed Wave Open.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_WAVECLOSE "ERROR: Failed Wave Close.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_SPEAKERPHONECOMMAND "ERROR: Speaker Phaone Command Failed.\r\n"
+
+ IDS_MSGERR_FAILED_VOICE_GENERATEDTMF "ERROR: Generate DTMF failed.\r\n"
+
+
+ IDS_MSGWARN_UNRECOGNIZEDRESPONSE "WARNING: Unrecognized response. Retrying...\r\n"
+ IDS_MSGWARN_FAILEDTOQUERYVALUE "WARNING: Unable to load the '%s' string.\r\n"
+ IDS_MSGWARN_FAILEDDTRDROPPAGE "WARNING: The modem did not respond to lowering DTR. Trying software hangup...\r\n"
+ IDS_MSGWARN_PREVIOUSCONNECTIONNOTHUNGUP "WARNING: A previous program left a connection established. Hanging up previous connection...\r\n"
+
+ IDS_MSGLOG_OPENED "%s in use.\r\n"
+ IDS_MSGLOG_DRIVERDESC "Modem type: %s\r\n"
+ IDS_MSGLOG_INFPATH "Modem inf path: %s\r\n"
+ IDS_MSGLOG_INFSECTION "Modem inf section: %s\r\n"
+ IDS_MSGLOG_CLOSED "Modem closed.\r\n"
+
+
+ IDS_MSGLOG_DIAL "Dialing.\r\n"
+ IDS_MSGLOG_MONITOR "Waiting for a call.\r\n"
+ IDS_MSGLOG_ANSWER "Answering the call.\r\n"
+ IDS_MSGLOG_INIT "Initializing modem.\r\n"
+ IDS_MSGLOG_HANGUP "Hanging up the modem.\r\n"
+
+
+ IDS_MSGLOG_VOICE_ANSWER "Answering the voice call.\r\n"
+
+ IDS_MSGLOG_VOICE_DIALSETUP "Setup to dial voice call.\r\n"
+
+ IDS_MSGLOG_VOICE_COMMAND "Issueing voice command.\r\n"
+
+
+ IDS_MSGLOG_VOICE_STARTWAVE "Starting wave play/record.\r\n"
+ IDS_MSGLOG_VOICE_STOPWAVE "Ending wave play/record.\r\n"
+
+ IDS_MSGLOG_VOICE_SETWAVEFORMAT "Setting wave format.\r\n"
+
+ IDS_MSGLOG_VOICE_WAVEOPEN "Voice Modem Wave Open.\r\n"
+
+ IDS_MSGLOG_VOICE_WAVECLOSE "Voice Modem Wave Close.\r\n"
+
+ IDS_MSGLOG_VOICE_SPEAKERPHONECOMMAND "Issueing Speakerphone command.\r\n"
+
+ IDS_MSGLOG_VOICE_GENTERAEDTMF "Generating DTMF.\r\n"
+
+ IDS_MSGLOG_VOICE_DLERECEIVED "Received DLE Raw=%d, Translated=%d.\r\n"
+
+
+IDS_MSGLOG_HARDWAREHANGUP "Hardware hangup by lowering DTR.\r\n"
+IDS_MSGLOG_REMOTEHANGUP "Remote modem hung up.\r\n"
+IDS_MSGLOG_COMMAND "Send: %s\r\n"
+IDS_MSGLOG_RAWRESPONSE "Recv: %s\r\n"
+IDS_MSGLOG_EMPTYRESPONSE "<no response>\r\n"
+IDS_MSGLOG_RESPONSE "Interpreted response: %s\r\n"
+
+
+
+END
diff --git a/private/unimodem/tapisp/logids.h b/private/unimodem/tapisp/logids.h
new file mode 100644
index 000000000..0b666097e
--- /dev/null
+++ b/private/unimodem/tapisp/logids.h
@@ -0,0 +1,134 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by log.rc
+//
+#define IDS_RESP_OK 1
+#define IDS_RESP_INFORMATIVE 2
+#define IDS_RESP_CONNECT 3
+#define IDS_RESP_ERROR 4
+#define IDS_RESP_NO_CARRIER 5
+#define IDS_RESP_NO_DIALTONE 6
+#define IDS_RESP_BUSY 7
+#define IDS_RESP_NO_ANSWER 8
+#define IDS_RESP_RING 9
+#define IDS_RESP_SSV 10
+#define IDS_RESP_SMD 11
+#define IDS_RESP_SFA 12
+#define IDS_RESP_SRA 13
+#define IDS_RESP_SRQ 14
+#define IDS_RESP_SRC 15
+#define IDS_RESP_STO 16
+#define IDS_RESP_SVM 17
+#define IDS_RESP_DRON 18
+#define IDS_RESP_DROF 19
+#define IDS_RESP_DATE 20
+#define IDS_RESP_TIME 21
+#define IDS_RESP_NMBR 22
+#define IDS_RESP_NAME 23
+#define IDS_RESP_MESG 24
+#define IDS_RESP_UNKNOWN 50
+
+
+
+#define IDS_MSGLOG_CONNECTED 51
+#define IDS_MSGLOG_CONNECTEDBPS 52
+#define IDS_MSGLOG_UNKNOWNERRORCONTROL 53
+#define IDS_MSGLOG_CELLULAR 54
+#define IDS_MSGLOG_ERRORCONTROL 55
+#define IDS_MSGLOG_COMPRESSION 56
+#define IDS_MSGLOG_UNKNOWNCOMPRESSION 57
+
+#define IDS_MSGPERF_WRDESC 59
+#define IDS_MSGPERF_WRNAME 60
+#define IDS_MSGPERF_WRREG 61
+#define IDS_MSGPERF_RDDESC 62
+#define IDS_MSGPERF_RDNAME 63
+#define IDS_MSGPERF_RDREG 64
+#define IDS_MSGPERF_UNITS 65
+
+#define IDS_MSGLOG_STATISTICS 67
+#define IDS_MSGLOG_READSTATS 68
+#define IDS_MSGLOG_WRITESTATS 69
+#define IDS_MSGLOG_FRAMEERRORSTATS 71
+#define IDS_MSGLOG_SERIALOVERRUNERRORSTATS 73
+#define IDS_MSGLOG_BUFFEROVERRUNERRORSTATS 74
+#define IDS_MSGLOG_PARITYERRORSTATS 75
+
+#define IDS_MSGERR_FAILED_INITSTRINGCONSTRUCTION 77
+#define IDS_MSGERR_FAILED_INIT 78
+#define IDS_MSGERR_FAILED_DIALSTRINGCONSTRUCTION 79
+#define IDS_MSGERR_FAILED_DIAL 80
+#define IDS_MSGERR_FAILED_MONITOR 81
+#define IDS_MSGERR_FAILED_ANSWER 82
+#define IDS_MSGERR_FAILED_HANGUP 83
+#define IDS_MSGERR_FAILED_FLUSH 84
+#define IDS_MSGERR_FAILED_RESPONSE 85
+
+#define IDS_MSGERR_FAILED_VOICE_ANSWER 87
+
+#define IDS_MSGERR_FAILED_VOICE_DIALSETUP 89
+
+#define IDS_MSGERR_FAILED_VOICE_COMMAND 91
+
+#define IDS_MSGERR_FAILED_VOICE_STARTWAVE 93
+#define IDS_MSGERR_FAILED_VOICE_STOPWAVE 94
+#define IDS_MSGERR_FAILED_VOICE_SETFORMAT 95
+
+#define IDS_MSGERR_FAILED_VOICE_WAVEOPEN 97
+
+#define IDS_MSGERR_FAILED_VOICE_WAVECLOSE 99
+
+#define IDS_MSGERR_FAILED_VOICE_SPEAKERPHONECOMMAND 202
+
+#define IDS_MSGERR_FAILED_VOICE_GENERATEDTMF 203
+
+
+#define IDS_MSGWARN_UNRECOGNIZEDRESPONSE 204
+#define IDS_MSGWARN_FAILEDTOQUERYVALUE 205
+#define IDS_MSGWARN_FAILEDDTRDROPPAGE 206
+#define IDS_MSGWARN_PREVIOUSCONNECTIONNOTHUNGUP 207
+
+#define IDS_MSGLOG_OPENED 211
+#define IDS_MSGLOG_DRIVERDESC 212
+#define IDS_MSGLOG_INFPATH 213
+#define IDS_MSGLOG_INFSECTION 214
+#define IDS_MSGLOG_CLOSED 215
+
+
+
+#define IDS_MSGLOG_DIAL 216
+#define IDS_MSGLOG_MONITOR 217
+#define IDS_MSGLOG_ANSWER 218
+#define IDS_MSGLOG_INIT 219
+#define IDS_MSGLOG_HANGUP 220
+
+
+#define IDS_MSGLOG_VOICE_ANSWER 221
+
+#define IDS_MSGLOG_VOICE_DIALSETUP 222
+
+#define IDS_MSGLOG_VOICE_COMMAND 223
+
+
+#define IDS_MSGLOG_VOICE_STARTWAVE 224
+#define IDS_MSGLOG_VOICE_STOPWAVE 225
+
+#define IDS_MSGLOG_VOICE_SETWAVEFORMAT 226
+
+#define IDS_MSGLOG_VOICE_WAVEOPEN 227
+
+#define IDS_MSGLOG_VOICE_WAVECLOSE 228
+
+#define IDS_MSGLOG_VOICE_SPEAKERPHONECOMMAND 229
+
+#define IDS_MSGLOG_VOICE_GENTERAEDTMF 230
+
+#define IDS_MSGLOG_VOICE_DLERECEIVED 231
+
+
+#define IDS_MSGLOG_HARDWAREHANGUP 232
+#define IDS_MSGLOG_REMOTEHANGUP 233
+#define IDS_MSGLOG_COMMAND 234
+#define IDS_MSGLOG_RAWRESPONSE 235
+#define IDS_MSGLOG_EMPTYRESPONSE 236
+#define IDS_MSGLOG_RESPONSE 237
diff --git a/private/unimodem/tapisp/makefile b/private/unimodem/tapisp/makefile
new file mode 100644
index 000000000..6ee4f43fa
--- /dev/null
+++ b/private/unimodem/tapisp/makefile
@@ -0,0 +1,6 @@
+#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!INCLUDE $(NTMAKEENV)\makefile.def
diff --git a/private/unimodem/tapisp/manual.c b/private/unimodem/tapisp/manual.c
new file mode 100644
index 000000000..4731252e0
--- /dev/null
+++ b/private/unimodem/tapisp/manual.c
@@ -0,0 +1,170 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: manual.c
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/1/94 Chris Caputo Created
+//
+//
+// Description: Manual dial dialog.
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include "wndthrd.h"
+#include "rcids.h"
+
+//****************************************************************************
+// Function prototypes
+//****************************************************************************
+
+LRESULT ManualDialDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
+
+//****************************************************************************
+// HWND CreateManualDlg(HWND hwndOwner, DWORD idLine)
+//
+// Function: creates a modeless talk/drop dialog box
+//
+// Returns: the modeless window handle
+//
+//****************************************************************************
+
+HWND CreateManualDlg(HWND hwndOwner, DWORD idLine)
+{
+ HWND hwnd;
+
+ // Create dialog
+ //
+ hwnd = CreateDialogParam(ghInstance,
+ MAKEINTRESOURCE(IDD_MANUAL_DIAL),
+ hwndOwner,
+ ManualDialDlgProc,
+ (LPARAM)idLine);
+ return hwnd;
+}
+
+//****************************************************************************
+// LRESULT ManualDialDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
+//
+// Function: Talk-Drop dialog routine
+//
+// Returns: varies
+//
+//****************************************************************************
+
+LRESULT ManualDialDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
+{
+ DWORD idLine;
+
+ switch(wMsg)
+ {
+ case WM_INITDIALOG:
+
+ {
+ NUMBERREQ NumberReq;
+ TCHAR szUnicodeBuf[MAXDEVICENAME+1];
+ PDLGNODE pDlgNode;
+ TUISPIDLLCALLBACK Callback;
+
+ pDlgNode=(PDLGNODE)lParam;
+
+ idLine = pDlgNode->idLine;
+
+ // remember the Line ID passed in
+ //
+ SetWindowLong(hwnd, DWL_USER, (LONG)lParam);
+
+ NumberReq.DlgReq.dwCmd = UI_REQ_GET_PHONENUMBER;
+ NumberReq.DlgReq.dwParam = MANUAL_DIAL_DLG;
+
+ Callback=GetCallbackProc(pDlgNode->Parent);
+
+ lstrcpyA(NumberReq.szPhoneNumber,"");
+
+ (*Callback)(idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&NumberReq, sizeof(NumberReq));
+
+#ifdef UNICODE
+ if (MultiByteToWideChar(CP_ACP,
+ 0,
+ NumberReq.szPhoneNumber,
+ -1,
+ szUnicodeBuf,
+ sizeof(szUnicodeBuf)))
+ {
+ SetDlgItemText(
+ hwnd,
+ IDC_PHONENUMBER,
+ szUnicodeBuf
+ );
+
+
+ }
+#else // UNICODE
+
+ SetDlgItemText(
+ hwnd,
+ IDC_PHONENUMBER,
+ NumberReq.szPhoneNumber
+ );
+
+
+#endif // UNICODE
+
+
+
+ return 1;
+ break;
+ }
+ case WM_COMMAND:
+ {
+ UINT idCmd = GET_WM_COMMAND_ID(wParam, lParam);
+
+
+
+ if (idCmd == IDCONNECT || idCmd == IDCANCEL)
+ {
+ PDLGNODE pDlgNode;
+
+ pDlgNode= (PDLGNODE)GetWindowLong(hwnd, DWL_USER);
+
+ idLine = pDlgNode->idLine;
+
+ EndMdmDialog(pDlgNode->Parent,idLine, MANUAL_DIAL_DLG,
+ (idCmd == IDCONNECT) ? MDM_SUCCESS : MDM_FAILURE);
+ return 1;
+ break;
+ }
+ break;
+ }
+ case WM_DESTROY:
+ {
+ DLGREQ DlgReq;
+ TUISPIDLLCALLBACK Callback;
+
+ PDLGNODE pDlgNode;
+
+ pDlgNode= (PDLGNODE)GetWindowLong(hwnd, DWL_USER);
+
+ idLine = pDlgNode->idLine;
+
+
+ DlgReq.dwCmd = UI_REQ_END_DLG;
+ DlgReq.dwParam = MANUAL_DIAL_DLG;
+
+ Callback=GetCallbackProc(pDlgNode->Parent);
+
+ (*Callback)(idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&DlgReq, sizeof(DlgReq));
+ break;
+ }
+ }
+
+ return 0;
+}
diff --git a/private/unimodem/tapisp/mcxapi.c b/private/unimodem/tapisp/mcxapi.c
new file mode 100644
index 000000000..634873cd1
--- /dev/null
+++ b/private/unimodem/tapisp/mcxapi.c
@@ -0,0 +1,591 @@
+/*
+ mcxapi.c
+
+ MCX - Modem Configuration Extensions API
+
+ Chris Caputo - January 1994
+*/
+
+#include "unimdm.h"
+#include "mcxp.h"
+
+char szSettings[] = "Settings";
+char szSettingsInit[] = "Settings\\Init";
+char szPrefix[] = "Prefix";
+char szTerminator[] = "Terminator";
+
+#define MAX_REG_COMMAND_LEN 30 // BUGBUG - verify this with each change to the inf file
+
+//****************************************************************************
+// BOOL CreateSettingsInitEntry(MODEMINFORMATION *)
+//
+// Function: Creates a Settings\Init section in the registry, ala:
+// Settings\Init\0 = "AT ... <cr>"
+// Settings\Init\1 = "AT ... <cr>"
+// ...
+//
+// Returns: TRUE on success
+// FALSE on failure (note: leaves SettingsInit key in registry, if created. Not harmful)
+//
+// Note: Trusted function - don't need to verify hPort...
+//****************************************************************************
+
+BOOL CreateSettingsInitEntry(MODEMINFORMATION *pModemInfo)
+{
+ DWORD dwOptions = pModemInfo->mi_dwPreferredModemOptions;
+ DWORD dwCaps = pModemInfo->mi_dwModemOptionsCap;
+ CHAR *pszTemp;
+ CHAR *pszPrefix;
+ CHAR *pszTerminator;
+ CHAR *pszCommand;
+ DWORD dwResult;
+ HKEY hSettingsInitKey;
+ HKEY hSettingsKey;
+ DWORD dwType;
+ DWORD dwSize;
+ DWORD dwCounter = CMD_INDEX_START;
+ BOOL fRet = FALSE;
+ static char szCallSetupFailTimer[] = "CallSetupFailTimer";
+ static char szInactivityTimeout[] = "InactivityTimeout";
+ static char szSpeakerVolume[] = "SpeakerVolume";
+ static char szSpeakerMode[] = "SpeakerMode";
+ static char szFlowControl[] = "FlowControl";
+ static char szErrorControl[] = "ErrorControl";
+ static char szCompression[] = "Compression";
+ static char szModulation[] = "Modulation";
+ static char szCCITT[] = "_CCITT";
+ static char szBell[] = "_Bell";
+ static char szCCITT_V23[] = "_CCITT_V23";
+ static char szSpeedNegotiation[] = "SpeedNegotiation";
+ static char szLow[] = "_Low";
+ static char szMed[] = "_Med";
+ static char szHigh[] = "_High";
+ static char szSpkrModeDial[] = "_Dial";
+ static char szSetup[] = "_Setup";
+ static char szForced[] = "_Forced";
+ static char szCellular[] = "_Cellular";
+ static char szHard[] = "_Hard";
+ static char szSoft[] = "_Soft";
+ static char szOff[] = "_Off";
+ static char szOn[] = "_On";
+
+ pszTemp = (LPSTR)LocalAlloc(LPTR,
+ HAYES_COMMAND_LENGTH + 1 + // pszTemp
+ HAYES_COMMAND_LENGTH + 1 + // pszPrefix
+ HAYES_COMMAND_LENGTH + 1 + // pszTerminator
+ MAX_REG_COMMAND_LEN); // pszCommand
+ if (!pszTemp)
+ {
+ DPRINTF("out of memory.");
+ LocalFree(pszTemp);
+ return fRet;
+ }
+
+ pszPrefix = pszTemp + HAYES_COMMAND_LENGTH + 1;
+ pszTerminator = pszPrefix + HAYES_COMMAND_LENGTH + 1;
+ pszCommand = pszTerminator + HAYES_COMMAND_LENGTH + 1;
+
+ // deleted existing szSettingsInit key tree
+ //
+ dwResult = RegDeleteKeyA(pModemInfo->mi_hKeyModem, szSettingsInit);
+
+ // create new szSettingsInit key
+ //
+ // BUGBUG: JosephJ 7/3/96: We want to change this post 4.0 to not write to
+ // the registry -- keep this stuff in memory. I tried RegCreateKeyEx(REG_VOLATILE),
+ // but couldn't get measurable performance difference so I left things the way they
+ // are now.
+ if (RegCreateKeyA(pModemInfo->mi_hKeyModem, szSettingsInit, &hSettingsInitKey)
+ != ERROR_SUCCESS)
+ {
+ DPRINTF("RegCreateKey failed.");
+ LocalFree(pszTemp);
+ return fRet;
+ }
+
+ // get Settings key
+ //
+ if (RegOpenKeyA(pModemInfo->mi_hKeyModem, szSettings, &hSettingsKey)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegOpenKey failed when opening %s.", szSettings);
+ RegCloseKey(hSettingsInitKey);
+ LocalFree(pszTemp);
+ return fRet;
+ }
+
+ // read in prefix and terminator
+ //
+ dwSize = HAYES_COMMAND_LENGTH;
+ if (RegQueryValueExA(hSettingsKey, szPrefix, NULL, &dwType, (VOID *)pszTemp, &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s.", szPrefix);
+ goto Failure;
+ }
+ if (dwType != REG_SZ)
+ {
+ DPRINTFA1("'%s' wasn't REG_SZ.", szPrefix);
+ goto Failure;
+ }
+ ExpandMacros(pszTemp, pszPrefix, NULL, NULL, 0);
+
+ dwSize = HAYES_COMMAND_LENGTH;
+ if (RegQueryValueExA(hSettingsKey, szTerminator, NULL, &dwType, (VOID *)pszTemp, &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s.", szTerminator);
+ goto Failure;
+ }
+ if (dwType != REG_SZ)
+ {
+ DPRINTFA1("'%s' wasn't REG_SZ.", szTerminator);
+ goto Failure;
+ }
+ ExpandMacros(pszTemp, pszTerminator, NULL, NULL, 0);
+
+ ASSERT (lstrlenA(pszPrefix) + lstrlenA(pszTerminator) <= HAYES_COMMAND_LENGTH);
+
+ // set temp length to 0 and initialize first command string for use in CreateCommand()
+ //
+ lstrcpyA(pszTemp, pszPrefix);
+
+ // CallSetupFailTimer
+ //
+ if (pModemInfo->mi_dwCallSetupFailTimerCap)
+ {
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, szCallSetupFailTimer,
+ pModemInfo->mi_dwCallSetupFailTimerSetting, pszPrefix, pszTerminator,
+ &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // InactivityTimeout
+ //
+ if (pModemInfo->mi_dwInactivityTimeoutCap)
+ {
+ DWORD dwInactivityTimeout;
+
+ // Convert from seconds to the units used on the modem, rounding up if not an exact division.
+ //
+ dwInactivityTimeout = pModemInfo->mi_dwInactivityTimeoutSetting / pModemInfo->mi_dwInactivityScale +
+ (pModemInfo->mi_dwInactivityTimeoutSetting % pModemInfo->mi_dwInactivityScale ? 1 : 0);
+
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, szInactivityTimeout,
+ dwInactivityTimeout, pszPrefix, pszTerminator,
+ &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // BUGBUG - these could be optimized with a lookup-table
+ // SpeakerVolume
+ if (pModemInfo->mi_dwSpeakerVolumeCap)
+ {
+ lstrcpyA(pszCommand, szSpeakerVolume);
+ switch (pModemInfo->mi_dwSpeakerVolumeSetting)
+ {
+ case MDMVOL_LOW:
+ lstrcatA(pszCommand, szLow);
+ break;
+ case MDMVOL_MEDIUM:
+ lstrcatA(pszCommand, szMed);
+ break;
+ case MDMVOL_HIGH:
+ lstrcatA(pszCommand, szHigh);
+ break;
+ default:
+ DPRINTF("invalid SpeakerVolume.");
+ }
+
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // SpeakerMode
+ //
+ if (pModemInfo->mi_dwSpeakerModeCap)
+ {
+ lstrcpyA(pszCommand, szSpeakerMode);
+ switch (pModemInfo->mi_dwSpeakerModeSetting)
+ {
+ case MDMSPKR_OFF:
+ lstrcatA(pszCommand, szOff);
+ break;
+ case MDMSPKR_DIAL:
+ lstrcatA(pszCommand, szSpkrModeDial);
+ break;
+ case MDMSPKR_ON:
+ lstrcatA(pszCommand, szOn);
+ break;
+ case MDMSPKR_CALLSETUP:
+ lstrcatA(pszCommand, szSetup);
+ break;
+ default:
+ DPRINTF("invalid SpeakerMode.");
+ }
+
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // PreferredModemOptions
+
+ // NOTE: ERRORCONTROL MUST BE DONE BEFORE COMPRESSION BECAUSE OF ZYXEL MODEMS
+ // NOTE: THEY HAVE A SINGLE SET OF COMMANDS FOR BOTH EC AND COMP, AND WE CAN
+ // NOTE: ONLY DO THINGS IF WE HAVE THIS ORDER. UGLY BUT TRUE.
+
+ // - ErrorControl (On,Off,Forced)
+ //
+ if (dwCaps & MDM_ERROR_CONTROL)
+ {
+ lstrcpyA(pszCommand, szErrorControl);
+ switch (dwOptions & (MDM_ERROR_CONTROL | MDM_FORCED_EC | MDM_CELLULAR))
+ {
+ case MDM_ERROR_CONTROL:
+ lstrcatA(pszCommand, szOn);
+ break;
+ case MDM_ERROR_CONTROL | MDM_FORCED_EC:
+ lstrcatA(pszCommand, szForced);
+ break;
+ case MDM_ERROR_CONTROL | MDM_CELLULAR:
+ lstrcatA(pszCommand, szCellular);
+ break;
+ case MDM_ERROR_CONTROL | MDM_FORCED_EC | MDM_CELLULAR:
+ lstrcatA(pszCommand, szCellular);
+ lstrcatA(pszCommand, szForced);
+ break;
+ default: // no error control
+ lstrcatA(pszCommand, szOff);
+ break;
+ }
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // - Compression (On,Off)
+ //
+ if (dwCaps & MDM_COMPRESSION)
+ {
+ lstrcpyA(pszCommand, szCompression);
+ lstrcatA(pszCommand, (dwOptions & MDM_COMPRESSION ? szOn : szOff));
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // - FlowControl
+ //
+ if (dwCaps & (MDM_FLOWCONTROL_HARD | MDM_FLOWCONTROL_SOFT))
+ {
+ lstrcpyA(pszCommand, szFlowControl);
+ switch (dwOptions & (MDM_FLOWCONTROL_HARD | MDM_FLOWCONTROL_SOFT))
+ {
+ case MDM_FLOWCONTROL_HARD:
+ lstrcatA(pszCommand, szHard);
+ break;
+ case MDM_FLOWCONTROL_SOFT:
+ lstrcatA(pszCommand, szSoft);
+ break;
+ case MDM_FLOWCONTROL_HARD | MDM_FLOWCONTROL_SOFT:
+ if (dwCaps & MDM_FLOWCONTROL_HARD)
+ {
+ lstrcatA(pszCommand, szHard);
+ }
+ else
+ {
+ lstrcatA(pszCommand, szSoft);
+ }
+ break;
+ default:
+ lstrcatA(pszCommand, szOff);
+ }
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // - CCITT Override
+ //
+ if (dwCaps & MDM_CCITT_OVERRIDE)
+ {
+ lstrcpyA(pszCommand, szModulation);
+ if (dwOptions & MDM_CCITT_OVERRIDE)
+ {
+ // use szCCITT or V.23
+ if (dwCaps & MDM_V23_OVERRIDE && dwOptions & MDM_V23_OVERRIDE)
+ {
+ lstrcatA(pszCommand, szCCITT_V23);
+ }
+ else
+ {
+ lstrcatA(pszCommand, szCCITT);
+ }
+ }
+ else
+ {
+ lstrcatA(pszCommand, szBell);
+ }
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // - SpeedAdjust
+ //
+ if (dwCaps & MDM_SPEED_ADJUST)
+ {
+ lstrcpyA(pszCommand, szSpeedNegotiation);
+ lstrcatA(pszCommand, (dwOptions & MDM_SPEED_ADJUST ? szOn : szOff));
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0L,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // - Blind Dial
+ //
+ if (dwCaps & MDM_BLIND_DIAL)
+ {
+ lstrcpyA(pszCommand, (dwOptions & MDM_BLIND_DIAL ? szBlindOn : szBlindOff));
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, pszCommand, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+ }
+
+ // finish the current command line by passing in a NULL command name
+ if (!CreateCommand(pModemInfo->mi_hKeyModem, hSettingsKey, hSettingsInitKey, NULL, 0,
+ pszPrefix, pszTerminator, &dwCounter, pszTemp))
+ {
+ goto Failure;
+ }
+
+ // Success
+ fRet = TRUE;
+
+Failure:
+ // close keys
+ RegCloseKey(hSettingsInitKey);
+ RegCloseKey(hSettingsKey);
+ LocalFree(pszTemp);
+ return fRet;
+}
+
+//****************************************************************************
+// BOOL CreateCommand(HKEY hKeyModem, HKEY hSettings, HKEY hInit,
+// LPSTR pszRegName, DWORD dwNumber, LPSTR pszPrefix,
+// LPSTR pszTerminator, LPDWORD pdwCounter,
+// LPSTR pszString)
+//
+// Function: Creates a command string
+//
+// Returns: TRUE on success, FALSE otherwise
+//
+// Note: if pszRegName is NULL then it is the last command
+//****************************************************************************
+
+BOOL CreateCommand(HKEY hKeyModem,
+ HKEY hSettings,
+ HKEY hInit,
+ LPSTR pszRegName,
+ DWORD dwNumber,
+ LPSTR pszPrefix,
+ LPSTR pszTerminator,
+ LPDWORD pdwCounter,
+ LPSTR pszString)
+{
+ CHAR pszCommand[HAYES_COMMAND_LENGTH + 1];
+ CHAR pszCommandExpanded[HAYES_COMMAND_LENGTH + 1];
+ CHAR pszNumber[MAXUINTSTRLENGTH];
+ DWORD dwCommandLength;
+ DWORD dwSize;
+ DWORD dwType;
+ struct _ModemMacro ModemMacro;
+ static char szUserInit[] = "UserInit";
+ static char szNumberMacro[] = "<#>";
+
+ // do we really have a command to add?
+ //
+ if (pszRegName)
+ {
+ // read in command text (ie. SpeakerMode_Off = "M0")
+ //
+ dwSize = HAYES_COMMAND_LENGTH;
+ if (RegQueryValueExA(hSettings, pszRegName, NULL, &dwType, (VOID *)pszCommand, &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s. Continuing...", pszRegName);
+// LOGPRINTF((hLogFile,GET_MESSAGE_PTR(MsgWrnFailedToQueryValue), pszRegName));
+ return TRUE; // we will not consider this fatal
+ }
+ if (dwType != REG_SZ)
+ {
+ DPRINTFA1("'%s' wasn't REG_SZ.", pszRegName);
+ return FALSE;
+ }
+
+ // expand macros pszCommandExpanded <= pszCommand
+ //
+ lstrcpyA(ModemMacro.MacroName, szNumberMacro);
+ wsprintfA(pszNumber, "%d", dwNumber);
+ lstrcpyA(ModemMacro.MacroValue, pszNumber);
+ dwCommandLength = dwSize;
+ if (!ExpandMacros(pszCommand, pszCommandExpanded, &dwCommandLength, &ModemMacro, 1))
+ {
+ DPRINTF("ExpandMacro Error. State <- Unknown");
+ return FALSE;
+ }
+
+ // check string + new command + terminator, flush if too big and start a new one.
+ // will new command fit on existing string? If not, flush it and start new one.
+ //
+ if (lstrlenA(pszString) + lstrlenA(pszCommandExpanded) + lstrlenA(pszTerminator)
+ > HAYES_COMMAND_LENGTH)
+ {
+ lstrcatA(pszString, pszTerminator);
+ wsprintfA(pszNumber, "%d", *pdwCounter);
+ *pdwCounter = *pdwCounter + 1;
+ if (RegSetValueExA(hInit, pszNumber, 0, REG_SZ, (VOID *)pszString, lstrlenA(pszString) + 1)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA2("RegSetValueEx failed when writing '%s=%s'.", pszNumber, pszString);
+ return FALSE;
+ }
+ lstrcpyA(pszString, pszPrefix);
+ }
+
+ lstrcatA(pszString, pszCommandExpanded);
+ }
+ else
+ {
+ // finish off the current string
+ //
+ lstrcatA(pszString, pszTerminator);
+ wsprintfA(pszNumber, "%d", *pdwCounter);
+ *pdwCounter = *pdwCounter + 1;
+ if (RegSetValueExA(hInit, pszNumber, 0, REG_SZ, (VOID *)pszString, lstrlenA(pszString) + 1)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA2("RegSetValueEx failed when writing '%s=%s'.", pszNumber, pszString);
+ return FALSE;
+ }
+
+ // now write the UserInit string, if there is one...
+
+ // get the UserInit string length (including null), don't ExpandMacros on it
+ //
+ if (RegQueryValueExA(hKeyModem, szUserInit, NULL, &dwType, NULL, &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s (this can be okay).", szUserInit);
+ return TRUE; // it is okay to not have a UserInit
+ }
+ else
+ {
+ LPSTR pszUserInit;
+
+ if (dwType != REG_SZ)
+ {
+ DPRINTFA1("'%s' wasn't REG_SZ.", szUserInit);
+ return FALSE; // this is not okay
+ }
+
+ // check for 0 length string
+ // BUGBUG this could be folded into the above if. CPC 12/14/94
+ //
+ if (dwSize == 1)
+ {
+ DPRINTFA1("ignoring zero length %s entry.", szUserInit);
+ return TRUE;
+ }
+
+ // we allow the size of this string to be larger than 40 chars, because the user
+ // should have enough knowledge about what the modem can do, if they are using this
+ // allocate enough for if we need to add a prefix and terminator
+ //
+ if (!(pszUserInit = (LPSTR)LocalAlloc(LPTR,
+ dwSize +
+ lstrlenA(pszPrefix) +
+ lstrlenA(pszTerminator) +
+ 1)))
+ {
+ DPRINTF("unable to allocate memory for building the UserInit string.");
+ return FALSE;
+ }
+
+ if (RegQueryValueExA(hKeyModem, szUserInit, NULL, &dwType, (VOID *)pszUserInit, &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s.", szUserInit);
+ LocalFree(pszUserInit);
+ return FALSE; // it is not okay at this point
+ }
+
+ // check for prefix
+ //
+ if (strncmpi(pszUserInit, pszPrefix, lstrlenA(pszPrefix)))
+ {
+ // prepend a prefix string
+ lstrcpyA(pszUserInit, pszPrefix);
+
+ // reload string; it's easier than shifting...
+ if (RegQueryValueExA(hKeyModem, szUserInit, NULL, &dwType, (VOID *)(pszUserInit+lstrlenA(pszPrefix)), &dwSize)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("RegQueryValueEx failed when opening %s.", szUserInit);
+ LocalFree(pszUserInit);
+ return FALSE; // it is not okay at this point
+ }
+ }
+
+ // check for terminator
+ //
+ if (strncmpi(pszUserInit+lstrlenA(pszUserInit)-lstrlenA(pszTerminator),
+ pszTerminator, lstrlenA(pszTerminator)))
+ {
+ // append a terminator
+ //
+ lstrcatA(pszUserInit, pszTerminator);
+ }
+
+ // we have one, so add it to the init strings
+ //
+ wsprintfA(pszNumber, "%d", *pdwCounter);
+ *pdwCounter = *pdwCounter + 1;
+ if (RegSetValueExA(hInit, pszNumber, 0, REG_SZ, (VOID *)pszUserInit, lstrlenA(pszUserInit) + 1)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA2("RegSetValueEx failed when writing '%s=%s'.", pszNumber, pszUserInit);
+ LocalFree(pszUserInit);
+ return FALSE;
+ }
+
+ // free pszUserInit
+ //
+ LocalFree(pszUserInit);
+ }
+ }
+
+ return TRUE;
+}
diff --git a/private/unimodem/tapisp/mcxioctl.h b/private/unimodem/tapisp/mcxioctl.h
new file mode 100644
index 000000000..06e203d60
--- /dev/null
+++ b/private/unimodem/tapisp/mcxioctl.h
@@ -0,0 +1,107 @@
+//****************************************************************************
+//
+// File: mcxioctl.h
+// Content: This file contains the declaration for Unimodem
+// DeviceIOControl.
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+//****************************************************************************
+
+#ifndef _MCXIOCTL_H_
+#define _MCXIOCTL_H_
+
+typedef struct tagMcxOut {
+ DWORD dwReqID;
+ DWORD dwResult;
+} MCX_OUT, *PMCX_OUT;
+
+typedef struct tagMcxIn {
+ DWORD dwReqID;
+ PMCX_OUT pMcxOut;
+} MCX_IN, *PMCX_IN;
+
+// Monitor modes for IOCTL_UMDM_START_MONITOR
+//
+#define MONITOR_NON_CONTINUOUS 0
+#define MONITOR_CONTINUOUS 1
+
+// Passthrough modes for IOCTL_UMDM_PASSTHROUGH
+//
+#define PASSTHROUGH_ON 1
+#define PASSTHROUGH_OFF 2
+#define PASSTHROUGH_OFF_BUT_CONNECTED 3
+
+// DeviceIOControl operation result
+//
+#define MDM_SUCCESS 0
+#define MDM_PENDING 1
+#define MDM_FAILURE 2
+#define MDM_HANGUP 3
+#define MDM_BUSY 4
+#define MDM_NOANSWER 5
+#define MDM_NOCARRIER 6
+#define MDM_NODIALTONE 7
+
+// Invalid Pending operation ID
+//
+#define MDM_ID_NULL 0xFFFFFFFF
+
+// MCX interface prototypes
+//
+LONG MCXOpen (LPTSTR szModemName,
+ HANDLE hDevice,
+ LPTSTR szKey,
+ LPHANDLE lph,
+ DWORD dwID,
+ DWORD dwCompletionKey);
+
+LONG
+MCXDial(
+ HANDLE hModem,
+ LPSTR szData,
+ MCX_IN *pmcxi,
+ DWORD DialOptions
+ );
+
+
+LONG
+MCXClose(
+ HANDLE hModem,
+ HANDLE hComm,
+ BOOL LineClosed
+ );
+
+
+LONG MCXInit(HANDLE hModem, MCX_IN *pmcxi);
+LONG MCXMonitor(HANDLE hModem, DWORD dwType, MCX_IN *pmcxi);
+LONG MCXAnswer(HANDLE hModem, MCX_IN *pmcxi);
+LONG MCXHangup(HANDLE hModem, MCX_IN *pmcxi);
+LONG MCXGetCommConfig (HANDLE hModem, LPCOMMCONFIG lpCommConfig, LPDWORD lpcb);
+LONG MCXSetCommConfig (HANDLE hModem, LPCOMMCONFIG lpCommConfig, DWORD cb);
+LONG MCXSetPassthrough(HANDLE hModem, DWORD dwType);
+LONG MCXGetNegotiatedRate(HANDLE hModem, LPDWORD lpdwRate);
+LONG MCXMonitorRemoteHangup(HANDLE hModem, MCX_IN *pmcxi);
+void MCXAsyncComplete (HANDLE hModem, LPOVERLAPPED lpOverlapped);
+
+typedef VOID WINAPI
+DISCONNECT_HANDLER(
+ HANDLE pLineDev
+ );
+
+
+LONG WINAPI
+McxRegisterDisconectHandler(
+ HANDLE hModem,
+ DISCONNECT_HANDLER Handler,
+ HANDLE Context
+ );
+
+LONG WINAPI
+McxDeregisterDisconnectHandler(
+ HANDLE hModem
+ );
+
+
+
+#endif // _MCXIOCTL_H_
diff --git a/private/unimodem/tapisp/mcxp.h b/private/unimodem/tapisp/mcxp.h
new file mode 100644
index 000000000..a85e00044
--- /dev/null
+++ b/private/unimodem/tapisp/mcxp.h
@@ -0,0 +1,530 @@
+#include "logids.h"
+//#define VOICEVIEW 1 // turn on VoiceView stuff
+
+
+//
+// compatibility flags
+//
+#define COMPAT_FLAG_LOWER_DTR (0x00000001) // lower DTR and sleep before closeing com port
+
+
+#define MDM_V23_OVERRIDE 0x00000400
+
+// device types (from rover\rna\inc\modem.h)
+#define DT_NULL_MODEM 0
+#define DT_EXTERNAL_MODEM 1
+#define DT_INTERNAL_MODEM 2
+#define DT_PCMCIA_MODEM 3
+#define DT_PARALLEL_PORT 4
+#define DT_PARALLEL_MODEM 5
+
+#define MAXSTRINGLENGTH 256
+#define MAXUINTSTRLENGTH 11 // Max UINT in ascii + terminator
+#define MAX_REG_KEY_LEN 256
+
+#define REG_NULL 0xFFFFFFFF // indicates an invalid registry handle
+
+#define FLUSH_WRITE_QUEUE 1
+#define START_READ 2
+#define RESTART_READ 3
+#define TRY_READ 4
+#define SET_READ_CALLBACK 5
+#define POST_READ_CALLBACK 6
+#define CHECK_RESPONSE 7
+#define BAD_RESPONSE_CLEANUP_END 8
+#define BAIL_O_RAMA_MORE_DATA 9 // bad response, but finish reading in the bad response
+#define BAIL_O_RAMA_NO_MORE_DATA 10
+#define USE_WHOLE_RESPONSE 11
+#define USE_POSSIBLE_RESPONSE 12
+#define GOOD_RESPONSE 13
+#define END_READ 14
+#define SET_TIMEOUT 15
+#define POST_TIMEOUT 16
+
+#define MODEM_NO_UNCONDITIONAL (DWORD)-1 // for mi_dwUnconditionalReturnValue. Indicates not to use it.
+
+#define MODEM_SUCCESS MDM_SUCCESS
+#define MODEM_PENDING MDM_PENDING
+#define MODEM_FAILURE MDM_FAILURE
+#define MODEM_HANGUP MDM_HANGUP
+#define MODEM_BUSY MDM_BUSY
+#define MODEM_NOANSWER MDM_NOANSWER
+#define MODEM_NOCARRIER MDM_NOCARRIER
+#define MODEM_NODIALTONE MDM_NODIALTONE
+
+#define SUCCESS 0
+#define ECHO 1
+#define PARTIAL_RESPONSE 2
+#define UNRECOGNIZED_RESPONSE 3
+#define POSSIBLE_RESPONSE 4
+
+// time in miliseconds
+#define MILISECONDS_PER_SECOND 1000
+#define TO_FLUSH 2000 // 40 chars / 30 chars/sec (at 300bps) + safety = 2000 ms
+#define TO_INFINITE 0
+#define TO_FIRST_CHAR_AFTER_INIT_CMD 2000 // 2 seconds (9/21/94 - CPC - consider bumping up, now that we have TO_FLUSH)
+#define TO_ADDITIONAL_TO_CALL_SETUP_FAIL_TIMER 10000 // 10 seconds
+#define TO_FIRST_CHAR_AFTER_CONNECTION_CMD 60000 // 1 minute (used if we don't have CallSetupFailTimer support)
+ // BUGBUG we might want to make this match
+ // the cpl, even when the feature isn't supported.
+#define TO_FIRST_CHAR_AFTER_CONNECTION_CMD_NON_MODEM 2000 // 2 seconds, null-modems connect faster
+#define TO_NEXT_CHAR_RCV_INTERVAL 1000 // 1 second
+#define TO_DTR_DROP 1200 // 1200 ms (for STATE_HANGING_UP_DTR)
+
+#define CMD_INDEX_START 1 // "1", "2", "3", "4", ...
+
+#define HAYES_COMMAND_LENGTH 40
+
+typedef struct _ModemMacro {
+ CHAR MacroName[MAXSTRINGLENGTH];
+ CHAR MacroValue[MAXSTRINGLENGTH];
+} MODEMMACRO;
+
+#define LMSCH '<'
+#define RMSCH '>'
+
+#define CR_MACRO "<cr>"
+#define CR_MACRO_LENGTH 4
+#define LF_MACRO "<lf>"
+#define LF_MACRO_LENGTH 4
+
+#define CR '\r' // 0x0D
+#define LF '\n' // 0x0A
+
+#define PARTIAL_MATCH 0x01
+#define FULL_MATCH 0x02
+
+// must start at 1
+#define STATE_UNKNOWN 1
+#define STATE_INITIALIZING 2
+#define STATE_DISCONNECTED 3
+#define STATE_MONITORING 4
+#define STATE_DIALING 5
+#define STATE_ANSWERING 6
+#define STATE_CONNECTED 7
+#define STATE_DIALED 8
+#define STATE_ORIGINATING 9
+#define STATE_HANGING_UP_REMOTE 10 // This is when the remote side hangs up.
+ // modem: Wait for response and then:
+ // - send MODEM_HANGUP
+ // - set state to STATE_DISCONNECTED
+
+
+
+#define STATE_HANGING_UP_DTR 11 // After dropping DTR and waiting for 1200ms, check RLSD:
+ // If RLSD is low, raise DTR and set state to
+ // modem: STATE_HANGING_UP_NON_CMD
+ // null-modem: STATE_DISCONNECTED
+ // Else set state to:
+ // modem: STATE_HANGING_UP_NON_COMMAND and send "+++"
+ // null-modem: same, wait another 200ms (keeping count, stop at 3 or so)
+#define STATE_HANGING_UP_NON_CMD 12 // After sending a \r to hangup or sending +++ or getting RLSD low:
+ // Wait for any response or timeout and then:
+ // - send ATH<cr>
+ // - set state to STATE_HANGING_UP_CMD
+#define STATE_HANGING_UP_CMD 13 // Wait for a response to ATH<cr>
+ // If you get one, you are hung up, raise DTR, set state to
+ // STATE_DISCONNECTED and return MODEM_SUCCESS.
+ // Else if you don't get one, consider dropping DTR, waiting 200ms more
+ // and setting state to STATE_HANGING_UP_DTR. (keep track of
+ // how many times you do this, max out at 3 or so.)
+
+#define STATE_REMOTE_DROPPED 14 // The remote disconnected, wait here for Hangup and goto
+ // STATE_HANGING_UP_REMOTE
+
+#define STATE_WAIT_FOR_RLSD 15 // if we got the connect message, but rlsd was not high
+
+
+#define MAX_COMMAND_TRIES 5 // # of times to try a command before giving up.
+#define MAX_HANGUP_TRIES 3 // # of times to try hanging up before giving up.
+#define MODEM_ESCAPE_SEQUENCE "+++"
+#define MODEM_ESCAPE_SEQUENCE_LEN 3
+
+
+
+/* Modem State Structure */
+#pragma pack(1)
+typedef struct _MSS {
+ BYTE bResponseState; // See below
+ BYTE bNegotiatedOptions; // bitmap, 0 = no info, matches MDM_ options for now, since what we are
+ // interested in fits in 8 bits (error-correction (ec and cell) and compression)
+ DWORD dwNegotiatedDCERate; // 0 = no info
+ DWORD dwNegotiatedDTERate; // 0 = no info and if dwNegotiatedDCERate is 0 on connect, then
+ // the dte baudrate is actually changed.
+} MSS;
+#pragma pack()
+
+/* Structure for linked-list of response nodes */
+#pragma pack(1)
+typedef struct _RESPONSE_NODE {
+ struct _RESPONSE_NODE *pNext; // Pointer to next RESPONSE_NODE
+ MSS Mss; // Modem State Structure for this response
+ BYTE bLen; // Offset from 1, ie. 0=1, 1=2,... ,255=256
+ char szResponse[1]; // The actual response (not null terminated)
+} RESPONSE_NODE, *PRESPONSE_NODE, *LPRESPONSE_NODE;
+#pragma pack()
+
+/* DWORD dwResponseState */
+#define RESPONSE_OK 0x0
+#define RESPONSE_LOOP 0x1
+#define RESPONSE_CONNECT 0x2
+#define RESPONSE_ERROR 0x3
+#define RESPONSE_NOCARRIER 0x4
+#define RESPONSE_NODIALTONE 0x5
+#define RESPONSE_BUSY 0x6
+#define RESPONSE_NOANSWER 0x7
+#define RESPONSE_RING 0x8
+
+#define RESPONSE_START RESPONSE_OK
+#ifdef VOICEVIEW
+#define RESPONSE_VV_SSV 0x09 // VoiceView Data Mode Start Sequence Event
+#define RESPONSE_VV_SMD 0x0A // Modem Data Mode Start Sequence Event
+#define RESPONSE_VV_SFA 0x0B // Facisimile Data Mode Start Sequence Event
+#define RESPONSE_VV_SRA 0x0C // Receive ADSI Response Event
+#define RESPONSE_VV_SRQ 0x0D // Receive Capabilities Query Event
+#define RESPONSE_VV_SRC 0x0E // Receive Capabilities Information Event
+#define RESPONSE_VV_STO 0x0F // Talk-off Event (VoiceView start tone w/o a valid mode indicator)
+#define RESPONSE_VV_SVM 0x10 // VoiceView Message Available
+#define RESPONSE_VV_BASE (RESPONSE_VV_SSV - 1) // used to set proper call back values
+#define RESPONSE_END RESPONSE_VV_SVM
+#else
+#define RESPONSE_END RESPONSE_RING
+#endif // VOICEVIEW
+
+typedef struct _MODEM_REG_PROP {
+ DWORD dwDialOptions; // bitmap of supported options
+ DWORD dwCallSetupFailTimer; // Maximum value in seconds
+ DWORD dwInactivityTimeout; // Maximum value in units specific by InactivityScale
+ DWORD dwSpeakerVolume; // bitmap of supported values
+ DWORD dwSpeakerMode; // bitmap of supported values
+ DWORD dwModemOptions; // bitmap of supported values
+ DWORD dwMaxDTERate; // Maximum value in bit/s
+ DWORD dwMaxDCERate; // Maximum value in bit/s
+} MODEM_REG_PROP;
+
+typedef struct _MODEM_REG_DEFAULT {
+ DWORD dwCallSetupFailTimer; // seconds
+ DWORD dwInactivityTimeout; // units specific by InactivityScale
+ DWORD dwSpeakerVolume; // level
+ DWORD dwSpeakerMode; // mode
+ DWORD dwPreferredModemOptions; // bitmap
+} MODEM_REG_DEFAULT;
+
+#define COMMCONFIG_VERSION_1 1
+
+#define MODEMSETTINGS_FILLER 0 // # of bytes to make ring 0 modemsettings = ring 3 modemsettings
+
+#ifdef VOICEVIEW
+// Voice View information and states - on a per port bases
+typedef struct _VVINFO {
+ WORD wState; // state of monitoring see VVSTATE_x
+ WORD wClass; // what class the modem better be in
+ DWORD dwCallBackRef; // data to be passed back in the call back
+ int (*fpNotifyProc)(); // voice view call back function
+ DWORD fContinuousMonitoring; // old monitoring state
+ DWORD hSemaphore; // wait to switch fclasses
+ HTIMEOUT hTimer; // wait to switch fclasses
+} VVINFO, *PVVINFO, *LPVVINFO;
+
+// VoiceView states
+#define VVSTATE_NONE 0x00 // nothing going on
+#define VVSTATE_INIT 0x01 // want to look for VV stuff
+#define VVSTATE_MONITOR 0x02 // want to look for VV stuff
+
+// VoiceView current monitering states
+#define VVCLASS_0 0x00 // should be in fclass 0
+#define VVCLASS_80 0x80 // should be in fclass 80
+#endif // VOICEVIEW
+
+// Pending operation
+#define PO_NONE 0
+#define PO_WRITE 1
+#define PO_READ 2
+#define PO_EVENT 3
+
+// PrintString Options
+#define PS_SEND 0
+#define PS_SEND_SECURE 1
+#define PS_RECV 2
+
+// Overrides to hard-coded defaults.
+typedef struct
+{
+ DWORD dwFlags; // one of the fMDMDEF_* flags below
+ DWORD dwPortLatency; // Port latency in milliseconds.
+} MODEMDEFAULTS;
+
+// fMDMDEF flags:
+// Add a 100ms delay before sending a command.
+ #define fMDMDEF_UseInterCommandDelay (0x1<<0)
+
+#define GET_PORT_LATENCY(_pmi)\
+ (\
+ ((_pmi)->mi_pNonStandardDefaults)\
+ ? (_pmi)->mi_pNonStandardDefaults->dwPortLatency\
+ : 0\
+ )
+
+#define GET_INTERCOMMAND_DELAY(_pmi)\
+ (\
+ ((_pmi)->mi_pNonStandardDefaults\
+ && ((_pmi)->mi_pNonStandardDefaults->dwFlags & fMDMDEF_UseInterCommandDelay))\
+ ? 100\
+ : 0\
+ )
+
+// BUGBUG, flags should be consolidated to save a few DWORDs of memory
+typedef struct _ModemInformation {
+ HANDLE mi_PortHandle; // Handle of the com. port that the modem is attached to.
+ DWORD mi_ReqID; // async request ID
+ PMCX_OUT mi_pmcxo; // async output info
+
+ DWORD mi_dwRWIOExpected; // Token used to indicate what I/O operation we are currently expecting to finish
+ DWORD mi_dwEventIOExpected; // Token used to indicate what I/O operation we are currently expecting to finish
+ DWORD mi_dwDeferedExpected; // Token used to indicate what I/O operation we are currently expecting to finish
+
+ DWORD mi_dwCompletionKey; // CompletionKey to be passed to PostQueuedCompletionStatus.
+
+ DWORD mi_ModemState;
+ HKEY mi_hKeyModem; // state machine - reg key for drv
+ char mi_szCmd[MAXSTRINGLENGTH]; // state machine - current command value
+ DWORD mi_cbCmd; // state machine - length of current command value
+ char mi_szResponse[MAXSTRINGLENGTH]; // state machine - response string from modem
+ DWORD mi_RcvState; // state machine - receive state
+ DWORD mi_cbTotalResponse; // state machine - total length of modem responses
+ char * mi_pszStartReadSpoof;
+ char * mi_pszEndReadSpoof;
+ DWORD mi_dwInactivityScale; // Indicates how many seconds per unit for inactivity timeout
+ DWORD mi_fContinuousMonitoring; // TRUE = continuous, TRUE = one shot
+ DWORD mi_fSettingsInitStringsBuilt; // TRUE = SettingsInit built, FALSE = needs to be built
+
+ DWORD mi_dwNegotiatedDTERate;
+ DWORD mi_dwNegotiatedDCERate;
+ DWORD mi_dwNegotiatedModemOptions;
+
+ DWORD mi_dwModemOptionsCap;
+ DWORD mi_dwCallSetupFailTimerCap;
+ DWORD mi_dwInactivityTimeoutCap;
+ DWORD mi_dwSpeakerVolumeCap;
+ DWORD mi_dwSpeakerModeCap;
+
+ DWORD mi_dwPreferredModemOptions;
+ DWORD mi_dwCallSetupFailTimerSetting;
+ DWORD mi_dwInactivityTimeoutSetting;
+ DWORD mi_dwSpeakerVolumeSetting;
+ DWORD mi_dwSpeakerModeSetting;
+
+ DWORD mi_dwCommandTryCount; // count of the number of command attempts
+ DWORD mi_dwHangupTryCount; // count of the number of hangup attempts
+ DWORD mi_dwPostHangupModemState; // if non-0 then we want to do a command after hangup, and set this state
+ char * mi_pszzPostHangupCmds; // non-NULL if there are cmds to be done after hangup
+ char * mi_pszzHangupCmds; // in memory modem commands for hangup, freed when modem closed
+ char * mi_pszzCmds; // in memory modem commands, free mem after use except if == to mi_pszzHangupCmds
+ char * mi_pszCurCmd; // current command in mi_pszzCmds
+ char * mi_pszPrevCmd; // previous command in mi_pszzCmds
+ char * mi_pszReset; // reset command to be slammed to the modem just before closing
+ DWORD mi_dwResetLen; // length of the reset string
+ RESPONSE_NODE * mi_prnResponseHead; // Pointer to the head of the linked-list of responses.
+ struct _MSS mi_mssPossible; // MSS of a POSSIBLE_RESPONSE
+ DWORD mi_dwPossibleResponseLen; // 0 if there isn't a current POSSIBLE_RESPONSE.
+ // >0 indicates the length of the POSSIBLE_RESPONSE
+ BOOL mi_fBadResponseCleanupMode; // TRUE if we are in the midst of a bad response cleanup
+ BOOL mi_fModem; // TRUE if the port is an modem and not a null-modem
+ DWORD mi_dwUnconditionalReturnValue; // MODEM_NO_UNCONDITIONAL means don't use. Otherwise, use.
+
+ LPOVERNODE mi_lpOverlappedRW; // ptr to the current overlapped struct
+ LPOVERNODE mi_lpOverlappedEvent; // ptr to the current overlapped struct
+
+ DWORD mi_waitEvent; // wait event
+ DWORD mi_timeout; // wait event timeout
+
+ DWORD mi_dwCommError; // Current comm error (0 = no error)
+
+ HANDLE mi_SyncReadEvent; // event to be used for sync reads
+
+ HANDLE mi_hLogFile;
+
+ DWORD mi_dwID; // debug display number
+
+ HANDLE mi_hCommon;
+
+ DWORD mi_dwWaitForCDTime;
+
+ DISCONNECT_HANDLER *mi_DisconnectHandler;
+ HANDLE mi_DisconnectContext;
+
+ DWORD mi_CompatibilityFlags;
+
+ MODEMDEFAULTS *mi_pNonStandardDefaults; // Overrides to hard-coded defaults;.
+
+#ifdef VOICEVIEW
+ VVINFO VVInfo; // all the VoiceView info for this port
+#endif // VOICEVIEW
+} MODEMINFORMATION, *PMODEMINFORMATION;
+
+#define DWORDFROMFOURCHAR( ch0, ch1, ch2, ch3 ) \
+ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
+ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+
+#define SMTF DWORDFROMFOURCHAR('S', 'M', 'T', 'F')
+
+// dwEventMaskLoc == NULL means no change from previous setting
+//
+#define SETCOMMEVENTMASK(hPort, dwClientEventMask, dwMyEventMask, dwEventMaskLoc) \
+ VCOMM_SetCommEventMask((HPORT)(hPort)->mi_PortHandle, \
+ (dwClientEventMask) | ((hPort)->mi_dwMyEventMask = (dwMyEventMask)), \
+ (dwEventMaskLoc))
+
+/* NOINC */
+MODEMINFORMATION * AllocateModem(LPTSTR szKey,
+ LPTSTR szModemName,
+ HANDLE hDevice);
+void FreeModem(MODEMINFORMATION * pModemInfo, HANDLE hComm);
+BOOL BuildResponsesLinkedList(MODEMINFORMATION * pModemInfo);
+
+BOOL CreateSettingsInitEntry(HANDLE hPort);
+BOOL CreateCommand(HKEY hKeyModem,
+ HKEY hSettings,
+ HKEY hInit,
+ LPSTR pszRegName,
+ DWORD dwNumber,
+ LPSTR pszPrefix,
+ LPSTR pszTerminator,
+ LPDWORD pdwCounter,
+ LPSTR pszString);
+
+DWORD ModemCommand(MODEMINFORMATION * pModemInfo,
+ DWORD dwReqID,
+ MCX_OUT *pmcxo,
+ LPSTR pszzCmdInMem);
+DWORD ModemWriteCommand(MODEMINFORMATION * pModemInfo);
+DWORD ReadComm(MODEMINFORMATION *pModemInfo, LPBYTE lpBuf, DWORD dwToRead,
+ LPDWORD pdwRead, DWORD dwTimeout);
+DWORD CheckResponse(MODEMINFORMATION * hPort, MSS * pMss);
+DWORD MatchResponse(MODEMINFORMATION * hPort, MSS * pMss);
+void ReadNotifyClient(MODEMINFORMATION * hPort, DWORD Param);
+DWORD HandleCommErrors(MODEMINFORMATION * hPort, ULONG ulError);
+
+void ModemCallClient(MODEMINFORMATION * hPort, DWORD wParam);
+BOOL ExpandMacros(LPSTR pszRegResponse,
+ LPSTR pszExpanded,
+ LPDWORD pdwValLen,
+ MODEMMACRO * pMdmMacro,
+ DWORD cbMacros);
+VOID ReadCompletionRoutine2(MODEMINFORMATION * hPort);
+LPSTR LoadRegCommands(MODEMINFORMATION *hPort,
+ LPSTR szRegCommand,
+ LPSTR pszzAppend);
+int strncmpi(char *dst, char *src, long count);
+int Mystrncmp(char *dst, char *src, long count);
+
+DWORD ModemWrite (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+ DWORD cbWrite, LPDWORD lpcbWritten, DWORD dwTimeout);
+DWORD ModemRead (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+ DWORD cbRead, LPDWORD lpcbRead, DWORD dwTimeout);
+DWORD ModemRWAsyncComplete (MODEMINFORMATION * pModemInfo, LPDWORD lpcb);
+DWORD ModemWaitEvent (MODEMINFORMATION * pModemInfo, DWORD dwEvent, DWORD dwTimeOut);
+
+DWORD WINAPI
+ModemWaitEventComplete(
+ MODEMINFORMATION * pModemInfo,
+ LPOVERNODE pNode
+ );
+
+
+BOOL WINAPI
+CurrentlyWaitingForCommEvent(
+ MODEMINFORMATION * pModemInfo
+ );
+
+
+BOOL WINAPI
+CreateDeferedWorkItem(
+ MODEMINFORMATION * pModemInfo
+ );
+
+
+VOID ModemSetPassthrough (MODEMINFORMATION * pModemInfo, DWORD dwMode);
+
+
+HANDLE WINAPI
+ModemOpenLog(
+ LPSTR pszName
+ );
+
+VOID WINAPIV
+LogPrintf(
+ HANDLE FileHandle,
+ DWORD dwID,
+ LPSTR FormatString,
+ ...
+ );
+
+VOID WINAPI
+ModemCloseLog(
+ HANDLE FileHandle
+ );
+
+VOID WINAPI
+FlushLog(
+ HANDLE FileHandle
+ );
+
+void WINAPI
+PrintString(
+ HANDLE hLogFile,
+ DWORD dwID,
+ char *pchStr,
+ DWORD dwLength,
+ DWORD dwOption
+ );
+
+void WINAPI
+PrintCommSettings(
+ HANDLE hLogFile,
+ DWORD dwID,
+ DCB * pDcb
+ );
+
+VOID WINAPI
+LogString(
+ HANDLE FileHandle,
+ DWORD dwID,
+ DWORD StringID,
+ ...
+ );
+
+void WINAPI
+PrintGoodResponse(
+ HANDLE hLogFile,
+ DWORD dwID,
+ DWORD ResponseState
+ );
+
+LPSTR WINAPI
+NewLoadRegCommands(
+ HKEY hKey,
+ LPSTR szRegCommand,
+ LPSTR pszzAppend
+ );
+
+PRESPONSE_NODE WINAPI
+NewBuildResponsesLinkedList(
+ HKEY hKey
+ );
+
+
+
+#define toupper(ch) (((ch >= 'a') && (ch <= 'z')) ? ch-'a'+'A':ch)
+#define ctox(ch) (((ch >='0') && (ch <= '9')) ? ch-'0': toupper(ch)-'A'+10)
+
+extern char szSettingsInit[];
+extern char szSettings[];
+extern char szPrefix[];
+extern char szTerminator[];
+extern char szBlindOn[];
+extern char szBlindOff[];
+
+#define MAXADDRESSLEN 80 // From tapi.h - TAPIMAXDESTADDRESSSIZE
+
+/* INC */
diff --git a/private/unimodem/tapisp/mcxrw.c b/private/unimodem/tapisp/mcxrw.c
new file mode 100644
index 000000000..ec2829317
--- /dev/null
+++ b/private/unimodem/tapisp/mcxrw.c
@@ -0,0 +1,649 @@
+/******************************************************************************
+
+(C) Copyright MICROSOFT Corp., 1987-1993
+
+Rob Williams, June 93 w/ State machine and parser plagarized from RAS
+
+******************************************************************************/
+
+#include "unimdm.h"
+#include "mcxp.h"
+
+#include <devioctl.h>
+#include <ntddmodm.h>
+
+
+BOOL WINAPI
+CreateDeferedWorkItem(
+ MODEMINFORMATION * pModemInfo
+ )
+
+{
+ LPOVERNODE pNode;
+ BOOL bResult;
+
+ pNode=(LPOVERNODE)OverPoolAlloc(++pModemInfo->mi_dwDeferedExpected, 1);
+
+ if (pNode == NULL) {
+
+ return FALSE;
+ }
+
+
+ pNode->Type=OVERNODE_TYPE_WORKITEM;
+
+ bResult=PostQueuedCompletionStatus(
+ ghCompletionPort,
+ 0,
+ pModemInfo->mi_dwCompletionKey,
+ &pNode->overlapped
+ );
+
+
+ if (!bResult) {
+
+ OverPoolFree((LPOVERLAPPED)pNode);
+ }
+
+ return bResult;
+
+}
+
+
+
+//****************************************************************************
+//DWORD ModemWrite (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+// DWORD cbWrite, LPDWORD lpcbWritten, DWORD dwTimeout)
+//
+// Function: Write a string to the modem. Always perform asynchronously,
+// even if WriteFile finishes synchronously.
+//
+// Returns: MODEM_PENDING if pending
+// MODEM_FAILURE if fails
+// (Never returns MODEM_SUCCESS)
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD ModemWrite (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+ DWORD cbWrite, LPDWORD lpcbWritten, DWORD dwTimeout)
+{
+ COMMTIMEOUTS commtimeout;
+ DWORD dwResult;
+ LPOVERNODE pNode;
+
+// MCXPRINTF("ModemWrite");
+
+ ASSERT(pModemInfo->mi_lpOverlappedRW == NULL);
+
+ // Set timeout
+ //
+ commtimeout.ReadIntervalTimeout = 0;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = 0;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = dwTimeout;
+ SetCommTimeouts(pModemInfo->mi_PortHandle, &commtimeout);
+
+ pNode=(LPOVERNODE)OverPoolAlloc(++pModemInfo->mi_dwRWIOExpected, 1);
+
+ if (pNode == NULL) {
+
+ dwResult = MODEM_FAILURE;
+ }
+ else
+ {
+ SET_OVERNODE_TYPE(pNode,OVERNODE_TYPE_READWRITE);
+
+ // Make the asynchronous write call
+ //
+ if (WriteFile(pModemInfo->mi_PortHandle, lpBuf, cbWrite, lpcbWritten,
+ &pNode->overlapped))
+ {
+ dwResult = MODEM_PENDING; // I/O will show up on the completion port
+ }
+ else
+ {
+ // Determine the result
+ //
+ dwResult = GetLastError();
+
+ if (dwResult == ERROR_IO_PENDING)
+ {
+ dwResult = MODEM_PENDING;
+ }
+ else
+ {
+ OverPoolFree((LPOVERLAPPED)pNode);
+ pNode=NULL;
+ dwResult = MODEM_FAILURE;
+ };
+ };
+ }
+
+ pModemInfo->mi_lpOverlappedRW=pNode;
+ return dwResult;
+}
+
+//****************************************************************************
+//DWORD ModemRead (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+// DWORD cbRead, LPDWORD lpcbRead, DWORD dwTimeout)
+//
+// Function: Read a string from the modem Always perform asynchronously,
+// even if ReadFile finishes synchronously.
+//
+// Returns: MODEM_PENDING if pending
+// MODEM_FAILURE if fails
+// (Never returns MODEM_SUCCESS)
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD ModemRead (MODEMINFORMATION * pModemInfo, LPBYTE lpBuf,
+ DWORD cbRead, LPDWORD lpcbRead, DWORD dwTimeout)
+{
+ COMMTIMEOUTS commtimeout;
+ DWORD dwResult;
+ LPOVERNODE pNode;
+
+// MCXPRINTF("ModemRead");
+
+ ASSERT(pModemInfo->mi_lpOverlappedRW == NULL);
+
+ // Set timeout
+ //
+ commtimeout.ReadIntervalTimeout = 0;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = dwTimeout;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 0;
+ SetCommTimeouts(pModemInfo->mi_PortHandle, &commtimeout);
+
+ pNode=(LPOVERNODE)OverPoolAlloc(++pModemInfo->mi_dwRWIOExpected, 1);
+
+ if (pNode == NULL) {
+
+ dwResult = MODEM_FAILURE;
+ }
+ else
+ {
+ SET_OVERNODE_TYPE(pNode,OVERNODE_TYPE_READWRITE);
+
+ // Make the asynchronous write call
+ //
+ if (ReadFile(pModemInfo->mi_PortHandle, lpBuf, cbRead, lpcbRead,
+ &pNode->overlapped))
+ {
+ dwResult = MODEM_PENDING; // I/O will show up on the completion port
+ }
+ else
+ {
+ // Determine the result
+ //
+ dwResult = GetLastError();
+
+ if (dwResult == ERROR_IO_PENDING)
+ {
+ dwResult = MODEM_PENDING;
+ }
+ else
+ {
+ OverPoolFree((LPOVERLAPPED)pNode);
+ pNode=NULL;
+ dwResult = MODEM_FAILURE;
+ };
+ };
+ }
+
+ pModemInfo->mi_lpOverlappedRW=pNode;
+ return dwResult;
+}
+
+//****************************************************************************
+// DWORD ModemRWAsyncComplete (MODEMINFORMATION * pModemInfo, LPDWORD lpcb)
+//
+// Function: Complete the asynchronous read/write operation
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD ModemRWAsyncComplete (MODEMINFORMATION * pModemInfo, LPDWORD lpcb)
+{
+ DWORD dwRet;
+
+ if (pModemInfo->mi_lpOverlappedRW == NULL) {
+
+ *lpcb = 0;
+ return MODEM_FAILURE;
+ }
+
+ // Has all of the write buffer been emptied?
+ if (GetOverlappedResult(pModemInfo->mi_PortHandle,
+ &pModemInfo->mi_lpOverlappedRW->overlapped,
+ lpcb,
+ FALSE))
+ {
+ // Very Funny!! sometimes GetOverlappedResult returns success but nothing
+ // was written nor read. In this case it should mean timeout.
+ //
+ if (*lpcb)
+ {
+ dwRet = MODEM_SUCCESS;
+ }
+ else
+ {
+ dwRet = MODEM_PENDING;
+ };
+ }
+ else
+ {
+ if (GetLastError() == ERROR_IO_INCOMPLETE)
+ {
+ dwRet = MODEM_PENDING;
+ }
+ else
+ {
+ dwRet = MODEM_FAILURE;
+ };
+ };
+
+ pModemInfo->mi_lpOverlappedRW=NULL;
+
+ return dwRet;
+}
+
+//****************************************************************************
+//DWORD ModemWaitEvent (MODEMINFORMATION * pModemInfo, DWORD dwEvent,
+// DWORD dwTimeout)
+//
+// Function: Monitor the modem's control signal
+//
+// Returns: MODEM_SUCCESS if the control is signalled
+// MODEM_PENDING if the control line is being monitored
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD ModemWaitEvent (MODEMINFORMATION * pModemInfo, DWORD dwEvent,
+ DWORD dwTimeOut)
+{
+ DWORD dwWaitEvent;
+ DWORD dwResult;
+ LPOVERNODE pNode;
+
+
+ MCXPRINTF("ModemWaitEvent");
+ ASSERT(dwTimeOut<GTC_MAXDELTA);
+
+ ASSERT(pModemInfo->mi_lpOverlappedEvent == NULL);
+
+ // Make the asynchronous wait call
+ //
+ SetCommMask(pModemInfo->mi_PortHandle, dwEvent);
+
+ pModemInfo->mi_waitEvent = dwEvent;
+
+ pNode=(LPOVERNODE)OverPoolAlloc(++pModemInfo->mi_dwEventIOExpected,
+ dwTimeOut ? 2 : 1);
+
+ if (pNode == NULL) {
+
+ dwResult = MODEM_FAILURE;
+ }
+ else
+ {
+
+ SET_OVERNODE_TYPE(pNode,OVERNODE_TYPE_COMMEVENT);
+
+ pNode->CommEvent=0;
+
+ if (WaitCommEvent(pModemInfo->mi_PortHandle, &pNode->CommEvent,
+ &pNode->overlapped))
+ {
+ MCXPRINTF1("WaitCommEvent returned TRUE! Returning PENDING anyways.%08lx",pNode->overlapped.Internal);
+
+ dwResult = MODEM_PENDING; // The event will be signaled.
+ }
+ else
+ {
+ // Determine the result
+ //
+ dwResult = GetLastError();
+
+ if (dwResult == ERROR_IO_PENDING)
+ {
+ if (dwTimeOut)
+ {
+
+ // Mark the timeout
+ //
+ GTC_AequalsBplusC(pModemInfo->mi_timeout, GETTICKCOUNT(),dwTimeOut);
+
+ if (SetMdmTimer(pModemInfo->mi_dwCompletionKey,
+ &pNode->overlapped,
+ dwTimeOut) == ERROR_SUCCESS)
+ {
+ MCXPRINTF2("SET_TIMEOUT (%d ms dtr droppage) @%d",
+ dwTimeOut, GETTICKCOUNT());
+ }
+ else
+ {
+ MCXPRINTF("SetMdmTimer did not return ERROR_SUCCESS");
+
+ pModemInfo->mi_timeout=GETTICKCOUNT();
+
+ SetCommMask(pModemInfo->mi_PortHandle, 0);
+
+ PostQueuedCompletionStatus(ghCompletionPort,
+ 0,
+ pModemInfo->mi_dwCompletionKey,
+ &pNode->overlapped);
+
+
+ };
+
+ };
+
+ dwResult = MODEM_PENDING;
+ }
+ else
+ {
+ OverPoolFree((LPOVERLAPPED)pNode);
+
+
+ if (dwTimeOut) {
+
+ // Free it twice because the reference count was 2.
+ //
+ OverPoolFree((LPOVERLAPPED)pNode);
+ }
+
+ pNode=NULL;
+
+ MCXPRINTF1("GetLastError() in ModemWaitEvent returned %ld", dwResult);
+ dwResult = MODEM_FAILURE;
+ };
+ };
+ }
+
+ MCXPRINTF3("ModemWaitEvent returned %ld, id=%d, %08lx", dwResult,pNode ? pNode->dwToken : (DWORD)-1 , pNode);
+
+ pModemInfo->mi_lpOverlappedEvent=pNode;
+
+ return dwResult;
+}
+
+//****************************************************************************
+// DWORD ModemWaitEventComplete (MODEMINFORMATION * pModemInfo)
+//
+// Function: Complete the asynchronous wait-event operation
+//
+// Returns: MODEM_SUCCESS if success
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD WINAPI
+ModemWaitEventComplete(
+ MODEMINFORMATION * pModemInfo,
+ LPOVERNODE pNode
+ )
+{
+
+
+
+ // If we are not waiting for an event, return failure
+ //
+ if (pModemInfo->mi_lpOverlappedEvent != pNode) {
+
+ MCXPRINTF("ModemWaitEventComplete returning failure 1.");
+ return MODEM_FAILURE;
+ }
+
+ pModemInfo->mi_lpOverlappedEvent=NULL;
+
+ if ((pNode->CommEvent & pModemInfo->mi_waitEvent) || (pModemInfo->mi_waitEvent == 0))
+
+ {
+ // Disable HW detection
+ //
+ SetCommMask(pModemInfo->mi_PortHandle, 0L);
+
+ // If we have a timer pending, clear timer
+ //
+ if (pModemInfo->mi_timeout)
+ {
+ pModemInfo->mi_timeout = 0;
+ if (KillMdmTimer(pModemInfo->mi_dwCompletionKey,
+ (LPOVERLAPPED)pNode) == TRUE)
+ {
+ OverPoolFree((LPOVERLAPPED)pNode);
+ }
+ };
+ return MODEM_SUCCESS;
+ }
+ else
+ {
+ // We may have a timeout
+ //
+ if (pModemInfo->mi_timeout)
+ {
+ DWORD tcNow = GETTICKCOUNT();
+ if (GTC_AleB(pModemInfo->mi_timeout, tcNow))
+ {
+ // Timeout expired
+ pModemInfo->mi_timeout = 0;
+ MCXPRINTF1("HW timeout expired @%d.", GetTickCount());
+
+ // Disable HW detection
+ //
+ SetCommMask(pModemInfo->mi_PortHandle, 0L);
+ return MODEM_PENDING;
+ }
+ else
+ {
+ // We got an event that we did not want, We will just return success,
+ // to keep things from hanging, and hope for the best. This should no happen.
+ //
+ // Kill the timer too
+ //
+#ifdef DEBUG
+ {
+ DWORD RealMask;
+
+ GetCommMask(
+ pModemInfo->mi_PortHandle,
+ &RealMask
+ );
+
+ MCXPRINTF2("ModemWaitEventComplete: got unexpected event (signalEvent = %d, mask=%d).",
+ pNode->CommEvent,RealMask);
+
+// LogPrintf(pModemInfo->mi_hLogFile, pModemInfo->mi_dwID,
+// "ModemWaitEventComplete: got unexpected event (signalEvent = %d, mask=%d).\n",
+// pNode->CommEvent,RealMask);
+// ASSERT(0);
+ }
+#endif
+
+ SetCommMask(pModemInfo->mi_PortHandle, 0L);
+
+ // If we have a timer pending, clear timer
+ //
+ pModemInfo->mi_timeout = 0;
+ if (KillMdmTimer(pModemInfo->mi_dwCompletionKey,
+ (LPOVERLAPPED)pNode) == TRUE)
+ {
+ OverPoolFree((LPOVERLAPPED)pNode);
+ }
+
+ return MODEM_PENDING;
+
+ };
+ }
+ else
+ {
+ // We should not be here at all.
+ // Disable HW detection so we do not get a spurious event and
+ // get stuck in a infinite loop
+ //
+ SetCommMask(pModemInfo->mi_PortHandle, 0L);
+ MCXPRINTF("ModemWaitEventComplete returning failure 3.");
+ return MODEM_FAILURE;
+ };
+ };
+}
+
+BOOL WINAPI
+CurrentlyWaitingForCommEvent(
+ MODEMINFORMATION * pModemInfo
+ )
+
+{
+ return (pModemInfo->mi_lpOverlappedEvent != NULL);
+
+}
+
+
+
+//****************************************************************************
+// VOID ModemSetPassthrough (MODEMINFORMATION * pModemInfo,
+// DWORD dwMode)
+//
+// Function: Sets the device driver passthrough mode.
+//
+// Input: dwMode can be one of:
+// MODEM_NOPASSTHROUGH
+// MODEM_PASSTHROUGH
+// MODEM_DCDSNIFF
+//
+// Returns: nothing. always assumed to succeed
+//
+// Fri 13-Oct-1995 18:11:26 -by- Chris Caputo [ccaputo]
+// created
+//****************************************************************************
+#if 0
+VOID ModemSetPassthrough (MODEMINFORMATION * pModemInfo,
+ DWORD dwMode)
+{
+ DWORD dwBytesReturned;
+
+ if (FALSE == DeviceIoControl(pModemInfo->mi_PortHandle,
+ IOCTL_MODEM_SET_PASSTHROUGH,
+ &dwMode,
+ sizeof(dwMode),
+ NULL,
+ 0,
+ &dwBytesReturned,
+ NULL))
+ {
+ MCXPRINTF1("SET_PASSTHROUGH - %s - failed.", dwMode == MODEM_NOPASSTHROUGH ?
+ "NOPASSTHROUGH" :
+ dwMode == MODEM_PASSTHROUGH ?
+ "PASSTHROUGH" :
+ dwMode == MODEM_DCDSNIFF ?
+ "DCDSNIFF" :
+ "INVALID_SETTING");
+ MCXPRINTF1("DevioceIoControl(IOCTL_SET_PASSTHROUGH) returned %d",
+ GetLastError());
+ MCXPRINTF1("pModemInfo->mi_PortHandle = %d", pModemInfo->mi_PortHandle);
+ ASSERT(0);
+ }
+ else
+ {
+ MCXPRINTF1("SET_PASSTHROUGH - %s - worked.", dwMode == MODEM_NOPASSTHROUGH ?
+ "NOPASSTHROUGH" :
+ dwMode == MODEM_PASSTHROUGH ?
+ "PASSTHROUGH" :
+ dwMode == MODEM_DCDSNIFF ?
+ "DCDSNIFF" :
+ "INVALID_SETTING");
+ }
+}
+#endif
+
+
+
+VOID WINAPI
+ModemSetPassthrough (
+ MODEMINFORMATION * pModemInfo,
+ DWORD dwMode
+ )
+
+{
+
+ DWORD BytesWritten;
+ OVERLAPPED OverLapped;
+ BOOL bResult;
+
+ OverLapped.hEvent=(HANDLE)((DWORD)pModemInfo->mi_SyncReadEvent | 1);
+
+ bResult=DeviceIoControl(
+ pModemInfo->mi_PortHandle,
+ IOCTL_MODEM_SET_PASSTHROUGH,
+ &dwMode,
+ sizeof(dwMode),
+ NULL,
+ 0,
+ &BytesWritten,
+ NULL
+ );
+
+ if (!bResult) {
+
+ if (GetLastError() == ERROR_IO_PENDING) {
+ //
+ // pending
+ //
+ bResult=GetOverlappedResult(
+ pModemInfo->mi_PortHandle,
+ &OverLapped,
+ &BytesWritten,
+ TRUE
+ );
+
+ }
+
+ }
+
+
+ if (bResult) {
+
+ MCXPRINTF1("SET_PASSTHROUGH - %s - worked.", dwMode == MODEM_NOPASSTHROUGH ?
+ "NOPASSTHROUGH" :
+ dwMode == MODEM_PASSTHROUGH ?
+ "PASSTHROUGH" :
+ dwMode == MODEM_DCDSNIFF ?
+ "DCDSNIFF" :
+ "INVALID_SETTING");
+
+ } else {
+
+
+ MCXPRINTF1("SET_PASSTHROUGH - %s - failed.", dwMode == MODEM_NOPASSTHROUGH ?
+ "NOPASSTHROUGH" :
+ dwMode == MODEM_PASSTHROUGH ?
+ "PASSTHROUGH" :
+ dwMode == MODEM_DCDSNIFF ?
+ "DCDSNIFF" :
+ "INVALID_SETTING");
+ MCXPRINTF1("DevioceIoControl(IOCTL_SET_PASSTHROUGH) returned %d",
+ GetLastError());
+ MCXPRINTF1("pModemInfo->mi_PortHandle = %d", pModemInfo->mi_PortHandle);
+ ASSERT(0);
+
+ }
+
+ return ;
+
+}
diff --git a/private/unimodem/tapisp/mcxstate.c b/private/unimodem/tapisp/mcxstate.c
new file mode 100644
index 000000000..4d90f64e5
--- /dev/null
+++ b/private/unimodem/tapisp/mcxstate.c
@@ -0,0 +1,4675 @@
+/******************************************************************************
+
+(C) Copyright MICROSOFT Corp., 1987-1994
+
+Rob Williams, June 93 w/ State machine and parser plagarized from RAS
+
+Chris Caputo, 1994 - and superheavily modified since then...
+
+******************************************************************************/
+
+#include "unimdm.h"
+#include "mcxp.h"
+#include "common.h"
+
+#include <ntddmodm.h>
+
+#ifdef VOICEVIEW
+#include "voicview.h"
+int VVSetClass(MODEMINFORMATION *hPort, WORD wClass);
+int VVCallBackFunc(MODEMINFORMATION *hPort, WORD wFunction);
+void VVTimerCallback( void );
+RealMonitor(APIINFO *pInfo);
+
+
+char szMonitorVVon[] = "MonitorVoiceViewOn";
+char szMonitorVVoff[] = "MonitorVoiceViewOff";
+#endif // VOICEVIEW
+
+VOID WINAPI
+HWDetectionRoutine(
+ MODEMINFORMATION * pModemInfo,
+ LPOVERNODE pNode
+ );
+
+void WINAPI
+CancelPendingIoAndPurgeCommBuffers(
+ PMODEMINFORMATION pModemInfo,
+ BOOL Purge
+ );
+
+LPSTR
+CreateDialCommands(
+ MODEMINFORMATION *pModemInfo,
+ LPSTR szPhoneNumber,
+ BOOL *fOriginate,
+ DWORD DialOptions
+ );
+
+
+
+VOID SynchronizeCommConfigSettings(MODEMINFORMATION * pModemInfo,
+ BOOL fUpdateModemSys);
+
+
+//****************************************************************************
+// LONG MCXOpen (LPTSTR, HANDLE, LPTSTR, LPHANDLE, DWORD, DWORD)
+//
+// Function: Open the modem port
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXOpen (LPTSTR szModemName,
+ HANDLE hDevice,
+ LPTSTR szKey,
+ LPHANDLE lph,
+ DWORD dwID,
+ DWORD dwCompletionKey)
+{
+ PMODEMINFORMATION pModemInfo;
+
+ ASSERT(*lph == NULL);
+
+ // Allocate the modeminfo control block
+ //
+ pModemInfo = AllocateModem(szKey, szModemName, hDevice);
+
+ if (pModemInfo != NULL)
+ {
+ // We can get the control block
+ //
+ pModemInfo->mi_PortHandle = hDevice;
+ pModemInfo->mi_dwID = dwID;
+ pModemInfo->mi_dwCompletionKey = dwCompletionKey;
+
+ *lph = (HANDLE)pModemInfo;
+
+ MCXPRINTF("MCXOpen");
+
+ return MODEM_SUCCESS;
+ }
+ else
+ {
+ *lph = NULL;
+ return MODEM_FAILURE;
+ };
+}
+
+//****************************************************************************
+// LONG MCXClose (HANDLE, HANDLE)
+//
+// Function: Close the modem port
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG
+MCXClose(
+ HANDLE hModem,
+ HANDLE hComm,
+ BOOL LineClosed
+ )
+{
+ PMODEMINFORMATION pModemInfo;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXClose");
+
+ // Sets CommMask to 0, waits for any I/O to complete and purges buffers.
+ CancelPendingIoAndPurgeCommBuffers(pModemInfo, TRUE);
+
+ // Reset the modem if it is not connected
+ //
+ if ((pModemInfo->mi_ModemState != STATE_CONNECTED)
+ &&
+ (pModemInfo->mi_pszReset != NULL)
+ &&
+ (!LineClosed))
+ {
+ COMMTIMEOUTS commtimeout;
+ HANDLE hEvent;
+
+ // Set write timeout to one second
+ //
+ commtimeout.ReadIntervalTimeout = 100;
+ commtimeout.ReadTotalTimeoutMultiplier = 10;
+ commtimeout.ReadTotalTimeoutConstant = 5000;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 1000;
+
+ SetCommTimeouts(pModemInfo->mi_PortHandle, &commtimeout);
+
+ if ((hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) != NULL)
+ {
+ DWORD cb;
+ OVERLAPPED ov;
+
+ ov.Internal = 0;
+ ov.InternalHigh = 0;
+ ov.Offset = 0;
+ ov.OffsetHigh = 0;
+
+ // OR with 1 to prevent it from being posted to the completion port.
+ //
+ ov.hEvent = (HANDLE)((DWORD)hEvent | 1);
+
+ MCXPRINTF("Sending Reset string.");
+
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ pModemInfo->mi_pszReset,
+ pModemInfo->mi_dwResetLen,
+ PS_SEND);
+
+ if (FALSE == WriteFile(pModemInfo->mi_PortHandle, pModemInfo->mi_pszReset,
+ pModemInfo->mi_dwResetLen, &cb, &ov))
+ {
+ DWORD dwResult = GetLastError();
+
+ if (ERROR_IO_PENDING == dwResult)
+ {
+ GetOverlappedResult(pModemInfo->mi_PortHandle,
+ &ov,
+ &cb,
+ TRUE);
+ } else {
+
+ MCXPRINTF1("WriteFile() in MCXClose() failed (0x%8x)!", dwResult);
+ cb=0;
+
+ }
+ }
+
+ if (cb == pModemInfo->mi_dwResetLen) {
+ //
+ // wrote the reset string, see if can get a response
+ //
+
+ BYTE ResponseBuffer[20];
+
+ ResetEvent(hEvent);
+
+ if (!ReadFile(
+ pModemInfo->mi_PortHandle,
+ ResponseBuffer,
+ 20,
+ &cb,
+ &ov
+ )) {
+
+
+ if (GetLastError() == ERROR_IO_PENDING) {
+
+ GetOverlappedResult(
+ pModemInfo->mi_PortHandle,
+ &ov,
+ &cb,
+ TRUE
+ );
+ }
+
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ ResponseBuffer,
+ cb,
+ PS_RECV
+ );
+
+ }
+
+ } else {
+
+ MCXPRINTF1("WriteFile() in MCXClose() only wrote %d bytes!",
+ cb);
+ }
+
+ CloseHandle(hEvent);
+ }
+
+ SetCommMask(
+ pModemInfo->mi_PortHandle,
+ 0
+ );
+
+ PurgeComm(
+ pModemInfo->mi_PortHandle,
+ PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR
+ );
+
+
+ }
+
+ if (pModemInfo->mi_CompatibilityFlags & COMPAT_FLAG_LOWER_DTR) {
+ //
+ // For USR 33.6 modem that stop working after being open and closed
+ //
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+
+ Sleep(50);
+ }
+
+
+ ASSERT(pModemInfo->mi_lpOverlappedRW == NULL);
+ ASSERT(pModemInfo->mi_lpOverlappedEvent == NULL);
+
+ // Free the modem control block
+ //
+ FreeModem(pModemInfo, hComm);
+ return MODEM_SUCCESS;
+}
+
+//****************************************************************************
+// LONG MCXInit (HANDLE, HANDLE)
+//
+// Function: Initializes the modem port
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if operation is pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXInit(HANDLE hModem, MCX_IN *pmcxi)
+{
+ PMODEMINFORMATION pModemInfo;
+ LPSTR pszzCmdInMem1, pszzCmdInMem2;
+ DWORD dwRet = MODEM_FAILURE;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXInit");
+
+ if (pModemInfo->mi_ModemState == STATE_UNKNOWN ||
+ pModemInfo->mi_ModemState == STATE_DISCONNECTED ||
+ pModemInfo->mi_ModemState == STATE_MONITORING)
+ {
+#ifdef VOICEVIEW
+ VVSetClass( pModemInfo, VVCLASS_0 ); // verify modem is in correct fclass
+#endif // VOICEVIEW
+
+ pModemInfo->mi_dwNegotiatedModemOptions = 0;
+ pModemInfo->mi_dwNegotiatedDCERate = 0;
+ pModemInfo->mi_dwNegotiatedDTERate = 0;
+
+ // Get the current comm config modem settings from modem.sys and set
+ // the current DCE rate and modem options. Also, fSettingsInitStringsBuilt
+ // will be set appropriately.
+ //
+ SynchronizeCommConfigSettings(pModemInfo,
+ TRUE);
+
+ if (pszzCmdInMem1 = GetCommonCommandStringCopy(pModemInfo->mi_hCommon,
+ COMMON_INIT_COMMANDS))
+ {
+ MCXPRINTF("Initializing modem...");
+ if (pModemInfo->mi_fSettingsInitStringsBuilt == FALSE)
+ {
+ MCXPRINTF("building SettingsInit.");
+ if (!CreateSettingsInitEntry(pModemInfo))
+ {
+ // only catastrophic if it is a modem
+ //
+ if (pModemInfo->mi_fModem)
+ {
+ MCXPRINTF("CreateSettingsInitEntry failed!!!");
+ LogString(pModemInfo->mi_hLogFile, pModemInfo->mi_dwID,
+ IDS_MSGERR_FAILED_INITSTRINGCONSTRUCTION);
+ LocalFree(pszzCmdInMem1);
+ goto Failure;
+ }
+ }
+ pModemInfo->mi_fSettingsInitStringsBuilt = TRUE;
+ }
+ else
+ {
+ MCXPRINTF("using cached SettingsInit.");
+ }
+
+ if (pszzCmdInMem2 = LoadRegCommands(pModemInfo, szSettingsInit,
+ pszzCmdInMem1))
+ {
+ pModemInfo->mi_ModemState = STATE_INITIALIZING;
+ MCXPRINTF("State <- Initializing");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,IDS_MSGLOG_INIT);
+ dwRet = ModemCommand(pModemInfo, pmcxi->dwReqID,
+ pmcxi->pMcxOut, pszzCmdInMem2);
+ };
+
+ // Free the first buffer
+ //
+ LocalFree(pszzCmdInMem1);
+ }
+ }
+
+ if (MODEM_FAILURE == dwRet)
+ {
+Failure:
+ MCXPRINTF("Init failed.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_INIT);
+ }
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXDial (HANDLE, LPSTR, HANDLE)
+//
+// Function: Dials the modem with the provided number. The number could be in
+// the following formats:
+// "" - originate
+// ";" - dialtone detection
+// "5551212" - dial and originate
+// "5551212;" - dial
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if operation is pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG
+MCXDial(
+ HANDLE hModem,
+ LPSTR szData,
+ MCX_IN *pmcxi,
+ DWORD DialOptions
+ )
+{
+ PMODEMINFORMATION pModemInfo;
+ LPSTR pszzCmdInMem;
+ DWORD dwRet = MODEM_FAILURE;
+ BOOL fOriginate;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXDial");
+
+ if (pModemInfo->mi_ModemState == STATE_DISCONNECTED ||
+ pModemInfo->mi_ModemState == STATE_MONITORING ||
+ pModemInfo->mi_ModemState == STATE_DIALED)
+ {
+#ifdef VOICEVIEW
+ VVSetClass( pModemInfo, VVCLASS_0 ); // verify modem is in correct fclass
+#endif // VOICEVIEW
+
+ MCXPRINTF("building dial strings...");
+
+ // build dial commands in memory (as opposed to the registry)
+ //
+ if (pszzCmdInMem = CreateDialCommands(pModemInfo, szData, &fOriginate, DialOptions))
+ {
+ MCXPRINTF("Dialing...");
+ pModemInfo->mi_ModemState = fOriginate ? STATE_ORIGINATING : STATE_DIALING;
+
+
+ if (fOriginate)
+ {
+ MCXPRINTF("State <- Dialing and Originating");
+ }
+ else
+ {
+ MCXPRINTF("State <- Dialing");
+ }
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_DIAL);
+ dwRet = ModemCommand(pModemInfo, pmcxi->dwReqID,
+ pmcxi->pMcxOut, pszzCmdInMem);
+ }
+ else
+ {
+ MCXPRINTF("couldn't build dial strings...");
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_DIALSTRINGCONSTRUCTION, szData);
+ }
+ }
+
+ if (MODEM_FAILURE == dwRet)
+ {
+ MCXPRINTF("Dial failed.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_DIAL);
+ }
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXMonitor (HANDLE, DWORD, HANDLE)
+//
+// Function: initializes the modem to monitor the incoming call
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if operation is pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXMonitor(HANDLE hModem, DWORD dwType, MCX_IN *pmcxi)
+{
+#ifdef VOICEVIEW
+ MCXPRINTF("MCXMonitoring...-go to fclass80");
+ VVSetClass( pInfo->hPort, VVCLASS_80 ); // verify modem is in correct fclass
+ return( RealMonitor(pInfo));
+}
+
+LONG RealMonitor(HANDLE hModem, DWORD dwType, HANDLE hEvent)
+{
+#endif // VOICEVIEW
+ PMODEMINFORMATION pModemInfo;
+ LPSTR pszzCmdInMem;
+// LPSTR pszMonitorKey = szMonitor; // default reg key
+ DWORD dwRet = MODEM_FAILURE;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXMonitor");
+
+ if (pModemInfo->mi_ModemState == STATE_DISCONNECTED ||
+ pModemInfo->mi_ModemState == STATE_MONITORING)
+ {
+#ifdef VOICEVIEW
+ if ( pModemInfo->VVInfo.wState != VVSTATE_NONE )
+ {
+ // only enabled when voiceview is waiting for stuff
+ // use the commands to set the modem into fclass80 (voiceview)
+ // or use the commands to set default fclass0
+ if ( pModemInfo->VVInfo.wClass == VVCLASS_80 )
+ {
+ pszMonitorKey = szMonitorVVon;
+ // we will tell VV can use the port after the OK
+ }
+ else
+ {
+ pszMonitorKey = szMonitorVVoff;
+ VVCallBackFunc( pModemInfo, VVR_LINE_GONE ); // tell VV CAN'T use port
+ }
+ }
+#endif // VOICEVIEW
+
+ if (pszzCmdInMem = GetCommonCommandStringCopy(pModemInfo->mi_hCommon,
+ COMMON_MONITOR_COMMANDS))
+ {
+ MCXPRINTF("Monitoring...");
+ pModemInfo->mi_ModemState = STATE_MONITORING;
+ MCXPRINTF("State <- Monitoring");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_MONITOR);
+
+ // does the caller want continuous monitoring?
+ //
+ pModemInfo->mi_fContinuousMonitoring = dwType;
+ dwRet = ModemCommand(pModemInfo, pmcxi->dwReqID,
+ pmcxi->pMcxOut, pszzCmdInMem);
+ }
+ }
+
+ if (MODEM_FAILURE == dwRet)
+ {
+ MCXPRINTF("Monitor failed.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_MONITOR);
+ }
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXAnswer (HANDLE, HANDLE)
+//
+// Function: Answers the incoming call
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if operation is pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXAnswer(HANDLE hModem, MCX_IN *pmcxi)
+{
+ PMODEMINFORMATION pModemInfo;
+ LPSTR pszzCmdInMem;
+ DWORD dwRet = MODEM_FAILURE;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXAnswer");
+
+ if (pModemInfo->mi_ModemState == STATE_DISCONNECTED ||
+ pModemInfo->mi_ModemState == STATE_MONITORING ||
+ pModemInfo->mi_ModemState == STATE_DIALED)
+ {
+#ifdef VOICEVIEW
+ VVSetClass( pModemInfo, VVCLASS_0 ); // verify modem is in correct fclass
+#endif // VOICEVIEW
+
+ if (pszzCmdInMem = GetCommonCommandStringCopy(pModemInfo->mi_hCommon, COMMON_ANSWER_COMMANDS))
+ {
+ MCXPRINTF("Answering...");
+ pModemInfo->mi_ModemState = STATE_ANSWERING;
+ MCXPRINTF("State <- Answering");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_ANSWER);
+ dwRet = ModemCommand(pModemInfo, pmcxi->dwReqID,
+ pmcxi->pMcxOut, pszzCmdInMem);
+ }
+ }
+
+ if (MODEM_FAILURE == dwRet)
+ {
+ MCXPRINTF("Answer failed.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_ANSWER);
+ }
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXHangup (HANDLE, HANDLE)
+//
+// Function: hangs up the modem
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_PENDING if operation is pending
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXHangup(HANDLE hModem, MCX_IN *pmcxi)
+{
+ PMODEMINFORMATION pModemInfo;
+ DWORD dwTmp;
+ ULONG ulError;
+ DWORD dwRet = MODEM_FAILURE;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXHangup");
+
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_HANGUP);
+ MCXPRINTF("Hanging up...");
+
+ // Since a hangup was requested, make sure we always return MODEM_SUCCESS
+ // when we complete the hangup.
+ // (Note: this even applies to STATE_HANGING_UP_REMOTE!)
+ //
+ pModemInfo->mi_dwUnconditionalReturnValue = MODEM_SUCCESS;
+
+ pModemInfo->mi_DisconnectHandler=NULL;
+
+
+ // Handle hangup requests for when we are already hanging up by returning PENDING
+ //
+ if (STATE_HANGING_UP_REMOTE == pModemInfo->mi_ModemState ||
+ STATE_HANGING_UP_DTR == pModemInfo->mi_ModemState ||
+ STATE_HANGING_UP_NON_CMD == pModemInfo->mi_ModemState ||
+ STATE_HANGING_UP_CMD == pModemInfo->mi_ModemState)
+ {
+ MCXPRINTF("received a hang up request while already hanging up. Returning PENDING...");
+
+ pModemInfo->mi_ReqID = pmcxi->dwReqID;
+ pModemInfo->mi_pmcxo = pmcxi->pMcxOut;
+
+ return MODEM_PENDING;
+ }
+
+ // Flush the port and close all of the gates!
+ //
+ //
+ ModemSetPassthrough(pModemInfo, MODEM_NOPASSTHROUGH);
+
+ // Sets CommMask to 0, waits for any I/O to complete and purges buffers.
+ CancelPendingIoAndPurgeCommBuffers(
+ pModemInfo,
+ (pModemInfo->mi_ModemState != STATE_REMOTE_DROPPED)
+ );
+
+ // Make sure RTS is high.
+ EscapeCommFunction(pModemInfo->mi_PortHandle, SETRTS);
+
+ // Free the current cmd if one exists
+ if (pModemInfo->mi_pszzCmds)
+ {
+ if (pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+ pModemInfo->mi_pszzCmds = NULL;
+ }
+
+ // Reset hangup counter to 1.
+ //
+ pModemInfo->mi_dwHangupTryCount = 1;
+
+ switch (pModemInfo->mi_ModemState)
+ {
+ case STATE_DIALED:
+ //
+ // need to send "ATH<cr>"
+ //
+ MCXPRINTF("State <- Hanging up cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_CMD;
+ dwRet = ModemCommand(pModemInfo, pmcxi->dwReqID,
+ pmcxi->pMcxOut, pModemInfo->mi_pszzHangupCmds);
+ break;
+
+
+
+ case STATE_DIALING:
+ case STATE_ANSWERING:
+ case STATE_ORIGINATING:
+// case STATE_INITIALIZING:
+ if (pModemInfo->mi_fModem)
+ {
+ // send a character to cancel the call/answer
+ // don't need to #define \r because modems only care about it being a character,
+ // not a specific one.
+ //
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ "\r",
+ 1,
+ PS_SEND);
+ dwRet = ModemWrite(pModemInfo, "\r", 1, &dwTmp, TO_FLUSH);
+ if (dwRet == MODEM_FAILURE)
+ {
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("WriteComm Error. State <- Unknown");
+ }
+ else
+ {
+ pModemInfo->mi_ReqID = pmcxi->dwReqID;
+ pModemInfo->mi_pmcxo = pmcxi->pMcxOut;
+
+ pModemInfo->mi_RcvState = FLUSH_WRITE_QUEUE;
+
+ // Initialize receive state machine
+ //
+ MCXPRINTF("State <- Hanging up non-cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_NON_CMD;
+ dwRet = MODEM_PENDING;
+ }
+ }
+ else
+ {
+ // nothing to do for null-modems
+ //
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ dwRet = MODEM_SUCCESS;
+ }
+ break;
+
+ case STATE_WAIT_FOR_RLSD:
+ case STATE_CONNECTED:
+ //
+ // Drop the DTR line
+ //
+ MCXPRINTF("lowering DTR");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_HARDWAREHANGUP);
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+
+ pModemInfo->mi_ReqID = pmcxi->dwReqID;
+ pModemInfo->mi_pmcxo = pmcxi->pMcxOut;
+
+ MCXPRINTF("State <- Hanging up dtr");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_DTR;
+
+ // Initialize receive state machine
+ //
+ pModemInfo->mi_RcvState = SET_TIMEOUT;
+
+ ReadCompletionRoutine2(pModemInfo);
+
+ dwRet = MODEM_PENDING;
+ break;
+
+ case STATE_INITIALIZING:
+ case STATE_MONITORING:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ dwRet = MODEM_SUCCESS;
+ break;
+
+ case STATE_UNKNOWN:
+ case STATE_DISCONNECTED:
+ // no need to change state
+ //
+ dwRet = MODEM_SUCCESS;
+ break;
+
+ case STATE_REMOTE_DROPPED:
+
+ pModemInfo->mi_ReqID = pmcxi->dwReqID;
+ pModemInfo->mi_pmcxo = pmcxi->pMcxOut;
+
+ pModemInfo->mi_ModemState=STATE_HANGING_UP_REMOTE;
+
+ pModemInfo->mi_RcvState = START_READ;
+ ReadCompletionRoutine2(pModemInfo);
+
+ dwRet = MODEM_PENDING;
+
+ break;
+
+// case STATE_HANGING_UP_REMOTE:
+// case STATE_HANGING_UP_DTR:
+// case STATE_HANGING_UP_NON_CMD:
+// case STATE_HANGING_UP_CMD:
+ default:
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("being hung up at a non-standard time. Why??? State <- Unknown");
+ dwRet = MODEM_SUCCESS;
+ break;
+ } // switch
+
+ ClearCommError(pModemInfo->mi_PortHandle, &ulError, NULL);
+
+ if (MODEM_FAILURE == dwRet)
+ {
+ MCXPRINTF("hangup failed.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_HANGUP);
+ }
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXGetCommConfig (HANDLE, LPCOMMCONFIG, LPDWORD)
+//
+// Function: Gets modem config
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXGetCommConfig (HANDLE hModem, LPCOMMCONFIG lpCommConfig, LPDWORD lpcb)
+{
+ return GetCommConfig(((PMODEMINFORMATION)hModem)->mi_PortHandle,
+ lpCommConfig,
+ lpcb)
+ ? MODEM_SUCCESS
+ : MODEM_FAILURE;
+}
+
+//****************************************************************************
+// LONG MCXSetCommConfig (HANDLE, LPCOMMCONFIG, DWORD)
+//
+// Function: Sets modem config
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXSetCommConfig (HANDLE hModem, LPCOMMCONFIG lpCommConfig, DWORD cb)
+{
+ PMODEMINFORMATION pModemInfo = (PMODEMINFORMATION)hModem;
+ BOOL fRet;
+
+
+ LPMODEMSETTINGS lpMS;
+
+ lpMS = (LPMODEMSETTINGS)((LPBYTE)lpCommConfig
+ + lpCommConfig->dwProviderOffset);
+
+
+ if (lpMS->dwPreferredModemOptions & MDM_FLOWCONTROL_HARD) {
+
+ DPRINTF("McxSetCommConfig: enabling rts/cts control in DCB.");
+
+ lpCommConfig->dcb.fOutxCtsFlow=1;
+ lpCommConfig->dcb.fRtsControl=RTS_CONTROL_HANDSHAKE;
+
+ lpCommConfig->dcb.fOutX=FALSE;
+ lpCommConfig->dcb.fInX=FALSE;
+
+ } else {
+
+ lpCommConfig->dcb.fOutxCtsFlow=0;
+ lpCommConfig->dcb.fRtsControl=RTS_CONTROL_ENABLE;
+ }
+
+
+
+
+ fRet = SetCommConfig(pModemInfo->mi_PortHandle,
+ lpCommConfig,
+ cb);
+
+ if (fRet == TRUE)
+ {
+ PrintCommSettings(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ &lpCommConfig->dcb);
+
+ // Set DTR so modems will talk to us.
+ //
+ if (EscapeCommFunction(pModemInfo->mi_PortHandle, SETDTR) == FALSE)
+ {
+ DPRINTF("EscapeCommFunction SETDTR in SetCommConfig failed.");
+ return MODEM_FAILURE;
+ }
+
+ // Set RTS initially to high, so modems will talk to us. This is important
+ // even if we aren't doing HW flow control. (ex. USR Sportster 14,400,
+ // Microcom Desporte FAST)
+ // Of course, it won't help the case where we have one of these modems and
+ // only 3 wires.
+ //
+ if (EscapeCommFunction(pModemInfo->mi_PortHandle, SETRTS) == FALSE)
+ {
+ DPRINTF("EscapeCommFunction SETRTS in SetCommConfig failed.");
+ //
+ // BUGBUG: this call fails on the digiboard, preventing the lower code
+ // BUGBUG: from running.
+ // BUGBUG: nothing that calls this function bothers to check the return
+ // BUGBUG: code anyway
+ //
+ //return MODEM_FAILURE;
+ }
+
+ // Synchronize with modem.sys
+ SynchronizeCommConfigSettings(pModemInfo,
+ FALSE);
+ }
+
+ return fRet ? MODEM_SUCCESS : MODEM_FAILURE;
+}
+
+
+LONG WINAPI
+MCXSetModemSettings(
+ HANDLE hModem,
+ PMODEMSETTINGS lpMS
+ )
+
+{
+ PMODEMINFORMATION pModemInfo = (PMODEMINFORMATION)hModem;
+
+
+ // Need to rebuild init string?
+ //
+ if (pModemInfo->mi_dwCallSetupFailTimerSetting != lpMS->dwCallSetupFailTimer
+ || pModemInfo->mi_dwInactivityTimeoutSetting != lpMS->dwInactivityTimeout
+ || pModemInfo->mi_dwSpeakerVolumeSetting != lpMS->dwSpeakerVolume
+ || pModemInfo->mi_dwSpeakerModeSetting != lpMS->dwSpeakerMode
+ || pModemInfo->mi_dwPreferredModemOptions != lpMS->dwPreferredModemOptions)
+ {
+ pModemInfo->mi_fSettingsInitStringsBuilt = FALSE;
+ }
+
+ pModemInfo->mi_dwCallSetupFailTimerSetting =
+ lpMS->dwCallSetupFailTimer;
+
+ pModemInfo->mi_dwInactivityTimeoutSetting =
+ lpMS->dwInactivityTimeout;
+
+ pModemInfo->mi_dwSpeakerVolumeSetting =
+ lpMS->dwSpeakerVolume;
+
+ pModemInfo->mi_dwSpeakerModeSetting =
+ lpMS->dwSpeakerMode;
+
+ pModemInfo->mi_dwPreferredModemOptions =
+ lpMS->dwPreferredModemOptions;
+
+
+ return MODEM_SUCCESS;
+
+}
+
+
+
+
+
+//****************************************************************************
+// LONG MCXSetPassthrough (HANDLE, DWORD)
+//
+// Function: Sets modem passthrough modes
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXSetPassthrough(HANDLE hModem, DWORD dwType)
+{
+ PMODEMINFORMATION pModemInfo;
+ ULONG ulError;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("MCXSetPassthrough");
+
+ // Clear any outstanding timer callbacks
+ //
+ //;ClearReadTimer(pModemInfo);
+
+ // Determine Passthrough enabled/disabled/disabled and connected
+ //
+ switch(dwType)
+ {
+ case PASSTHROUGH_ON:
+ MCXPRINTF("Passthrough ON...");
+
+ CancelPendingIoAndPurgeCommBuffers(pModemInfo, TRUE);
+
+ // Put the port in the connected state
+ //
+ pModemInfo->mi_ModemState = STATE_CONNECTED;
+
+ ModemSetPassthrough(pModemInfo, MODEM_PASSTHROUGH);
+ break;
+
+ case PASSTHROUGH_OFF:
+ MCXPRINTF("Passthrough OFF...");
+
+
+ // Take the port out of connected state
+ //
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+
+ ModemSetPassthrough(pModemInfo, MODEM_NOPASSTHROUGH);
+ break;
+
+ case PASSTHROUGH_OFF_BUT_CONNECTED:
+ MCXPRINTF("Passthrough OFF (but connected)...");
+
+ ModemSetPassthrough(pModemInfo, MODEM_DCDSNIFF);
+ break;
+ }
+ return MODEM_SUCCESS;
+}
+
+//****************************************************************************
+// LONG MCXGetNegotiatedRate (HANDLE, LPDWORD)
+//
+// Function: Gets the modem connection speed
+//
+// Returns: MODEM_SUCCESS if success
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG MCXGetNegotiatedRate(HANDLE hModem, LPDWORD lpdwRate)
+{
+ PMODEMINFORMATION pModemInfo;
+ DWORD dwRet;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ if (STATE_CONNECTED == pModemInfo->mi_ModemState)
+ {
+ *lpdwRate = pModemInfo->mi_dwNegotiatedDCERate;
+ dwRet = MODEM_SUCCESS;
+ }
+ else
+ {
+ *lpdwRate = 0;
+ MCXPRINTF("GetNegotiatedRate failed.");
+ dwRet = MODEM_FAILURE;
+ }
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG MCXRegisterDisconneectHandler(HANDLE, MCX_IN *)
+//
+// Function: Start monitoring remote disconnection
+//
+// Returns: MODEM_PENDING if start successfully
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG WINAPI
+McxRegisterDisconectHandler(
+ HANDLE hModem,
+ DISCONNECT_HANDLER Handler,
+ HANDLE Context
+ )
+
+{
+ PMODEMINFORMATION pModemInfo;
+ DWORD dwRet;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("McxRegisterDisconnectHandler:");
+
+ pModemInfo->mi_DisconnectHandler=Handler;
+ pModemInfo->mi_DisconnectContext=Context;
+
+ dwRet = ModemWaitEvent(pModemInfo, EV_DSR | EV_RLSD, 0);
+
+ return dwRet;
+
+}
+
+
+//****************************************************************************
+// LONG MCXDeregisterDisconneectHandler(HANDLE, MCX_IN *)
+//
+// Function: Stop monitoring remote disconnection
+//
+// Returns: MODEM_PENDING if start successfully
+// MODEM_FAILURE if fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG WINAPI
+McxDeregisterDisconnectHandler(
+ HANDLE hModem
+ )
+
+{
+ PMODEMINFORMATION pModemInfo;
+
+ pModemInfo = (PMODEMINFORMATION)hModem;
+
+ MCXPRINTF("McxDeregisterDisconnectHandler:");
+
+ pModemInfo->mi_DisconnectHandler=NULL;
+ pModemInfo->mi_DisconnectContext=NULL;
+
+ return MODEM_SUCCESS;
+}
+
+//****************************************************************************
+// void MCXAsyncComplete (HANDLE, LPOVERLAPPED)
+//
+// Function: Completes an async operation
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************/
+
+void MCXAsyncComplete (HANDLE hModem, LPOVERLAPPED lpOverlapped)
+{
+ PMODEMINFORMATION pModemInfo = (PMODEMINFORMATION)hModem;
+ LPOVERNODE pNode = (LPOVERNODE)lpOverlapped;
+
+ ASSERT(lpOverlapped != NULL);
+
+ if (pNode->Type == OVERNODE_TYPE_READWRITE) {
+ //
+ // it's a read/write op
+ //
+ if (pNode->dwToken == pModemInfo->mi_dwRWIOExpected) {
+ //
+ // It the one we wanted
+ //
+ MCXPRINTF1("MCXAsyncComplete() handling RW i/o. # %d",pNode->dwToken);
+
+ pModemInfo->mi_dwRWIOExpected++;
+
+ ReadCompletionRoutine2(pModemInfo);
+
+ } else {
+
+ MCXPRINTF1("MCXAsyncComplete() ignoring old RW i/o. # %d",pNode->dwToken);
+ }
+
+ } else {
+
+ if (pNode->Type == OVERNODE_TYPE_COMMEVENT) {
+ //
+ // WaitCommEvent completion
+ //
+ if (pNode->dwToken == pModemInfo->mi_dwEventIOExpected) {
+
+ MCXPRINTF2("MCXAsyncComplete() handling Event i/o, # %d, %08lx.",pNode->dwToken, pNode);
+
+ pModemInfo->mi_dwEventIOExpected++;
+
+ HWDetectionRoutine(pModemInfo, pNode);
+
+ } else {
+
+ MCXPRINTF2("MCXAsyncComplete() ignoring old Event i/o, # %d, %08lx.",pNode->dwToken, pNode);
+ }
+
+ } else {
+
+ if (pNode->Type == OVERNODE_TYPE_WORKITEM) {
+
+ if (pNode->dwToken == pModemInfo->mi_dwDeferedExpected) {
+
+ pModemInfo->mi_dwDeferedExpected++;
+
+ MCXPRINTF1("MCXAsyncComplete() handling defered work item # %d.",pNode->dwToken);
+
+ ReadCompletionRoutine2(pModemInfo);
+
+ } else {
+
+ MCXPRINTF1("MCXAsyncComplete() ignoring old defered work item # %d.",pNode->dwToken);
+ }
+
+ } else {
+ //
+ // unknown io type
+ //
+ ASSERT(0);
+
+ }
+ }
+ }
+
+ return;
+}
+
+//****************************************************************************
+// void ModemCallClient ()
+//
+// Function: Completes an async operation
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+void ModemCallClient (MODEMINFORMATION * pModemInfo, DWORD Param)
+{
+ MCX_OUT *pMcxOut;
+
+ MCXPRINTF1("ModemCallClient: %d",Param);
+
+ // There must be an output buffer
+ //
+ if ((pMcxOut = pModemInfo->mi_pmcxo) != NULL)
+ {
+ pMcxOut->dwReqID = pModemInfo->mi_ReqID;
+
+ if (pModemInfo->mi_dwUnconditionalReturnValue == MODEM_NO_UNCONDITIONAL)
+ {
+ pMcxOut->dwResult= Param;
+ }
+ else
+ {
+ pMcxOut->dwResult= pModemInfo->mi_dwUnconditionalReturnValue;
+ };
+ pModemInfo->mi_dwUnconditionalReturnValue = MODEM_NO_UNCONDITIONAL;
+
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ pModemInfo->mi_dwCompletionKey,
+ NULL);
+ };
+ return;
+}
+
+//****************************************************************************
+// void ReadNotifyClient(MODEMINFORMATION *, DWORD)
+//
+// Function: The modem's state machine
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+void ReadNotifyClient(MODEMINFORMATION * pModemInfo, DWORD Param)
+{
+ ULONG ulError;
+
+ pModemInfo->mi_RcvState = END_READ;
+
+ switch (pModemInfo->mi_ModemState)
+ {
+ case STATE_DIALING:
+ switch (Param)
+ {
+ case MODEM_SUCCESS:
+ pModemInfo->mi_ModemState = STATE_DIALED;
+ MCXPRINTF("State <- Dialed");
+ break;
+
+ case MODEM_BUSY:
+ case MODEM_NOANSWER:
+ case MODEM_NOCARRIER:
+ case MODEM_NODIALTONE:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ break;
+
+ default:
+ Param = MODEM_FAILURE;
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ break;
+ } // switch (Param)
+ break;
+
+ case STATE_WAIT_FOR_RLSD:
+ //
+ // fall through
+ //
+
+
+ case STATE_ORIGINATING:
+ case STATE_ANSWERING:
+ switch (Param)
+ {
+ case MODEM_SUCCESS:
+
+ if (pModemInfo->mi_fModem && (pModemInfo->mi_ModemState != STATE_WAIT_FOR_RLSD)) {
+ //
+ // real mode and we are not already waiting
+ //
+
+ DWORD dwStat;
+ DWORD dwRet;
+
+ GetCommModemStatus(pModemInfo->mi_PortHandle, &dwStat);
+
+ //
+ // does it look like the modem is connected
+ //
+ if (!(dwStat & MS_RLSD_ON)) {
+ //
+ // got connect, but rlsd not high
+ //
+ MCXPRINTF("Got Connect, but rlsd is low, waiting");
+
+ pModemInfo->mi_ModemState=STATE_WAIT_FOR_RLSD;
+
+ dwRet=ModemWaitEvent(pModemInfo, EV_RLSD, pModemInfo->mi_dwWaitForCDTime);
+
+ if (dwRet == MODEM_PENDING) {
+
+ return;
+ }
+ }
+ }
+
+
+ pModemInfo->mi_ModemState = STATE_CONNECTED;
+ MCXPRINTF("State <- Connected");
+
+ // do we need to adjust the dwNegotiatedDCERate?
+ //
+ if (pModemInfo->mi_dwNegotiatedDCERate == 0)
+ {
+ DCB Dcb;
+
+ // get the DCB
+ //
+ if (!GetCommState(pModemInfo->mi_PortHandle, &Dcb))
+ {
+ MCXPRINTF("was unable to get the comm state!");
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ Param = MODEM_FAILURE;
+ break;
+ }
+
+ // Did we have any DTE rate info reported
+ //
+ if (pModemInfo->mi_dwNegotiatedDTERate)
+ {
+ // Yes, use it.
+ //
+ pModemInfo->mi_dwNegotiatedDCERate = pModemInfo->mi_dwNegotiatedDTERate;
+
+ if (pModemInfo->mi_dwNegotiatedDTERate != Dcb.BaudRate)
+ {
+ // set DCB
+ //
+ MCXPRINTF("adjusting DTE to match reported DTE");
+ Dcb.BaudRate = pModemInfo->mi_dwNegotiatedDTERate;
+ PrintCommSettings(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,&Dcb);
+ if (!SetCommState(pModemInfo->mi_PortHandle, &Dcb))
+ {
+ MCXPRINTF("was unable to set the comm state!");
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ Param = MODEM_FAILURE;
+ break;
+ }
+ }
+ }
+ else
+ {
+ // No, use the current DTE baud rate
+ //
+ MCXPRINTF("using current DTE");
+ pModemInfo->mi_dwNegotiatedDCERate = Dcb.BaudRate;
+ }
+ }
+
+
+ if (pModemInfo->mi_dwNegotiatedDCERate)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_CONNECTEDBPS, pModemInfo->mi_dwNegotiatedDCERate);
+ }
+ else
+ {
+ if (pModemInfo->mi_dwNegotiatedDTERate)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_CONNECTEDBPS, pModemInfo->mi_dwNegotiatedDTERate);
+ }
+ else
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_CONNECTED);
+ }
+ }
+
+ if (pModemInfo->mi_dwNegotiatedModemOptions & MDM_ERROR_CONTROL)
+ {
+ if (pModemInfo->mi_dwNegotiatedModemOptions & MDM_CELLULAR)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_CELLULAR);
+ }
+ else
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_ERRORCONTROL);
+ }
+ }
+ else
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_UNKNOWNERRORCONTROL);
+ }
+
+ if (pModemInfo->mi_dwNegotiatedModemOptions & MDM_COMPRESSION)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_COMPRESSION);
+ }
+ else
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_UNKNOWNCOMPRESSION);
+ }
+
+ MCXPRINTF1("Negotiated DCE is %d bits per second.", pModemInfo->mi_dwNegotiatedDCERate);
+ MCXPRINTF1("Error Correction is %s.",
+ pModemInfo->mi_dwNegotiatedModemOptions & MDM_ERROR_CONTROL ?
+ (pModemInfo->mi_dwNegotiatedModemOptions & MDM_CELLULAR ? "CELLULAR" : "ON") :
+ "OFF");
+ MCXPRINTF1("Data Compression is %s.",
+ pModemInfo->mi_dwNegotiatedModemOptions & MDM_COMPRESSION ? "ON" : "OFF");
+
+ if (pModemInfo->mi_hLogFile)
+ FlushLog(pModemInfo->mi_hLogFile);
+
+ // Send down the negotiated parts of MODEMSETTINGS struct to
+ // modem.sys.
+ SynchronizeCommConfigSettings(pModemInfo,
+ TRUE);
+ break;
+
+ case MODEM_BUSY:
+ case MODEM_NOANSWER:
+ case MODEM_NOCARRIER:
+ case MODEM_NODIALTONE:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ break;
+
+ default:
+ Param = MODEM_FAILURE;
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ break;
+ } // switch (Param)
+ break;
+
+ case STATE_INITIALIZING:
+ switch (Param)
+ {
+ case MODEM_SUCCESS:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ break;
+
+ case MODEM_BUSY:
+ case MODEM_NOANSWER:
+ case MODEM_NOCARRIER:
+ case MODEM_NODIALTONE:
+ if (pModemInfo->mi_dwCommandTryCount < MAX_COMMAND_TRIES)
+ {
+ pModemInfo->mi_dwCommandTryCount++;
+
+ MCXPRINTF("received an unanticipated response. Retrying previous command...");
+ pModemInfo->mi_pszCurCmd = pModemInfo->mi_pszPrevCmd;
+
+ switch(ModemWriteCommand(pModemInfo))
+ {
+ case MODEM_PENDING:
+ return;
+
+ case MODEM_SUCCESS:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ break;
+
+ case MODEM_FAILURE:
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ break;
+
+ default:
+ MCXPRINTF("hit a default in ReadNotifyClient (STATE_INITIALIZING)! BAD!");
+ break;
+ }
+ break;
+ }
+ else
+ {
+ MCXPRINTF("gave up trying to do the command.");
+ }
+ // FALLTHROUGH...
+
+ default:
+ Param = MODEM_FAILURE;
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ break;
+ }
+ break;
+
+
+ case STATE_HANGING_UP_REMOTE:
+ switch (Param)
+ {
+ case MODEM_SUCCESS:
+ case MODEM_BUSY:
+ case MODEM_NOANSWER:
+ case MODEM_NOCARRIER:
+ case MODEM_NODIALTONE:
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ break;
+ default:
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ break;
+ }
+ // Set HIWORD to MDM_ID_NULL to indicate this was an unexpected message
+ //
+ Param = MODEM_SUCCESS; // inform the app of the hangup, not matter what
+ break;
+
+ case STATE_HANGING_UP_DTR:
+ {
+ DWORD dwStat = 0;
+
+ // Did RLSD or DSR go down?
+ //
+ GetCommModemStatus(pModemInfo->mi_PortHandle, &dwStat);
+ if (dwStat & MS_RLSD_ON && dwStat & MS_DSR_ON)
+ {
+ // nope, RLSD/RSD are both high
+ //
+ if (pModemInfo->mi_fModem)
+ {
+ static char cszEscapeSequence[] = MODEM_ESCAPE_SEQUENCE;
+ DWORD dwTmp;
+ DWORD dwRet;
+
+ MCXPRINTF("DTR droppage failed to hangup modem. Trying '+++'");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGWARN_FAILEDDTRDROPPAGE);
+
+ // send "+++"
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ cszEscapeSequence,
+ MODEM_ESCAPE_SEQUENCE_LEN,
+ PS_SEND);
+ dwRet = ModemWrite(pModemInfo, cszEscapeSequence,
+ MODEM_ESCAPE_SEQUENCE_LEN, &dwTmp, TO_FLUSH);
+ if (dwRet == MODEM_FAILURE)
+ {
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("WriteComm Error. State <- Unknown");
+ Param = MODEM_FAILURE;
+ }
+ else
+ {
+ pModemInfo->mi_RcvState = FLUSH_WRITE_QUEUE;
+
+ // Initialize receive state machine
+ //
+ MCXPRINTF("State <- Hanging up non-cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_NON_CMD;
+ return;
+ }
+ }
+ else
+ {
+ // only try once to hangup a null-modem connection
+ MCXPRINTF("failed to hangup the null-modem connection!");
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ Param = MODEM_FAILURE;
+ }
+ }
+ else
+ {
+ // yep, RLSD and/or DSR went low
+ // Raise DTR line
+ //
+ MCXPRINTF("raising DTR");
+ EscapeCommFunction(pModemInfo->mi_PortHandle, SETDTR);
+ if (pModemInfo->mi_fModem)
+ {
+ // Initialize receive state machine
+ pModemInfo->mi_RcvState = START_READ;
+ MCXPRINTF("State <- Hanging up non-cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_NON_CMD;
+ ReadCompletionRoutine2(pModemInfo);
+ return;
+ }
+ else
+ {
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ Param = MODEM_SUCCESS;
+ }
+ }
+ break;
+ }
+ case STATE_HANGING_UP_NON_CMD:
+ if (MODEM_FAILURE != Param)
+ {
+ // need to send "ATH<cr>"
+ MCXPRINTF("State <- Hanging up cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_CMD;
+
+ // free the memory for non-hangup commands
+ if (pModemInfo->mi_pszzCmds)
+ {
+ if (pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+ pModemInfo->mi_pszzCmds = NULL;
+ }
+ Param = ModemCommand(pModemInfo,
+ pModemInfo->mi_ReqID, pModemInfo->mi_pmcxo,
+ pModemInfo->mi_pszzHangupCmds);
+ if (MODEM_PENDING == Param)
+ {
+ return;
+ }
+ // SUCCESS or FAILURE hits the below if statement
+ }
+
+ if (MODEM_SUCCESS == Param)
+ {
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ }
+ else
+ {
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ }
+ break;
+
+ case STATE_HANGING_UP_CMD:
+ if (MODEM_FAILURE != Param)
+ {
+ // Raise DTR line
+ //
+ MCXPRINTF("raising DTR");
+ EscapeCommFunction(pModemInfo->mi_PortHandle, SETDTR);
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ Param = MODEM_SUCCESS;
+ }
+ else
+ {
+ if (pModemInfo->mi_dwHangupTryCount < MAX_HANGUP_TRIES)
+ {
+ pModemInfo->mi_dwHangupTryCount++;
+
+ // Lower DTR line
+ //
+ MCXPRINTF("lowering DTR");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_HARDWAREHANGUP);
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+ MCXPRINTF("State <- Hanging up dtr");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_DTR;
+
+ // Initialize receive state machine
+ //
+ pModemInfo->mi_RcvState = SET_TIMEOUT;
+ ReadCompletionRoutine2(pModemInfo);
+ return;
+ }
+ else
+ {
+ MCXPRINTF("failed to hangup!");
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ }
+ }
+ break;
+
+ case STATE_MONITORING:
+ if (MODEM_SUCCESS == Param)
+ {
+ // do we monitor again?
+ //
+ if (pModemInfo->mi_fContinuousMonitoring)
+ {
+ MCXPRINTF("Monitoring again.");
+
+ //
+ // send up ring notification to the completion port
+ // they are handled differently because the BytesWritten field is non-zero
+ //
+
+ PostQueuedCompletionStatus(
+ ghCompletionPort,
+ CP_BYTES_WRITTEN(CP_TYPE_RING),
+ pModemInfo->mi_dwCompletionKey,
+ NULL
+ );
+
+
+ // Initialize receive state machine
+ pModemInfo->mi_RcvState = START_READ;
+ ReadCompletionRoutine2(pModemInfo);
+ return;
+ }
+ else
+ {
+ MCXPRINTF("not monitoring again.");
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+ }
+ }
+ else
+ {
+ Param = MODEM_FAILURE;
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("State <- Unknown");
+ }
+ break;
+
+ default:
+ Param = MODEM_FAILURE;
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("hit a default in ReadNotifyClient(). State <- Unknown");
+ break;
+ }
+
+ // do we have a post hangup command that we would like to do?
+ //
+ if (pModemInfo->mi_dwPostHangupModemState &&
+ pModemInfo->mi_pszzPostHangupCmds)
+ {
+ MCXPRINTF1("State <- %d (numeric because we are doing a post hangup command)", pModemInfo->mi_dwPostHangupModemState);
+ pModemInfo->mi_ModemState = pModemInfo->mi_dwPostHangupModemState;
+
+ pModemInfo->mi_pszzCmds = NULL;
+
+ Param = ModemCommand(pModemInfo,
+ pModemInfo->mi_ReqID, pModemInfo->mi_pmcxo,
+ pModemInfo->mi_pszzPostHangupCmds);
+
+ // don't clear mi_dwPostHangupModemState, because we use that to indicate if we are doing a post hangup command
+ pModemInfo->mi_pszzPostHangupCmds = NULL;
+
+ if (MODEM_PENDING == Param)
+ {
+ return;
+ }
+ }
+ else
+ {
+ // make sure BOTH are clear
+ pModemInfo->mi_pszzPostHangupCmds = NULL;
+ pModemInfo->mi_dwPostHangupModemState = 0;
+ }
+
+ // Free the current command.
+ // Don't worry about affecting continuous monitoring; it will bail out
+ // earlier than this with a "return".
+ //
+ if (pModemInfo->mi_pszzCmds)
+ {
+ if (pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+ pModemInfo->mi_pszzCmds = NULL;
+ }
+
+ ClearCommError(pModemInfo->mi_PortHandle, &ulError, NULL);
+
+ if (pModemInfo->mi_ModemState == STATE_CONNECTED)
+ {
+ if (pModemInfo->mi_pszStartReadSpoof)
+ {
+ MCXPRINTF("spoofing remains:");
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ pModemInfo->mi_pszStartReadSpoof,
+ pModemInfo->mi_pszEndReadSpoof -
+ pModemInfo->mi_pszStartReadSpoof + 1,
+ PS_RECV);
+ }
+
+ ModemSetPassthrough(pModemInfo, MODEM_DCDSNIFF);
+ }
+ else
+ {
+ // If we didn't switch to data mode, then we still want to make sure that
+ // read callbacks are turned off until the next commad. We can get here
+ // because of a succesful init command or any unsuccesful command
+ //
+ ModemSetPassthrough(pModemInfo, MODEM_NOPASSTHROUGH);
+ }
+
+ ModemCallClient(pModemInfo, Param);
+ return;
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api DWORD | ModemCommand | This function sends a meta-command to the
+ modem. A meta-command is a command read from the registry
+
+ @parm MODEMINFORMATION * | pModemInfo | port handle
+
+ @parm DWORD | hWnd | The window handle to callback to when the command completes
+
+ @parm DWORD | msg | message
+
+ @parm DWORD | lParam | lparam
+
+ @parm char * | pszzCmdInMem | ptr to doubly-null terminated buffer of psz's.
+
+ @rdesc TRUE, PENDING or FALSE
+
+******************************************************************************/
+DWORD ModemCommand(MODEMINFORMATION * pModemInfo,
+ DWORD dwReqID,
+ MCX_OUT *pmcxo,
+ LPSTR pszzCmdInMem)
+{
+ DWORD result;
+ ULONG ulError;
+
+#ifdef VOICEVIEW
+ if (pModemInfo->VVInfo.wState == VVSTATE_NONE)
+ return MODEM_FAILURE;
+#endif // VOICEVIEW
+
+ pModemInfo->mi_ReqID = dwReqID;
+ pModemInfo->mi_pmcxo = pmcxo;
+
+ // are we interrupting a command in progress?
+ //
+ if (pModemInfo->mi_pszzCmds)
+ {
+ MCXPRINTF("memory command interrupted. (ok, if monitoring)");
+ }
+
+ if (pszzCmdInMem)
+ {
+ pModemInfo->mi_pszzCmds = pszzCmdInMem;
+ pModemInfo->mi_pszCurCmd = pszzCmdInMem;
+ }
+ else
+ {
+ return MODEM_FAILURE;
+ }
+
+ // Flush the port
+ //
+ ModemSetPassthrough(pModemInfo, MODEM_NOPASSTHROUGH);
+ ClearCommError(pModemInfo->mi_PortHandle, &ulError, NULL);
+
+ // Sets CommMask to 0, waits for any I/O to complete and purges buffers.
+ CancelPendingIoAndPurgeCommBuffers(pModemInfo, TRUE);
+
+ // Raise DTR line
+ //
+ if (STATE_HANGING_UP_CMD != pModemInfo->mi_ModemState)
+ {
+ MCXPRINTF("raising DTR to make sure it is high");
+ EscapeCommFunction(pModemInfo->mi_PortHandle, SETDTR);
+ }
+
+ pModemInfo->mi_dwCommandTryCount = 1;
+ result = ModemWriteCommand(pModemInfo);
+
+ if (result != MODEM_PENDING)
+ {
+ if (pModemInfo->mi_pszzCmds)
+ {
+ if (pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+ pModemInfo->mi_pszzCmds = NULL;
+ }
+ }
+
+ return (result);
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api DWORD | ModemWriteCommand | This function writes a modem command to the
+ modem.
+
+ @parm MODEMINFORMATION * | pModemInfo | port handle
+
+ @rdesc TRUE, PENDING or FALSE
+
+******************************************************************************/
+
+DWORD ModemWriteCommand(MODEMINFORMATION * pModemInfo)
+{
+ BYTE szData[MAXSTRINGLENGTH];
+ static char cszNullCmd[] = "None";
+ DWORD dwRet = MODEM_SUCCESS;
+
+
+ // check to see if we are doing commands in memory, and if there are any left
+ //
+ if (pModemInfo->mi_pszzCmds && *pModemInfo->mi_pszCurCmd)
+ {
+ // set szData to the current string
+ //
+ lstrcpyA(szData, pModemInfo->mi_pszCurCmd);
+ pModemInfo->mi_cbCmd = lstrlenA(szData);
+
+ // save away a pointer to this current string
+ //
+ pModemInfo->mi_pszPrevCmd = pModemInfo->mi_pszCurCmd;
+
+ // point to the next string
+ //
+ pModemInfo->mi_pszCurCmd += pModemInfo->mi_cbCmd + 1;
+ }
+ else
+ {
+ return MODEM_SUCCESS; // not really success, but it means we don't have any commands
+ }
+
+ if (!ExpandMacros(szData, pModemInfo->mi_szCmd, &(pModemInfo->mi_cbCmd), NULL, 0))
+ {
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("ExpandMacro Error. State <- Unknown");
+ return MODEM_FAILURE;
+ }
+
+ // only send command if it is not "None"/Null
+ //
+ if (lstrcmpA(pModemInfo->mi_szCmd, cszNullCmd))
+ {
+ DWORD cbWrite;
+
+ // Don't log the actual digits of the phone number when dialing.
+ //
+ PrintString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ pModemInfo->mi_szCmd,
+ pModemInfo->mi_cbCmd,
+ (STATE_DIALING == pModemInfo->mi_ModemState ||
+ STATE_ORIGINATING == pModemInfo->mi_ModemState) ?
+ PS_SEND_SECURE : PS_SEND);
+
+ // Make sure there nothing in the receive queue
+ //
+ PurgeComm(pModemInfo->mi_PortHandle, PURGE_RXCLEAR);
+
+ // Send the command to the Port
+ //
+ dwRet = ModemWrite(pModemInfo, pModemInfo->mi_szCmd,
+ pModemInfo->mi_cbCmd, &cbWrite, TO_FLUSH);
+
+ if (dwRet == MODEM_FAILURE)
+ {
+ // There is a failure, bail now
+ //
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("WriteComm Error. State <- Unknown");
+ return MODEM_FAILURE;
+ }
+ }
+ else
+ {
+ MCXPRINTF("'None' command. Just waiting to read...");
+
+ }
+
+ // Initialize receive state machine
+ //
+ ASSERT(dwRet == MODEM_SUCCESS || dwRet == MODEM_PENDING);
+ if(dwRet == MODEM_SUCCESS) // ModemWrite can not return SUCCESS, so this
+ // must be from a "None"/Null command.
+ {
+ // Start receiving response immediately
+ //
+
+ pModemInfo->mi_RcvState = START_READ;
+
+ if (!CreateDeferedWorkItem(pModemInfo)) {
+
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ MCXPRINTF("WriteComm Error. State <- Unknown");
+ return MODEM_FAILURE;
+ }
+
+ }
+ else
+ {
+ // Pending and come back to check the result from write operation
+ //
+ pModemInfo->mi_RcvState = FLUSH_WRITE_QUEUE;
+ };
+
+ return MODEM_PENDING;
+}
+
+
+
+BOOL WINAPI
+SyncRead(
+ HANDLE CommHandle,
+ HANDLE Event,
+ LPVOID Buffer,
+ DWORD BufferLength,
+ LPDWORD BytesRead
+ )
+
+{
+ OVERLAPPED OverLapped;
+ BOOL bResult;
+ COMMTIMEOUTS commtimeout;
+
+ commtimeout.ReadIntervalTimeout = MAXDWORD;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = 0;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 0;
+ SetCommTimeouts(
+ CommHandle,
+ &commtimeout
+ );
+
+ *BytesRead=0;
+
+ // OR with 1 to prevent it from being posted to the completion port.
+ //
+ OverLapped.hEvent = (HANDLE)((DWORD)Event | 1);
+
+ bResult=ReadFile(
+ CommHandle,
+ Buffer,
+ BufferLength,
+ BytesRead,
+ &OverLapped
+ );
+
+#ifdef DEBUG
+ if (!bResult) {
+
+ ASSERT(GetLastError() != ERROR_IO_PENDING);
+ }
+#endif
+
+
+ return bResult;
+
+}
+
+
+
+//****************************************************************************
+// DWORD ReadComm(MODEMINFORMATION *, LPBYTE lpBuf, DWORD dwToRead,
+// LPDWORD pdwRead, DWORD dwTimeout)
+//
+// Function: Check the spoof buffer and read from it if characters are
+// available. Otherwise, call ModemRead.
+//
+// Returns: Spoof buffer: MODEM_SUCCESS or MODEM_FAILURE
+// ModemRead : MODEM_PENDING or MODEM_FAILURE (never MODEM_SUCCESS)
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD ReadComm(MODEMINFORMATION *pModemInfo, LPBYTE lpBuf, DWORD dwToRead,
+ LPDWORD pdwRead, DWORD dwTimeout)
+{
+ DWORD dwRet;
+
+ if (pModemInfo->mi_pszStartReadSpoof)
+ {
+ if (!pModemInfo->mi_pszEndReadSpoof)
+ {
+ MCXPRINTF("ACK! StartReadSpoof was real when EndReadSpoof was NULL!");
+ }
+
+ *pdwRead = 0;
+
+ while (dwToRead-- &&
+ pModemInfo->mi_pszStartReadSpoof <= pModemInfo->mi_pszEndReadSpoof)
+ {
+// MCXPRINTF3("SPOOF mode! %8x %8x %8x", pModemInfo->mi_szResponse,
+// pModemInfo->mi_pszStartReadSpoof,
+// pModemInfo->mi_pszEndReadSpoof);
+ *lpBuf++ = *pModemInfo->mi_pszStartReadSpoof++;
+ (*pdwRead)++;
+ }
+
+ // have we run out of spoofing material?
+ if (pModemInfo->mi_pszStartReadSpoof > pModemInfo->mi_pszEndReadSpoof)
+ {
+ pModemInfo->mi_pszStartReadSpoof = NULL;
+ pModemInfo->mi_pszEndReadSpoof = NULL;
+ }
+
+ dwRet = MODEM_SUCCESS;
+ }
+ else
+ {
+
+ dwRet = MODEM_SUCCESS;
+
+ SyncRead(
+ pModemInfo->mi_PortHandle,
+ pModemInfo->mi_SyncReadEvent,
+ lpBuf,
+ dwToRead,
+ pdwRead
+ );
+
+ if (*pdwRead==0) {
+
+ dwRet = ModemRead(pModemInfo, lpBuf, dwToRead, pdwRead, dwTimeout);
+
+ if (MODEM_PENDING != dwRet)
+ {
+ // ReadComm failed
+ MCXPRINTF1("ReadComm error = %ld", dwRet);
+ }
+
+ }
+
+ }
+
+ return dwRet;
+}
+
+
+//****************************************************************************
+// VOID ReadCompletionRoutine2(MODEMINFORMATION *)
+//
+// Function: Response Read State Machine and Timeout handler
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+VOID ReadCompletionRoutine2(MODEMINFORMATION * pModemInfo)
+{
+ DWORD dwResult;
+ MSS Mss;
+ static char cszNoResponse[] = "NoResponse";
+
+ // A good ole state machine
+ while (TRUE)
+ {
+ switch (pModemInfo->mi_RcvState)
+ {
+ // ******************************************************************
+ //
+ // ModemWrite was pending and now completes or times out
+ //
+ // ******************************************************************
+ //
+ case FLUSH_WRITE_QUEUE:
+ {
+ DWORD cb;
+
+ // Assume success and we will start receiving the response
+ //
+ pModemInfo->mi_RcvState = START_READ;
+
+ // Comm Errors?
+ HandleCommErrors(pModemInfo, 0);
+
+ // Has all of the write buffer been emptied?
+ //
+ if (ModemRWAsyncComplete(pModemInfo, &cb) != MODEM_SUCCESS)
+ {
+ MCXPRINTF1("Write error = %ld", GetLastError());
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ }
+ }
+ break;
+
+ // ******************************************************************
+ //
+ // Start receiving a response
+ //
+ // ******************************************************************
+ //
+ case START_READ:
+ //
+ // Has all of the write buffer been emptied?
+ //
+
+ ASSERT(pModemInfo->mi_lpOverlappedRW == NULL);
+
+ // If we are doing commands, check for "NoResponse" on the
+ // next command and handle it.
+ //
+ if (pModemInfo->mi_pszzCmds &&
+ !lstrcmpA(pModemInfo->mi_pszCurCmd, cszNoResponse))
+ {
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ return;
+ }
+
+
+ // If we get here, it means that the write queue is empty
+ //
+ pModemInfo->mi_pszStartReadSpoof = NULL;
+ pModemInfo->mi_pszEndReadSpoof = NULL;
+ //
+ //*****************************************************************
+ // FALLTHROUGH
+ //*****************************************************************
+ //
+
+ // ******************************************************************
+ //
+ // Continue receiving the response
+ //
+ // ******************************************************************
+ //
+ case RESTART_READ:
+ pModemInfo->mi_cbTotalResponse = 0;
+ pModemInfo->mi_dwPossibleResponseLen = 0;
+ pModemInfo->mi_RcvState = TRY_READ;
+ pModemInfo->mi_fBadResponseCleanupMode = FALSE;
+ break;
+
+ // ******************************************************************
+ //
+ // Try receiving the response now
+ //
+ // ******************************************************************
+ //
+ case TRY_READ:
+ {
+ DWORD dwTimeOut;
+ DWORD dwCharsReceived;
+ DWORD dwRet;
+
+ if (pModemInfo->mi_cbTotalResponse >= sizeof(pModemInfo->mi_szResponse))
+ {
+ MCXPRINTF("read in the maximum # of chars and still couldn't identify the response!");
+ pModemInfo->mi_RcvState = BAIL_O_RAMA_NO_MORE_DATA;
+ break;
+ }
+
+ // Determine the read timeout for the response
+ // Is this the first character? (either, at all, or after an echo)
+ //
+ if (pModemInfo->mi_cbTotalResponse == 0)
+ {
+ // set timeout for waiting for the first character
+ switch(pModemInfo->mi_ModemState)
+ {
+ case STATE_MONITORING:
+ // BUGBUG: (Chris Caputo - 1/22/96)
+ // BUGBUG: It seems that if we send some init commands for the
+ // BUGBUG: monitor (like ATS0=0), that we are screwed here
+ // BUGBUG: because the infinite timeout is not appropriate for
+ // BUGBUG: waiting to see if a command was accepted.
+ dwTimeOut = TO_INFINITE; // wait forever
+ break;
+
+ case STATE_INITIALIZING:
+ case STATE_HANGING_UP_NON_CMD:
+ case STATE_HANGING_UP_CMD:
+ case STATE_HANGING_UP_REMOTE:
+ dwTimeOut = TO_FIRST_CHAR_AFTER_INIT_CMD; // should be short (ie. 2 seconds)
+ break;
+
+ case STATE_DIALING:
+ case STATE_ANSWERING:
+ case STATE_ORIGINATING:
+ // do we support dwCallSetupFailTimer?
+ if (pModemInfo->mi_dwCallSetupFailTimerCap &&
+ pModemInfo->mi_dwCallSetupFailTimerSetting)
+ {
+ dwTimeOut = pModemInfo->mi_dwCallSetupFailTimerSetting
+ * MILISECONDS_PER_SECOND
+ + TO_ADDITIONAL_TO_CALL_SETUP_FAIL_TIMER;
+ }
+ else
+ {
+ dwTimeOut = pModemInfo->mi_fModem ?
+ TO_FIRST_CHAR_AFTER_CONNECTION_CMD :
+ TO_FIRST_CHAR_AFTER_CONNECTION_CMD_NON_MODEM;
+ }
+ break;
+
+ default:
+ MCXPRINTF("hit a default in SET_READ_CALLBACK!");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ }
+
+ MCXPRINTF2("waits for a new response for %d secs @%d.", dwTimeOut/1000,
+ GETTICKCOUNT());
+ }
+ else
+ {
+ dwTimeOut = TO_NEXT_CHAR_RCV_INTERVAL;
+ }
+
+ if (dwTimeOut)
+ {
+ dwTimeOut += GET_PORT_LATENCY(pModemInfo);
+ }
+
+#ifdef DEBUG
+ if (GET_PORT_LATENCY(pModemInfo))
+ {
+ ASSERT(gRegistryFlags & fGRF_PORTLATENCY);
+ // DPRINTF2(
+ // "PL:%lu. New TO:%lu",
+ // GET_PORT_LATENCY(pModemInfo),
+ // dwTimeOut
+ // );
+ }
+#endif
+
+ // Read the next character
+ //
+ dwRet = ReadComm(pModemInfo,
+ pModemInfo->mi_szResponse +
+ pModemInfo->mi_cbTotalResponse,
+ 1, &dwCharsReceived, dwTimeOut);
+ switch (dwRet)
+ {
+ case MODEM_SUCCESS: // Only Spoof mode returns SUCCESS here.
+ pModemInfo->mi_cbTotalResponse += dwCharsReceived;
+ pModemInfo->mi_RcvState = CHECK_RESPONSE;
+ break;
+
+ case MODEM_PENDING:
+ pModemInfo->mi_RcvState = POST_READ_CALLBACK;
+ return;
+
+ default:
+ MCXPRINTF("had errors while trying to read from the port.");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ }
+ break;
+ }
+
+ // ******************************************************************
+ //
+ // The pending read completes successfully or fails
+ //
+ // ******************************************************************
+ //
+ case POST_READ_CALLBACK:
+ {
+ DWORD dwCharsReceived;
+ DWORD dwRet;
+
+ // Comm Errors?
+ HandleCommErrors(pModemInfo, 0);
+
+ // Has all of the write buffer been emptied?
+ dwRet = ModemRWAsyncComplete(pModemInfo, &dwCharsReceived);
+
+ switch (dwRet)
+ {
+ case MODEM_SUCCESS:
+ pModemInfo->mi_cbTotalResponse += dwCharsReceived;
+ pModemInfo->mi_RcvState = CHECK_RESPONSE;
+ break;
+
+ case MODEM_PENDING:
+ // Timeout on read
+ // did we have a possible response?
+ //
+ if (pModemInfo->mi_dwPossibleResponseLen)
+ {
+ MCXPRINTF("SUCCESS (Timeout)");
+ pModemInfo->mi_RcvState = USE_POSSIBLE_RESPONSE;
+ }
+ else
+ {
+ if (!pModemInfo->mi_fBadResponseCleanupMode)
+ {
+ MCXPRINTF1("timeout expired while waiting for a response @%d.",
+ GETTICKCOUNT());
+ }
+
+ // timeouts while in non-cmd stage of hanging up will be followed
+ // by a command hangup (ATH) started in ReadNotifyClient.
+ //
+ if (STATE_HANGING_UP_NON_CMD == pModemInfo->mi_ModemState)
+ {
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ return;
+ }
+
+ pModemInfo->mi_RcvState = BAIL_O_RAMA_NO_MORE_DATA;
+ }
+ break;
+
+ default:
+ // Fail on read
+ //
+ MCXPRINTF("had errors while trying to read from the port.");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ };
+ break;
+ }
+
+ // ******************************************************************
+ //
+ // The read completes successfully, checks new response
+ //
+ // ******************************************************************
+ //
+ case CHECK_RESPONSE:
+ if (pModemInfo->mi_fBadResponseCleanupMode)
+ {
+ pModemInfo->mi_RcvState = TRY_READ;
+ break;
+ }
+
+ switch (CheckResponse(pModemInfo, &Mss))
+ {
+ case SUCCESS:
+ pModemInfo->mi_RcvState = USE_WHOLE_RESPONSE;
+ break;
+
+ case ECHO:
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_cbTotalResponse, PS_RECV);
+ pModemInfo->mi_RcvState = START_READ;
+ break;
+
+ case PARTIAL_RESPONSE:
+ pModemInfo->mi_RcvState = TRY_READ;
+ break;
+
+ case UNRECOGNIZED_RESPONSE:
+ if (pModemInfo->mi_dwPossibleResponseLen)
+ {
+ pModemInfo->mi_RcvState = USE_POSSIBLE_RESPONSE;
+ }
+ else
+ {
+ if (STATE_MONITORING == pModemInfo->mi_ModemState)
+ {
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_cbTotalResponse, PS_RECV);
+
+ // BUGBUG possibly put some autobauding crap in here. For now, just
+ // BUGBUG continue waiting.
+#ifdef DEBUG
+ // Probably have to listen at 115200 for this to resolve the
+ // ambiguities. Scrap the lower baud rates too.
+ switch (pModemInfo->mi_szResponse[0] & 0xff)
+ {
+ case 0x00:
+ MCXPRINTF("looks like client is at 300 or 1200 bps");
+ break;
+ case 0x80:
+ MCXPRINTF("looks like client is at 2400 bps");
+ break;
+ case 0xf8:
+ MCXPRINTF("looks like client is at 4800 bps");
+ break;
+ case 0x1e:
+ MCXPRINTF("looks like client is at 9600 bps");
+ break;
+ case 0xf1:
+ case 0xf9:
+ case 0xfe:
+ MCXPRINTF("looks like client is at 38400 bps");
+ break;
+ case 0xff:
+ MCXPRINTF("looks like client is at 57600 or 115200 bps");
+ break;
+ }
+#endif // DEBUG
+
+ // ignore the error and keep monitoring
+ pModemInfo->mi_RcvState = START_READ;
+ }
+ else
+ {
+ MCXPRINTF("unrecognized response! (inf file bad?) Reading rest of input...");
+ pModemInfo->mi_RcvState = BAIL_O_RAMA_MORE_DATA;
+ }
+ }
+ break;
+
+ case POSSIBLE_RESPONSE:
+ pModemInfo->mi_RcvState = TRY_READ;
+ CopyMemory(&pModemInfo->mi_mssPossible, &Mss, sizeof(MSS));
+
+ // store the length of this possible response
+ pModemInfo->mi_dwPossibleResponseLen = pModemInfo->mi_cbTotalResponse;
+ break;
+
+ default:
+ MCXPRINTF("hit a default in CHECK_RESPONSE!");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ }
+ break;
+
+ // ******************************************************************
+ //
+ // We got a bad response from modem
+ //
+ // ******************************************************************
+ //
+ case BAD_RESPONSE_CLEANUP_END:
+ // were we trying to connect? if yes, then check RLSD
+ if (pModemInfo->mi_fModem)
+ {
+ if (pModemInfo->mi_ModemState == STATE_ANSWERING ||
+ pModemInfo->mi_ModemState == STATE_ORIGINATING)
+ {
+ DWORD dwStat = 0;
+
+ // Is RLSD on?
+ //
+ GetCommModemStatus(pModemInfo->mi_PortHandle, &dwStat);
+ if (dwStat & MS_RLSD_ON)
+ {
+ MCXPRINTF("couldn't recognize connection response, but it did detect a successful connection.");
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ }
+ else
+ {
+ MCXPRINTF("couldn't recognize connection response, and it appears that the connection failed.");
+
+ // Drop the DTR line
+ MCXPRINTF("lowering DTR");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_HARDWAREHANGUP);
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ }
+ return;
+ }
+ else
+ {
+ if (pModemInfo->mi_ModemState == STATE_DIALING) // check for DIALING
+ {
+ MCXPRINTF("couldn't recognize response to a dial command and since we are dialing, we can't retry, nor continue. Hanging up...");
+ pModemInfo->mi_dwUnconditionalReturnValue = MODEM_FAILURE; // make sure the Dialing command gets a failure return
+
+ // need to send "ATH<cr>"
+ MCXPRINTF("State <- Hanging up cmd");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_CMD;
+
+ // Reset hangup counter to 0.
+ pModemInfo->mi_dwHangupTryCount = 1;
+
+ // free the memory for non-hangup commands
+ if (pModemInfo->mi_pszzCmds)
+ {
+ if (pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+ pModemInfo->mi_pszzCmds = NULL;
+ }
+ dwResult = ModemCommand(pModemInfo,
+ pModemInfo->mi_ReqID, pModemInfo->mi_pmcxo,
+ pModemInfo->mi_pszzHangupCmds);
+ if (dwResult != MODEM_PENDING)
+ {
+ ReadNotifyClient(pModemInfo, dwResult);
+ }
+ return;
+ }
+ }
+ }
+
+ // still no luck... then adjust speed after trying at this speed 2 times
+ // BUGBUG - adjust speed
+
+ // and try the command again (if there was one)
+ if (pModemInfo->mi_pszzCmds)
+ {
+ MCXPRINTF("retrying last command...");
+ pModemInfo->mi_pszCurCmd = pModemInfo->mi_pszPrevCmd;
+ dwResult = ModemWriteCommand(pModemInfo);
+ if (dwResult != MODEM_PENDING)
+ {
+ ReadNotifyClient(pModemInfo, dwResult);
+ }
+ }
+ else
+ {
+ // I think we only get here if we failed to read a response for a hangup.
+ MCXPRINTF("failed to read a response for a hangup. Returning SUCCESS anyways.");
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ }
+ return;
+
+ // ******************************************************************
+ //
+ // we get here if we had an unrecognized response
+ //
+ // ******************************************************************
+ //
+ case BAIL_O_RAMA_MORE_DATA:
+ // get the rest of the bad response
+ pModemInfo->mi_dwPossibleResponseLen = 0; // ditch any possible responses
+ pModemInfo->mi_fBadResponseCleanupMode = TRUE; // turn on cleanup mode
+ pModemInfo->mi_RcvState = TRY_READ;
+ break;
+
+ // ******************************************************************
+ //
+ // we get here if a timeout has occured and no data was available or
+ // if we read too much data also after cleaning up an unrecognized
+ // response
+ //
+ // ******************************************************************
+ //
+ case BAIL_O_RAMA_NO_MORE_DATA:
+ switch (pModemInfo->mi_ModemState)
+ {
+ case STATE_INITIALIZING:
+ {
+ DWORD dwStat = 0;
+
+ // Check modem control signals.
+ //
+ GetCommModemStatus(pModemInfo->mi_PortHandle, &dwStat);
+
+ // does it look like the modem is still online from a previous call?
+ if (dwStat & MS_RLSD_ON)
+ {
+ MCXPRINTF("It appears that a previous connection was not hung up! Attempting hangup...");
+
+ // are we already in the midst of a post hangup command?
+ if (pModemInfo->mi_dwPostHangupModemState)
+ {
+ MCXPRINTF("won't do a second hangup attempt of the existing call. Bail!");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ }
+ else
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGWARN_PREVIOUSCONNECTIONNOTHUNGUP);
+
+ // save state
+ pModemInfo->mi_dwPostHangupModemState = STATE_INITIALIZING;
+ pModemInfo->mi_pszzPostHangupCmds = pModemInfo->mi_pszzCmds;
+ pModemInfo->mi_pszzCmds = NULL;
+
+ // do hangup
+ // Reset hangup counter to 1.
+ pModemInfo->mi_dwHangupTryCount = 1;
+
+ // Drop the DTR line
+ MCXPRINTF("lowering DTR");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_HARDWAREHANGUP);
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+ MCXPRINTF("State <- Hanging up dtr");
+ pModemInfo->mi_ModemState = STATE_HANGING_UP_DTR;
+
+ // Initialize receive state machine
+ pModemInfo->mi_RcvState = SET_TIMEOUT;
+ ReadCompletionRoutine2(pModemInfo);
+ }
+ return;
+ }
+ }
+ // FALLTHROUGH
+
+ default:
+ // Print out what we were able to get
+ MCXPRINTF("data from failed or unrecognized response:");
+ if (pModemInfo->mi_dwCommandTryCount < MAX_COMMAND_TRIES)
+ {
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_cbTotalResponse, PS_RECV);
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGWARN_UNRECOGNIZEDRESPONSE);
+ pModemInfo->mi_dwCommandTryCount++;
+ pModemInfo->mi_RcvState = BAD_RESPONSE_CLEANUP_END;
+ }
+ else
+ {
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_cbTotalResponse, PS_RECV);
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGERR_FAILED_RESPONSE);
+ MCXPRINTF("gave up trying to do the command.");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ }
+ break;
+ }
+ break;
+
+ // ******************************************************************
+ //
+ // The entire modem response is good.
+ //
+ // ******************************************************************
+ //
+ case USE_WHOLE_RESPONSE:
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_cbTotalResponse, PS_RECV);
+ pModemInfo->mi_RcvState = GOOD_RESPONSE;
+ break;
+
+ // ******************************************************************
+ //
+ // Some part of the response matches one of the possible responses
+ //
+ // ******************************************************************
+ //
+ case USE_POSSIBLE_RESPONSE:
+
+ // use the stored MSS
+ CopyMemory(&Mss, &pModemInfo->mi_mssPossible, sizeof(MSS));
+
+ // setup up the ReadComm spoofing mechanism if it isn't already active
+ if (!pModemInfo->mi_pszStartReadSpoof)
+ {
+ pModemInfo->mi_pszStartReadSpoof = pModemInfo->mi_szResponse + pModemInfo->mi_dwPossibleResponseLen;
+ pModemInfo->mi_pszEndReadSpoof = pModemInfo->mi_szResponse + pModemInfo->mi_cbTotalResponse - 1;
+ }
+ else
+ {
+ MCXPRINTF("USE_POSSIBLE_RESPONSE while in Spoof mode!");
+ }
+
+ PrintString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID,pModemInfo->mi_szResponse, pModemInfo->mi_dwPossibleResponseLen, PS_RECV);
+ pModemInfo->mi_RcvState = GOOD_RESPONSE;
+ break;
+
+ // ******************************************************************
+ //
+ // We have a good modem response
+ //
+ // ******************************************************************
+ //
+ case GOOD_RESPONSE:
+
+
+ PrintGoodResponse(
+ pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ Mss.bResponseState
+ );
+
+ // negotiated modem options... only allow compression and error correction results
+ pModemInfo->mi_dwNegotiatedModemOptions |= (Mss.bNegotiatedOptions &
+ (MDM_COMPRESSION |
+ MDM_ERROR_CONTROL |
+ MDM_CELLULAR));
+
+ // check for DCE and DTE info
+ if (Mss.dwNegotiatedDCERate)
+ pModemInfo->mi_dwNegotiatedDCERate = Mss.dwNegotiatedDCERate;
+
+ if (Mss.dwNegotiatedDTERate)
+ pModemInfo->mi_dwNegotiatedDTERate = Mss.dwNegotiatedDTERate;
+
+ // BUGBUG: Consolidate ReadNotifyClients
+ switch (Mss.bResponseState)
+ {
+ case RESPONSE_OK: // more commands
+ if (STATE_HANGING_UP_NON_CMD == pModemInfo->mi_ModemState)
+ {
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ return;
+ }
+ // fallthrough
+
+ case RESPONSE_CONNECT:
+ pModemInfo->mi_dwCommandTryCount = 1;
+ dwResult = ModemWriteCommand(pModemInfo);
+ if (dwResult != MODEM_PENDING)
+ {
+ ReadNotifyClient(pModemInfo, dwResult);
+ }
+
+ if (STATE_MONITORING == pModemInfo->mi_ModemState) {
+ //
+ // monitoring, wait for DSR changes
+ //
+ if (pModemInfo->mi_fModem) {
+ //
+ // only if we are a real modem
+ //
+ if (!CurrentlyWaitingForCommEvent(pModemInfo)) {
+ //
+ // and if we ain't already waiting, ie. more that on monitor command
+ //
+ ModemWaitEvent(pModemInfo, EV_DSR , 0);
+ }
+ }
+ }
+
+#ifdef VOICEVIEW
+ if (STATE_MONITORING == pModemInfo->mi_ModemState)
+ {
+ if (VVCLASS_80 == pModemInfo->VVInfo.wClass)
+ {
+ // modem is now in fclass+80, notify VxD ddi
+ MCXPRINTF("VVR_LINE_BACK");
+ VVCallBackFunc( pModemInfo, VVR_LINE_BACK ); // tell VV CAN use port
+ }
+
+ if (pModemInfo->VVInfo.hSemaphore)
+ {
+ // unblock the waiting command
+ MCXPRINTF("received OK - signaled semaphore");
+ Signal_Semaphore( pModemInfo->VVInfo.hSemaphore );
+ }
+ }
+#endif // VOICEVIEW
+ return;
+
+#ifdef VOICEVIEW
+ case RESPONSE_VV_SSV:
+ // got a DATA VoiceView response from the modem
+ // call VoiceView ddi VxD and let him know
+ MCXPRINTF("VOICEVIEW DATA");
+ VVCallBackFunc( pModemInfo, (WORD)(Mss.bResponseState - RESPONSE_VV_BASE) );
+ return;
+
+ case RESPONSE_VV_SMD:
+ case RESPONSE_VV_SFA:
+ case RESPONSE_VV_SRA:
+ case RESPONSE_VV_SRQ:
+ case RESPONSE_VV_SRC:
+ case RESPONSE_VV_STO:
+ case RESPONSE_VV_SVM:
+ // got a VoiceView response from the modem
+ // call VoiceView ddi VxD and let him know
+ MCXPRINTF("RESPONSE_VOICEVIEW");
+ VVCallBackFunc( pModemInfo, (WORD)(Mss.bResponseState - RESPONSE_VV_BASE) );
+
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ return;
+#endif // VOICEVIEW
+
+ case RESPONSE_RING:
+ // try to resend the previous command if we aren't connecting or monitoring
+ if (!(pModemInfo->mi_ModemState == STATE_ANSWERING ||
+ pModemInfo->mi_ModemState == STATE_ORIGINATING) &&
+ pModemInfo->mi_pszzCmds)
+ {
+ if (STATE_MONITORING != pModemInfo->mi_ModemState)
+ {
+ // We got a RING while we were trying to do a command unrelated to
+ // monitoring. Retry the command...
+ MCXPRINTF("retrying last command due to unexpected RESPONSE_RING");
+ pModemInfo->mi_pszCurCmd = pModemInfo->mi_pszPrevCmd;
+ }
+
+ pModemInfo->mi_dwCommandTryCount = 1;
+ dwResult = ModemWriteCommand(pModemInfo);
+ if (dwResult != MODEM_PENDING)
+ {
+ ReadNotifyClient(pModemInfo, dwResult);
+ }
+ return;
+ }
+ // fall through (when we are doing a connection command of some type)
+
+ case RESPONSE_LOOP: // more responses
+ pModemInfo->mi_RcvState = RESTART_READ;
+ break;
+
+ case RESPONSE_BUSY:
+ ReadNotifyClient(pModemInfo, MODEM_BUSY);
+ return;
+
+ case RESPONSE_NOCARRIER:
+ ReadNotifyClient(pModemInfo, MODEM_NOCARRIER);
+ return;
+
+ case RESPONSE_NODIALTONE:
+ ReadNotifyClient(pModemInfo, MODEM_NODIALTONE);
+ return;
+
+ case RESPONSE_NOANSWER:
+ ReadNotifyClient(pModemInfo, MODEM_NOANSWER);
+ return;
+
+ case RESPONSE_ERROR:
+ // If we get an ERROR while HANGING_UP_NON_CMD, that is okay.
+ // During any other states, it is bad.
+ if (STATE_HANGING_UP_NON_CMD == pModemInfo->mi_ModemState)
+ {
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ }
+ else
+ {
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ }
+#ifdef VOICEVIEW
+ if (STATE_MONITORING == pModemInfo->mi_ModemState)
+ {
+ if (VVCLASS_80 == pModemInfo->VVInfo.wClass)
+ {
+ // modem could not get into fclass+80, notify VxD ddi
+ MCXPRINTF("VVRS_NO_CLS80_SUPPORT");
+ VVCallBackFunc( pModemInfo, VVRS_NO_CLS80_SUPPORT ); // tell VV CAN'T work
+ VVSetClass( pModemInfo, VVCLASS_0 ); // make sure we are in fclass=0 now
+ }
+
+ if (pModemInfo->VVInfo.hSemaphore)
+ {
+ // unblock the waiting command
+ MCXPRINTF("Received ERROR - signaled semaphore");
+ Signal_Semaphore( pModemInfo->VVInfo.hSemaphore );
+ }
+ }
+#endif // VOICEVIEW
+ return;
+
+ default:
+ MCXPRINTF("hit a default!");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ } /* Switch on dwResponseState */
+ break;
+
+ // ******************************************************************
+ //
+ // End of recieving response phase
+ //
+ // ******************************************************************
+ //
+ case END_READ:
+ MCXPRINTF("had an extra callback caught by END_READ!");
+ ASSERT(0);
+ return;
+
+ // ******************************************************************
+ case SET_TIMEOUT:
+ {
+ DWORD dwTimeOut;
+
+ // set timeout based on current modem state
+ switch (pModemInfo->mi_ModemState)
+ {
+ case STATE_HANGING_UP_DTR:
+ // Enable a few events that we would like to hear about
+ //
+ dwTimeOut = TO_DTR_DROP * pModemInfo->mi_dwHangupTryCount; // wait longer on successive hangup tries
+
+ switch (ModemWaitEvent(pModemInfo, EV_DSR | EV_RLSD, dwTimeOut))
+ {
+ case MODEM_SUCCESS:
+ case MODEM_PENDING:
+ pModemInfo->mi_RcvState = POST_TIMEOUT;
+ break;
+
+ default:
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ break;
+ }
+ break;
+
+ default:
+ MCXPRINTF1("in state SET_TIMEOUT for a state that doesn't make sense (%d)",
+ pModemInfo->mi_ModemState);
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ break;
+ }
+
+ return;
+ }
+
+ // ******************************************************************
+ case POST_TIMEOUT:
+
+ if (pModemInfo->mi_ModemState != STATE_HANGING_UP_DTR)
+ {
+ MCXPRINTF("hit POST_TIMEOUT when it shouldn't have.");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ }
+ else
+ {
+ MCXPRINTF("POST_TIMEOUT");
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+ }
+ return;
+
+ // ******************************************************************
+ default:
+ MCXPRINTF("hit a default in ReadCompletionRoutine2!");
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+ return;
+ } /* Switch on RcvState */
+ } /* While */
+}
+
+//****************************************************************************
+// VOID HWDetectionRoutine(MODEMINFORMATION *)
+//
+// Function: Called when:
+// EV_RLSD, EV_DSR, or EV_ERR during STATE_CONNECTED (non-passthrough)
+// EV_ERR during STATE_CONNECTED (passthrough)
+// EV_RLSD or EV_DSR during STATE_HANGING_UP_DTR
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+VOID WINAPI
+HWDetectionRoutine(
+ MODEMINFORMATION * pModemInfo,
+ LPOVERNODE pNode
+ )
+{
+ DWORD dwDummy;
+ BOOL fClearEventHandle = TRUE;
+ DWORD dwRet;
+
+
+ // are we listening for this event?
+
+ dwRet=ModemWaitEventComplete(
+ pModemInfo,
+ pNode
+ );
+
+
+ if (((dwRet) == MODEM_SUCCESS) || (dwRet == MODEM_PENDING)) {
+
+
+ switch (pModemInfo->mi_ModemState)
+ {
+ case STATE_HANGING_UP_DTR:
+ ReadCompletionRoutine2(pModemInfo);
+
+
+ break;
+
+ case STATE_MONITORING:
+
+ MCXPRINTF("DSR drop while monitoring, monitor fails");
+
+ CancelPendingIoAndPurgeCommBuffers(pModemInfo, TRUE);
+
+ ReadNotifyClient(pModemInfo, MODEM_FAILURE);
+
+ break;
+
+ case STATE_WAIT_FOR_RLSD:
+
+ MCXPRINTF("RLSD went high, completing connection.");
+
+ ReadNotifyClient(pModemInfo, MODEM_SUCCESS);
+
+ break;
+
+ case STATE_CONNECTED:
+
+ MCXPRINTF("reporting dropped line.");
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_REMOTEHANGUP);
+
+
+ ModemSetPassthrough(pModemInfo, MODEM_NOPASSTHROUGH);
+
+ // purge only the transmit queue. We want to receive the 3<cr> / NO CARRIER msg
+ PurgeComm(pModemInfo->mi_PortHandle, PURGE_TXCLEAR);
+
+ if (pModemInfo->mi_fModem)
+ {
+ MCXPRINTF("State <- Remote dropped");
+ pModemInfo->mi_ModemState = STATE_REMOTE_DROPPED;
+#if 0
+ // Initialize receive state machine
+ pModemInfo->mi_RcvState = START_READ;
+ ReadCompletionRoutine2(pModemInfo);
+ fClearEventHandle = FALSE; // Same reason as above.
+#endif
+ }
+ else // we don't need to wait for a response from a null-modem
+ {
+ // Drop the DTR line to let the other side know you acknowledge
+ MCXPRINTF("dropping DTR to acknowledge remote hangup");
+ EscapeCommFunction(pModemInfo->mi_PortHandle, CLRDTR);
+ pModemInfo->mi_ModemState = STATE_DISCONNECTED;
+ MCXPRINTF("State <- Disconnected");
+
+#if 0
+ // Set HIWORD to MDM_ID_NULL to indicate this was an unexpected message
+ //
+ ModemCallClient(pModemInfo, MODEM_HANGUP); // inform the app of the hangup
+#endif
+ }
+
+ if (NULL != pModemInfo->mi_DisconnectHandler) {
+ //
+ // the upper level code has register a disconnect hanlder
+ //
+ (*pModemInfo->mi_DisconnectHandler)(
+ pModemInfo->mi_DisconnectContext
+ );
+ }
+
+
+ break;
+
+ default:
+ MCXPRINTF("got a CN_EVENT when it didn't expect one!!! (bad)");
+ break;
+ }
+ }
+ else
+ {
+ MCXPRINTF("HWDetectionRoutine called with an event it wasn't interested in.");
+ ASSERT(0);
+ }
+
+
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api DWORD | CheckResponse | This function checks to see if the response is
+ an echo, and if it isn't it call MatchResponse().
+
+ @parm MODEMINFORMATION * | pModemInfo | Modem port handle
+
+ @parm MSS * | pMss | ptr to a buffer to copy the Modem State Structure data
+ into. Valid on SUCCES return.
+
+ @rdesc returns SUCCESS if there is 1 match and 0 partials.
+ Otherwise, a non-zero error code is returned:
+
+ @flag ECHO if the response was an echo of the command
+
+ @flag PARTIAL_RESPONSE if there no match and 1 or more partials.
+
+ @flag UNRECOGNIZED_RESPONSE if there are no matches or partials.
+
+ @flag POSSIBLE_RESPONSE if there is 1 match and 1 or more partials.
+
+*****************************************************************************/
+
+DWORD CheckResponse(MODEMINFORMATION * pModemInfo, MSS *pMss)
+{
+ DWORD dwResult;
+
+ ASSERT (pModemInfo->mi_cbTotalResponse <= sizeof(pModemInfo->mi_szResponse));
+
+ if ((dwResult = MatchResponse(pModemInfo, pMss)) == UNRECOGNIZED_RESPONSE)
+ {
+ // Is it an echo so far?
+ //
+ if (!Mystrncmp(pModemInfo->mi_szCmd, pModemInfo->mi_szResponse,
+ pModemInfo->mi_cbTotalResponse))
+ {
+ // is it a complete echo?
+ //
+ if (pModemInfo->mi_cbCmd == pModemInfo->mi_cbTotalResponse)
+ {
+ dwResult = ECHO;
+ }
+ else
+ {
+ dwResult = PARTIAL_RESPONSE;
+ }
+ }
+ }
+
+ return(dwResult);
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api DWORD | MatchResponse | Scans the responses linked-list for a response
+ keyword that matches the response.
+
+ @parm MODEMINFORMATION * | pModemInfo | The modem port handle.
+
+ @parm MSS * | pMss | ptr to a buffer to copy the Modem State Structure data
+ into. Valid on SUCCESS return.
+
+ @rdesc returns SUCCESS if there is 1 match and 0 partials.
+ Otherwise, a non-zero error code is returned:
+
+ @flag PARTIAL_RESPONSE if there no match and 1 or more partials.
+
+ @flag UNRECOGNIZED_RESPONSE if there are no matches or partials.
+
+ @flag POSSIBLE_RESPONSE if there is 1 match and 1 or more partials.
+
+*****************************************************************************/
+
+DWORD MatchResponse(MODEMINFORMATION * pModemInfo, MSS * pMss)
+{
+ PRESPONSE_NODE pRN = pModemInfo->mi_prnResponseHead;
+ DWORD dwMatch = 0; // match is defined as strings being equal up to the length of the reference string
+ // strcmpn(incoming, reference, incoming_len) == 0 && incoming_len == reference_len
+ DWORD dwPartials = 0; // partial is defined as strings being equal up to the length of the incoming string
+ // strcmpn(incoming, reference, incoming_len) == 0 && incoming_len != reference_len
+ DWORD dwResponseLength = pModemInfo->mi_cbTotalResponse;
+ LPSTR pszResponse = pModemInfo->mi_szResponse;
+
+ while(pRN)
+ {
+ if (!strncmpi(pszResponse, pRN->szResponse, dwResponseLength))
+ {
+ // match or partial?
+ if (dwResponseLength == (DWORD)(pRN->bLen + 1)) // add 1 (range = 1..256)
+ {
+ dwMatch = 1;
+ CopyMemory(pMss, &pRN->Mss, sizeof(MSS));
+ }
+ else
+ {
+ dwPartials = 1;
+ }
+ }
+ pRN = pRN->pNext;
+ }
+
+ switch ((dwMatch << 1) + dwPartials)
+ {
+ case 0: // 00 - nothing
+ return UNRECOGNIZED_RESPONSE;
+
+ case 1: // 01 - partials
+ return PARTIAL_RESPONSE;
+
+ case 2: // 10 - match
+ return SUCCESS;
+
+ case 3: // 11 - match and partials
+ return POSSIBLE_RESPONSE;
+
+ default:
+ MCXPRINTF("hit a default in MatchResponse!");
+ return UNRECOGNIZED_RESPONSE;
+ }
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api BOOL | ExpandMacros | Takes the string pszLine, and copies it to
+ lpszVal after expanding macros
+
+ @parm LPSTR | pszRegResponse | ptr to response string from registry.
+
+ @parm LPSTR | pszExpanded | ptr to buffer to copy string to w/ macros expanded
+
+ @parm LPDWORD | pdwValLen | length of pszVal w/ expanded macros.
+
+ @rdesc Returns FALSE if a needed macro translation could not be found in the
+ pMacroXlations table, TRUE otherwise.
+
+*****************************************************************************/
+
+// BUGBUG: this should be fixed to allow a max length to be passed in
+//
+BOOL ExpandMacros(LPSTR pszRegResponse,
+ LPSTR pszExpanded,
+ LPDWORD pdwValLen,
+ MODEMMACRO * pMdmMacro,
+ DWORD cbMacros)
+{
+ LPSTR pszValue;
+ DWORD cbTmp;
+ BOOL bFound;
+ LPSTR pchTmp;
+ DWORD i;
+
+ pszValue = pszExpanded;
+
+ for ( ; *pszRegResponse; )
+ {
+ // check for a macro
+ //
+ if ( *pszRegResponse == LMSCH )
+ {
+ // <cr>
+ //
+ if (!strncmpi(pszRegResponse,CR_MACRO,CR_MACRO_LENGTH))
+ {
+ *pszValue++ = CR;
+ pszRegResponse += CR_MACRO_LENGTH;
+ continue;
+ }
+
+ // <lf>
+ //
+ if (!strncmpi(pszRegResponse,LF_MACRO,LF_MACRO_LENGTH))
+ {
+ *pszValue++ = LF;
+ pszRegResponse += LF_MACRO_LENGTH;
+ continue;
+ }
+
+ // <hxx>
+ //
+ if ((pszRegResponse[1] == 'h' || pszRegResponse[1] == 'H') &&
+ isxdigit(pszRegResponse[2]) &&
+ isxdigit(pszRegResponse[3]) &&
+ pszRegResponse[4] == RMSCH )
+ {
+ *pszValue++ = (char) ((ctox(pszRegResponse[2]) << 4) + ctox(pszRegResponse[3]));
+ pszRegResponse += 5;
+ continue;
+ }
+
+ // <macro>
+ //
+ if (pMdmMacro)
+ {
+ bFound = FALSE;
+
+ // Check for a matching macro.
+ //
+ for (i = 0; i < cbMacros; i++)
+ {
+ cbTmp = lstrlenA(pMdmMacro[i].MacroName);
+ if (!strncmpi(pszRegResponse, pMdmMacro[i].MacroName, cbTmp))
+ {
+ pchTmp = pMdmMacro[i].MacroValue;
+ while (*pchTmp)
+ {
+ *pszValue++ = *pchTmp++;
+ }
+ pszRegResponse += cbTmp;
+ bFound = TRUE;
+ break;
+ }
+ }
+
+ // Did we get a match?
+ //
+ if (bFound)
+ {
+ continue;
+ }
+ } // <macro>
+ } // LMSCH
+
+ // No matches, copy the character verbatim.
+ //
+ *pszValue++ = *pszRegResponse++;
+ } // for
+
+ *pszValue = 0;
+ if (pdwValLen)
+ {
+ *pdwValLen = pszValue - pszExpanded;
+ }
+
+ return TRUE;
+}
+
+int Mystrncmp(char *dst, char *src, long count)
+{
+ while (count) {
+ if (*dst != *src)
+ return 1;
+ if (*src == 0)
+ return 0;
+ dst++;
+ src++;
+ count--;
+ }
+ return 0;
+}
+
+int strncmpi(char *dst, char *src, long count)
+{
+ while (count) {
+ if (toupper(*dst) != toupper(*src))
+ return 1;
+ if (*src == 0)
+ return 0;
+ dst++;
+ src++;
+ count--;
+ }
+ return 0;
+}
+
+
+LPSTR WINAPI
+NewLoadRegCommands(
+ HKEY hKey,
+ LPSTR szRegCommand,
+ LPSTR pszzAppend
+ )
+{
+ LPSTR pszzNew, pszStr;
+ ULONG ulAllocSize = 0;
+ HKEY hKeyCommand;
+ DWORD dwIndex;
+ char szValue[MAXUINTSTRLENGTH];
+ DWORD dwType, dwSize;
+ DWORD dwRet;
+
+ // open zee key
+ //
+ if (RegOpenKeyA(hKey, szRegCommand, &hKeyCommand)
+ != ERROR_SUCCESS)
+ {
+ DPRINTFA1("was unable to open the '%s' key in LoadRegCommands.", szRegCommand);
+ return NULL;
+ }
+
+ // Calculate size of the registry command, including null-terminators for each command.
+ //
+ dwIndex = CMD_INDEX_START;
+ do
+ {
+ wsprintfA(szValue, "%d", dwIndex);
+ if ((dwRet = RegQueryValueExA(hKeyCommand, szValue, NULL, &dwType, NULL,
+ &dwSize)) == ERROR_SUCCESS)
+ {
+ if (dwType != REG_SZ)
+ {
+ DPRINTF("command wasn't REG_SZ in LoadRegCommands.");
+ pszzNew = NULL;
+ goto Exit;
+ }
+ ulAllocSize += dwSize;
+ }
+ dwIndex++;
+ }
+ while(dwRet == ERROR_SUCCESS);
+
+ if (dwRet != ERROR_FILE_NOT_FOUND)
+ {
+ DPRINTF("RegQueryValueEx in LoadRegCommands failed for a reason besides ERROR_FILE_NOT_FOUND.");
+ pszzNew = NULL;
+ goto Exit;
+ }
+
+ // ReAllocate or Allocate memory depending on whether we are appending...
+ //
+ if (pszzAppend)
+ {
+ ULONG ulAppendSize;
+
+ if (!(ulAppendSize = LocalSize(pszzAppend)))
+ {
+ DPRINTF("failed to get the size of an append heap pointer in LoadRegCommands.");
+ pszzNew = NULL;
+ goto Exit;
+ }
+
+ // ReAllocate
+ //
+ ulAllocSize += ulAppendSize; // double-null already accounted for
+ //pszzNew = (LPSTR)LocalReAlloc(pszzAppend, ulAllocSize, LMEM_ZEROINIT);
+ if (pszzNew = (LPSTR)LocalAlloc(LMEM_ZEROINIT, ulAllocSize))
+ {
+ CopyMemory(pszzNew, pszzAppend, ulAppendSize);
+ };
+ }
+ else
+ {
+ // Allocate
+ //
+ ulAllocSize++; // double-null terminator accounting
+ pszzNew = (LPSTR)LocalAlloc(LPTR, ulAllocSize);
+ }
+
+ // Check errors for either the Alloc or ReAlloc
+ if (!pszzNew)
+ {
+ DPRINTF1("had a failure doing an alloc or a realloc in LoadRegCommands. Heap size %d",
+ ulAllocSize);
+ goto Exit; // pszzNew already NULL
+ }
+
+ // Set pszStr to point to the next location to load.
+ pszStr = pszzNew;
+ while (*pszStr) // move to next open slot in buffer if need be (append only)
+ {
+ pszStr += lstrlenA(pszStr) + 1;
+ }
+
+ // Did we go to far?
+ //
+ ASSERT ((ULONG)(pszStr - pszzNew) < ulAllocSize);
+
+ // Read in and add strings to the (rest of the) buffer.
+ //
+ dwIndex = CMD_INDEX_START;
+ dwSize = ulAllocSize - (pszStr - pszzNew);
+ do
+ {
+ wsprintfA(szValue, "%d", dwIndex);
+ if ((dwRet = RegQueryValueExA(hKeyCommand, szValue,
+ NULL, NULL, (VOID *)pszStr, &dwSize))
+ == ERROR_SUCCESS)
+ {
+ pszStr += dwSize; // includes terminating null
+ }
+ dwIndex++;
+ dwSize = ulAllocSize - (pszStr - pszzNew);
+ }
+ while (dwRet == ERROR_SUCCESS);
+
+ if (dwRet != ERROR_FILE_NOT_FOUND)
+ {
+ DPRINTF("2nd RegQueryValueEx in LoadRegCommands failed for a reason besides ERROR_FILE_NOT_FOUND.");
+ LocalFree(pszzNew);
+ pszzNew = NULL;
+ goto Exit;
+ }
+
+ // Did we go to far?
+ //
+ ASSERT ((ULONG)(pszStr - pszzNew) < ulAllocSize);
+
+ // no need to put in the final double-null null, size this buffer was already zerod.
+
+Exit:
+ RegCloseKey(hKeyCommand);
+ return pszzNew;
+}
+
+
+//****************************************************************************
+// LPSTR LoadRegCommands(MODEMINFORMATION *pModemInfo,
+// LPSTR szRegCommand, LPSTR pszzAppend)
+//
+// Function: Loads a registry command into memory. Memory is allocated if
+// pszzAppend is NULL. Memory is re-allocated/enlarged if
+// pszzAppend is not NULL. In this case, the registry command
+// will be appended to the existing buffer.
+//
+// Returns: NULL on failure.
+// A doubly-null terminated buffer of singly-null terminated strings
+// on success.
+//****************************************************************************
+
+LPSTR LoadRegCommands(MODEMINFORMATION *pModemInfo,
+ LPSTR szRegCommand,
+ LPSTR pszzAppend)
+{
+
+ return NewLoadRegCommands(
+ pModemInfo->mi_hKeyModem,
+ szRegCommand,
+ pszzAppend
+ );
+
+}
+
+char szBlindOn[] = "Blind_On"; // explicit for stack memory optimizations below
+char szBlindOff[] = "Blind_Off"; // explicit for stack memory optimizations below
+
+//****************************************************************************
+// LPSTR CreateDialCommands(MODEMINFORMATION *pModemInfo, LPSTR szPhoneNumber,
+// BOOL *fOriginate)
+//
+// Function: Create the dial strings in memory ala:
+// "<prefix> <blind_on/off> <dial prefix> <phonenumber> <dial suffix> <terminator>"
+// ... more dial strings for long phone numbers...
+// "" <- final null of a doubly null terminated list
+//
+// if no dial prefix, then return NULL
+// if no dial suffix, then don't do any commands after the first dial command
+//
+// Set fOriginate to TRUE if these dial strings will cause a connection origination.
+// FALSE otherwise.
+//
+// break lines longer then HAYES_COMMAND_LENGTH
+//
+// WARNING - this function is reall cheesy and hacked. The main reason for this
+// is that it attempts to be memory (read: stack) optimized.
+//
+// szPhoneNumber is a null terminated string of digits (0-9, $, @, W), with a possible
+// ';' at the end. The semicolon can only be at the end.
+//
+// Examples:
+//
+// "" -> originate -> ATX_DT<cr> fOriginate = TRUE
+// ";" -> dialtone detection -> ATX_DT;<cr> fOriginate = FALSE
+// "5551212" -> dial and originate -> ATX_DT5551212<cr> fOriginate = TRUE
+// "5551212;" -> dial -> ATX_DT5551212;<cr> fOriginate = FALSE
+// "123456789012345678901234567890123456789012345678901234567890"
+// -> dial and originate -> ATX_DT12345678901234567890123456789012;<cr>
+// ATX_DT3456789012345678901234567890<cr>
+// fOriginate = TRUE
+// "123456789012345678901234567890123456789012345678901234567890;"
+// -> dial -> ATX_DT12345678901234567890123456789012;<cr>
+// ATX_DT3456789012345678901234567890;<cr>
+// fOriginate = FALSE
+//
+// Returns: NULL on failure.
+// A null terminated buffer of the dial command on success.
+//****************************************************************************
+
+LPSTR
+CreateDialCommands(
+ MODEMINFORMATION *pModemInfo,
+ LPSTR szPhoneNumber,
+ BOOL *fOriginate,
+ DWORD DialOptions
+ )
+{
+// HKEY hSettingsKey;
+ DWORD dwSize;
+ DWORD dwType;
+ LPSTR pszTemp;
+ LPSTR pszDialPrefix; // ex. "ATX4DT" or "ATX3DT"
+ LPSTR pszDialSuffix; // ex. ";<cr>"
+ LPSTR pszOrigSuffix; // ex. "<cr>"
+ LPSTR pchDest, pchSrc;
+ LPSTR pszzDialCommands = NULL;
+ CHAR pszShortTemp[2];
+#ifdef DEBUG
+ static char szDialPrefix[] = "DialPrefix";
+ static char szDialSuffix[] = "DialSuffix";
+ static char szTone[] = "Tone";
+ static char szPulse[] = "Pulse";
+#endif
+ DWORD Length;
+
+ BOOL fHaveDialSuffix=TRUE;
+
+ // Figure out fOriginate
+ pchSrc = szPhoneNumber;
+ *fOriginate = TRUE;
+ while (*pchSrc)
+ {
+ if (';' == *pchSrc)
+ {
+ // make sure the string is correctly formed.
+ //
+ ASSERT(pchSrc[1] == '\0');
+
+ *fOriginate = FALSE;
+ }
+ pchSrc++;
+ }
+
+ // Trim the semicolon off the end, now that we know this is not an origination string.
+ if (!(*fOriginate))
+ {
+ ASSERT(pchSrc[-1] == ';');
+ pchSrc[-1] = 0;
+ }
+
+ // At this point, szPhoneNumber is just a string of digits to be dialed, with no semicolon at
+ // the end. Plus we know whether to originate or not.
+
+ // make some temp space
+
+ pszTemp = (LPSTR)LocalAlloc(LPTR,
+ HAYES_COMMAND_LENGTH + 1 + // pszTemp
+ HAYES_COMMAND_LENGTH + 1 + // pszDialPrefix
+ HAYES_COMMAND_LENGTH + 1 + // pszDialSuffix
+ HAYES_COMMAND_LENGTH + 1); // pszOrigSuffix
+ if (!pszTemp)
+ {
+ MCXPRINTF("out of memory.");
+ return NULL;
+ }
+ pszDialPrefix = pszTemp + HAYES_COMMAND_LENGTH + 1;
+ pszDialSuffix = pszDialPrefix + HAYES_COMMAND_LENGTH + 1;
+ pszOrigSuffix = pszDialSuffix + HAYES_COMMAND_LENGTH + 1;
+
+
+ lstrcpyA(pszDialPrefix,"");
+ //
+ // read in prefix
+ //
+ GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszDialPrefix,
+ HAYES_COMMAND_LENGTH,
+ COMMON_DIAL_COMMOND_PREFIX
+ );
+
+
+ //
+ // do we support blind dialing and do we need to set the blind dialing state?
+ //
+ if ((MDM_BLIND_DIAL & pModemInfo->mi_dwModemOptionsCap)
+ &&
+ ((DialOptions & MDM_BLIND_DIAL) != (pModemInfo->mi_dwPreferredModemOptions & MDM_BLIND_DIAL))) {
+
+ //
+ // read in blind options
+ //
+ Length=GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszDialPrefix+lstrlenA(pszDialPrefix),
+ HAYES_COMMAND_LENGTH,
+ DialOptions & MDM_BLIND_DIAL ? COMMON_DIAL_BLIND_ON : COMMON_DIAL_BLIND_OFF
+ );
+
+ if (Length == 0) {
+ MCXPRINTF1("RegQueryValueEx failed when opening %s.",
+ DialOptions & MDM_BLIND_DIAL ? szBlindOn : szBlindOff);
+ goto Failure;
+ }
+
+
+ }
+
+
+ // read in dial prefix
+
+ Length=GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszDialPrefix+lstrlenA(pszDialPrefix),
+ HAYES_COMMAND_LENGTH,
+ COMMON_DIAL_PREFIX
+ );
+
+ if (Length == 0) {
+ MCXPRINTF1("'%s' wasn't REG_SZ.", szDialPrefix);
+ goto Failure;
+ }
+
+
+ // can we do tone or pulse dialing?
+ if (MDM_TONE_DIAL & pModemInfo->mi_dwModemOptionsCap)
+ {
+ //
+ // read in dial mode (tone or pulse)
+ //
+ Length=GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszDialPrefix+lstrlenA(pszDialPrefix),
+ HAYES_COMMAND_LENGTH,
+ DialOptions & MDM_TONE_DIAL ? COMMON_DIAL_TONE : COMMON_DIAL_PULSE
+ );
+
+ if (Length == 0) {
+ MCXPRINTF1("'%s' wasn't REG_SZ.",
+ DialOptions & MDM_TONE_DIAL ? szTone : szPulse);
+ goto Failure;
+ }
+
+
+ }
+
+ //
+ // read in dial suffix
+ //
+ Length=GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszDialSuffix,
+ HAYES_COMMAND_LENGTH,
+ COMMON_DIAL_SUFFIX
+ );
+
+ if (Length <= 1) {
+
+ MCXPRINTF1("RegQueryValueEx failed when opening %s.", szDialSuffix);
+ lstrcpyA(pszDialSuffix, "");
+ fHaveDialSuffix = FALSE;
+
+ }
+
+ //
+ // read in prefix terminator
+ //
+ Length=GetCommonDialComponent(
+ pModemInfo->mi_hCommon,
+ pszOrigSuffix,
+ HAYES_COMMAND_LENGTH,
+ COMMON_DIAL_TERMINATION
+ );
+
+ if (Length != 0) {
+
+ lstrcatA(pszDialSuffix, pszOrigSuffix);
+ ASSERT(lstrlenA(pszOrigSuffix) <= lstrlenA(pszDialSuffix));
+ }
+
+
+ ASSERT ((lstrlenA(pszDialPrefix) + lstrlenA(pszDialSuffix)) <= HAYES_COMMAND_LENGTH);
+
+ // allocate space for the phone number lines
+ {
+ DWORD dwBytesAlreadyTaken = lstrlenA(pszDialPrefix) + lstrlenA(pszDialSuffix);
+ DWORD dwAvailBytesPerLine = (HAYES_COMMAND_LENGTH - dwBytesAlreadyTaken);
+ DWORD dwPhoneNumLen = lstrlenA(szPhoneNumber);
+ DWORD dwNumLines = dwPhoneNumLen ? (dwPhoneNumLen / dwAvailBytesPerLine +
+ (dwPhoneNumLen % dwAvailBytesPerLine ? 1 : 0))
+ : 1; // handle null string
+ dwSize = dwPhoneNumLen + dwNumLines * (dwBytesAlreadyTaken + 1) + 1;
+ }
+
+ MCXPRINTF1("HeapAllocate %d bytes for Dial Commands.", dwSize);
+ if (!(pszzDialCommands = (LPSTR)LocalAlloc(LPTR, dwSize)))
+ {
+ MCXPRINTF("ran out of memory and failed a HeapAllocate!");
+ goto Failure;
+ }
+
+ pchDest = pszzDialCommands; // point to the beginning of the commands
+
+ // build dial line(s):
+ // do we have a dial suffix
+ if (!fHaveDialSuffix)
+ {
+ // we can't do much except just use the whole string and pray...
+ // but, can we fit the dial string?
+ ASSERT (lstrlenA(pszDialPrefix) + lstrlenA(szPhoneNumber) +
+ lstrlenA(pszDialSuffix) <= HAYES_COMMAND_LENGTH);
+
+ // did we not want to originate?
+ ASSERT(*fOriginate);
+
+ // build it
+ lstrcpyA(pchDest, pszDialPrefix);
+ lstrcatA(pchDest, szPhoneNumber);
+ lstrcatA(pchDest, pszDialSuffix);
+ }
+ else
+ {
+ // we have a dial suffix.
+
+ // populate new pszzDialCommands with semi-colons as necessary.
+
+ // go through and add suffixi, making sure lines don't exceed HAYES_COMMAND_LENGTH
+ pchSrc = szPhoneNumber; // moves a character at a time.
+ pszShortTemp[1] = 0;
+
+ // prime the pump
+ lstrcpyA(pchDest, pszDialPrefix);
+
+ // step through the source
+ while (*pchSrc)
+ {
+ if (lstrlenA(pchDest) + lstrlenA(pszDialSuffix) + 1 > HAYES_COMMAND_LENGTH)
+ {
+ // finish up this string
+ lstrcatA(pchDest, pszDialSuffix);
+
+ // begin a new string
+ pchDest += lstrlenA(pchDest) + 1;
+ lstrcpyA(pchDest, pszDialPrefix);
+ }
+ else
+ {
+ // copy char
+ pszShortTemp[0] = *pchSrc;
+ lstrcatA(pchDest, pszShortTemp);
+ pchSrc++;
+ }
+ }
+
+ // conclude with the approprate Suffix.
+ lstrcatA(pchDest, (*fOriginate ? pszOrigSuffix : pszDialSuffix));
+ }
+
+ // close keys
+Exit:
+// RegCloseKey(hSettingsKey);
+ LocalFree(pszTemp);
+ return pszzDialCommands;
+
+Failure:
+ if (pszzDialCommands)
+ {
+ LocalFree(pszzDialCommands);
+ pszzDialCommands = NULL;
+ }
+ goto Exit;
+}
+
+
+//****************************************************************************
+// DWORD HandleCommErrors(MODEMINFORMATION *pModemInfo, ULONG ulError)
+//
+// Function: Calls ClearCommError and returns the error.
+//
+// ulError is passed in if the error(s) are already known and
+// ClearCommError doesn't need to be called.
+// If ulError is NULL then ClearCommError is called.
+//****************************************************************************
+
+DWORD HandleCommErrors(MODEMINFORMATION *pModemInfo, ULONG ulError)
+{
+ if (!ulError)
+ {
+ // failed to read or write due to a possible communication error
+ // determine if this was actually an error, or just no chars (in the read case)
+ if (!ClearCommError(pModemInfo->mi_PortHandle, &ulError, NULL))
+ {
+ // ClearCommError failed
+ MCXPRINTF("ClearCommError error");
+ return 0;
+ }
+ }
+
+#ifdef DEBUG
+ if (ulError)
+ {
+ if (ulError & CE_BREAK)
+ {MCXPRINTF("CE_BREAK");}
+ if (ulError & CE_DNS)
+ {MCXPRINTF("CE_DNS");}
+ if (ulError & CE_MODE)
+ {MCXPRINTF("CE_MODE");}
+ if (ulError & CE_OOP)
+ {MCXPRINTF("CE_OOP");}
+ if (ulError & CE_PTO)
+ {MCXPRINTF("CE_PTO");}
+ if (ulError & CE_TXFULL)
+ {MCXPRINTF("CE_TXFULL");}
+ if (ulError & CE_FRAME)
+ {MCXPRINTF("CE_FRAME");}
+ if (ulError & CE_IOE)
+ {MCXPRINTF("CE_IOE");}
+ if (ulError & CE_OVERRUN)
+ {MCXPRINTF("CE_OVERRUN");}
+ if (ulError & CE_RXOVER)
+ {MCXPRINTF("CE_RXOVER");}
+ if (ulError & CE_RXPARITY)
+ {MCXPRINTF("CE_RXPARITY");}
+ }
+ //else
+ //{
+ // MCXPRINTF("tried to read, but nothing was there.");
+ //}
+#endif // DEBUG
+
+ return ulError;
+}
+
+
+// SynchrnonizeCommConfigSettings
+//
+// Do a GetCommConfig from modem.sys and update our settings info.
+// Check to see if we need to set fSettingsInitStringsBuilt to FALSE.
+// If flagged, write down our Negotiated stuff to modem.sys using
+// SetCommConfig.
+//
+VOID SynchronizeCommConfigSettings(MODEMINFORMATION * pModemInfo,
+ BOOL fUpdateModemSys)
+{
+#define COMMCONFIG_AND_MODEMSETTINGS_LEN (60*2)
+
+ BYTE byteTmp[COMMCONFIG_AND_MODEMSETTINGS_LEN];
+ LPCOMMCONFIG lpCC = (LPCOMMCONFIG)byteTmp;
+ DWORD dwSize = sizeof(byteTmp);
+
+ ASSERT(sizeof(byteTmp) >=
+ sizeof(COMMCONFIG) + sizeof(MODEMSETTINGS));
+
+ if (GetCommConfig(pModemInfo->mi_PortHandle,
+ lpCC,
+ &dwSize) == TRUE)
+ {
+ LPMODEMSETTINGS lpMS;
+
+ lpMS = (LPMODEMSETTINGS)((LPBYTE)lpCC
+ + lpCC->dwProviderOffset);
+
+ MCXSetModemSettings(
+ pModemInfo,
+ lpMS
+ );
+
+#if 0
+ // Need to rebuild init string?
+ //
+ if (pModemInfo->mi_dwCallSetupFailTimerSetting != lpMS->dwCallSetupFailTimer
+ || pModemInfo->mi_dwInactivityTimeoutSetting != lpMS->dwInactivityTimeout
+ || pModemInfo->mi_dwSpeakerVolumeSetting != lpMS->dwSpeakerVolume
+ || pModemInfo->mi_dwSpeakerModeSetting != lpMS->dwSpeakerMode
+ || pModemInfo->mi_dwPreferredModemOptions != lpMS->dwPreferredModemOptions)
+ {
+ pModemInfo->mi_fSettingsInitStringsBuilt = FALSE;
+ }
+
+ pModemInfo->mi_dwCallSetupFailTimerSetting =
+ lpMS->dwCallSetupFailTimer;
+
+ pModemInfo->mi_dwInactivityTimeoutSetting =
+ lpMS->dwInactivityTimeout;
+
+ pModemInfo->mi_dwSpeakerVolumeSetting =
+ lpMS->dwSpeakerVolume;
+
+ pModemInfo->mi_dwSpeakerModeSetting =
+ lpMS->dwSpeakerMode;
+
+ pModemInfo->mi_dwPreferredModemOptions =
+ lpMS->dwPreferredModemOptions;
+#endif
+
+
+ if (fUpdateModemSys)
+ {
+ lpMS->dwNegotiatedModemOptions =
+ pModemInfo->mi_dwNegotiatedModemOptions;
+
+ lpMS->dwNegotiatedDCERate =
+ pModemInfo->mi_dwNegotiatedDCERate;
+
+ if (SetCommConfig(pModemInfo->mi_PortHandle,
+ lpCC,
+ sizeof(byteTmp)) != TRUE)
+ {
+ MCXPRINTF1("SetCommConfig() failed and returned %d",
+ GetLastError());
+ ASSERT(0);
+ }
+ }
+ }
+ else
+ {
+ MCXPRINTF1("GetCommConfig() failed and returned %d",
+ GetLastError());
+ ASSERT(0);
+ }
+}
+
+void WINAPI
+PrintGoodResponse(
+ HANDLE hLogFile,
+ DWORD dwID,
+ DWORD ResponseState
+ )
+
+{
+
+ char Response[128];
+ char ResponseType[128];
+ DWORD StringID;
+ INT StringLength;
+
+
+#ifndef DEBUG
+ if (!hLogFile && !TRACINGENABLED()) return;
+#endif // !DEBUG
+
+ StringID=(ResponseState >= RESPONSE_START || ResponseState <= RESPONSE_END)
+ ? (IDS_RESP_OK + ResponseState) : IDS_RESP_UNKNOWN;
+
+
+ StringLength=LoadStringA(
+ ghInstance,
+ IDS_MSGLOG_RESPONSE,
+ Response,
+ sizeof(Response)
+ );
+
+ if (StringLength == 0) {
+
+ return;
+ }
+
+ StringLength=LoadStringA(
+ ghInstance,
+ StringID,
+ ResponseType,
+ sizeof(ResponseType)
+ );
+
+ if (StringLength == 0) {
+
+ return;
+ }
+
+ LogPrintf(
+ hLogFile,
+ dwID,
+ Response,
+ ResponseType
+ );
+
+
+ D_TRACE(McxDpf(dwID,Response,ResponseType);)
+
+ D_TRACE(McxDpf(dwID,"Good Response");)
+
+}
+
+//****************************************************************************
+// PrintString
+// dwOption:
+// PS_SEND - Send prefix used
+// PS_SEND_SECURE - Send prefix used and numbers replaced with #s
+// PS_RECV - Recv prefix used
+// Send the response string to VxDWin and Log
+// We only care about seeing 50 chars under RETAIL,
+// and MAXSTRINGLENGTH * MAX_DBG_CHARS_PER_BIN_CHAR under DEBUG
+// BUGBUG - any number chars on a dialing line will be changed to #.
+// BUGBUG - this includes X3 -> X#. The extra code to handle this isn't
+// BUGBUG - worth it.
+//****************************************************************************
+
+#define MAX_DBG_CHARS_PER_BIN_CHAR 4
+#ifdef DEBUG
+#define RAWRESPONSELEN 100
+#else
+#define RAWRESPONSELEN 50 // good number for remaining chars on a line after the time stamp
+#endif
+
+void WINAPI
+PrintString(
+ HANDLE hLogFile,
+ DWORD dwID,
+ char *pchStr,
+ DWORD dwLength,
+ DWORD dwOption
+ )
+{
+ char temp[RAWRESPONSELEN + 1];
+ char *src,*dest;
+ static const char szHex[] = "0123456789abcdef";
+ int i;
+
+#ifndef DEBUG
+ if (!hLogFile && !TRACINGENABLED()) return;
+#endif // !DEBUG
+
+ i = dwLength;
+ src = pchStr;
+ dest = temp;
+
+ while (i-- && (dest - temp < RAWRESPONSELEN - MAX_DBG_CHARS_PER_BIN_CHAR))
+ {
+ // ascii printable chars are between 0x20 and 0x7e, inclusive
+ if (*src >= 0x20 && *src <= 0x7e)
+ {
+#ifdef DEBUG // only blank out digits under RETAIL
+ *dest++ = *src;
+#else // DEBUG
+ // printable text
+ if (PS_SEND_SECURE == dwOption && isdigit(*src))
+ {
+ *dest++ = '#';
+ }
+ else
+ {
+ *dest++ = *src;
+ }
+#endif // DEBUG
+ }
+ else
+ {
+ // binary
+ switch (*src)
+ {
+ case CR:
+ *dest++ = '<'; *dest++ = 'c'; *dest++ = 'r'; *dest++ = '>';
+ break;
+ case LF:
+ *dest++ = '<'; *dest++ = 'l'; *dest++ = 'f'; *dest++ = '>';
+ break;
+ default:
+ *dest++ = '<';
+ *dest++ = szHex[(*src>>4) & 0xf];
+ *dest++ = szHex[*src & 0xf];
+ *dest++ = '>';
+ }
+ }
+ src++;
+ }
+ *dest = 0;
+
+ switch (dwOption)
+ {
+ case PS_SEND:
+ case PS_SEND_SECURE:
+
+ LogString(hLogFile,dwID, IDS_MSGLOG_COMMAND, temp);
+ D_TRACE(McxDpf(dwID, "Send: %s\r\n", temp);)
+
+ break;
+
+ case PS_RECV:
+ {
+
+ char Response[128];
+ char EmptyResponse[128];
+ INT StringLength;
+
+
+
+ StringLength=LoadStringA(
+ ghInstance,
+ IDS_MSGLOG_RAWRESPONSE,
+ Response,
+ sizeof(Response)
+ );
+
+ if (StringLength == 0) {
+
+ return;
+ }
+
+ StringLength=LoadStringA(
+ ghInstance,
+ IDS_MSGLOG_EMPTYRESPONSE,
+ EmptyResponse,
+ sizeof(EmptyResponse)
+ );
+
+ if (StringLength == 0) {
+
+ return;
+ }
+
+ LogPrintf(
+ hLogFile,
+ dwID,
+ Response,
+ dwLength ? temp : EmptyResponse
+ );
+
+
+
+ D_TRACE(McxDpf(dwID,Response,
+ dwLength ? temp : EmptyResponse);)
+ }
+
+ break;
+ }
+
+}
+
+//****************************************************************************
+// void PrintCommSettings(DCB * pDcb)
+//
+// Function: Dumps a portion of the Ring0 DCB.
+//****************************************************************************
+
+void WINAPI
+PrintCommSettings(
+ HANDLE hLogFile,
+ DWORD dwID,
+ DCB * pDcb
+ )
+{
+ static const char achParity[] = "NOEMS";
+ static const char *aszStopBits[] = { "1",
+ "1.5",
+ "2" };
+
+#ifndef DEBUG
+ if (!hLogFile && !TRACINGENABLED()) return;
+#endif // !DEBUG
+
+ LogPrintf(
+ hLogFile,
+ dwID,
+ "%d,%c,%d,%s\r\n",
+ pDcb->BaudRate,
+ achParity[pDcb->Parity],
+ pDcb->ByteSize,
+ aszStopBits[pDcb->StopBits]
+ );
+
+ D_TRACE(McxDpf(dwID,
+ "%d,%c,%d,%s, ctsfl=%d, rtsctl=%d",
+ pDcb->BaudRate,
+ achParity[pDcb->Parity],
+ pDcb->ByteSize,
+ aszStopBits[pDcb->StopBits],
+ pDcb->fOutxCtsFlow,
+ pDcb->fRtsControl
+ );)
+}
+
+
+//****************************************************************************
+// void CancelPendingIOAndPurgeCommBuffers(PMODEMINFORMATION pModemInfo)
+//
+// Function: Sets CommMask to 0, waits for any I/O to complete and purges
+// buffers.
+//****************************************************************************
+
+void WINAPI
+CancelPendingIoAndPurgeCommBuffers(
+ PMODEMINFORMATION pModemInfo,
+ BOOL Purge
+ )
+{
+ // Set these, even if there isn't some I/O currently going on. We want to
+ // make sure the recv and xmit buffers are empty, plus it doesn't hurt to
+ // have the mask set to 0.
+ //
+#ifdef DEBUG
+ if (Purge) {
+
+ MCXPRINTF("CancelPendingIOAndPurgeBuffers: purging");
+
+ } else {
+
+ MCXPRINTF("CancelPendingIOAndPurgeBuffers");
+ }
+#endif
+
+ SetCommMask(pModemInfo->mi_PortHandle, 0);
+ PurgeComm(pModemInfo->mi_PortHandle, PURGE_TXABORT | PURGE_RXABORT |
+ (Purge ? (PURGE_TXCLEAR | PURGE_RXCLEAR) : 0));
+
+ if (pModemInfo->mi_timeout)
+ {
+ MCXPRINTF("CancelPendingIOAndPurgeBuffers: killing timer");
+ pModemInfo->mi_timeout = 0;
+ if (KillMdmTimer(pModemInfo->mi_dwCompletionKey,
+ (LPOVERLAPPED)pModemInfo->mi_lpOverlappedEvent) == TRUE)
+ {
+ OverPoolFree((LPOVERLAPPED)pModemInfo->mi_lpOverlappedEvent);
+ }
+ }
+
+
+ pModemInfo->mi_lpOverlappedRW=NULL;
+ pModemInfo->mi_lpOverlappedEvent=NULL;
+ //
+ // mark this io as old, so it will be ignored.
+ //
+ pModemInfo->mi_dwRWIOExpected++;
+ pModemInfo->mi_dwEventIOExpected++;
+
+ pModemInfo->mi_dwDeferedExpected++;
+}
+
+
+#ifdef VOICEVIEW
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | VVEscapeFunc | This function handles requests
+ from the VoiceView DDI
+
+ @parm MODEMINFORMATION * | hPort | port handle of modem
+
+ @parm long | function | escape code
+
+ @parm long | Indata | Optional data (escape function specific)
+
+ @rdesc Returns VVR_??? return results.
+
+ Escape functions and parameters:
+ VVF_OPEN init - pass in callback function pointer
+ VVF_CLOSE your done, bye...
+ VVF_MONITOR swithc to fclass 80
+ VVF_UNMONITOR fclass 0
+ VVF_TAKEOVER using the port
+ VVF_RELEASE no longer using
+
+ This function is called from the VoiceView DDI VxD. This is called through
+ the VCOMM modem escape function and we hook/look for any of these functions
+
+ This whole mess is so that we can put the modem into fclass 80 (voiceview)
+ and look for VV responses from the modem while no one is using it
+
+*****************************************************************************/
+int _cdecl VVEscapeFunc(MODEMINFORMATION *hPort, long lFunction, long lIndata)
+{
+ APIINFO apiInfo;
+ VMMHKEY hKeyCommand;
+ int nResult = VVS_SUCCESS;
+
+ MCXPRINTF("VVEscapeFunc");
+
+ if ( hPort == NULL ) // verify hPort
+ return( VVS_INVALID_FUNC ); // should try to catch others also
+
+ switch ( lFunction )
+ {
+ case VVF_OPEN:
+ MCXPRINTF("VVF_OPEN:");
+ // init all VoiceView info for this port
+ //--------------------------------------
+ if ( _RegOpenKeyA( hPort->mi_hKeyModem, szMonitorVVon, &hKeyCommand ) != ERROR_SUCCESS )
+ nResult = VVS_INVALID_PARM; // invalid port passed in, doesn't support VV
+ else if ( hPort->VVInfo.wState != VVSTATE_NONE )
+ nResult = VVS_BAD_STATE;
+ else if ( lIndata == NULL )
+ nResult = VVS_INVALID_PARM; // invalid func pointer
+ else
+ {
+ // set the state and the VV call back function pointer
+ hPort->VVInfo.wState = VVSTATE_INIT;
+ (DWORD)hPort->VVInfo.fpNotifyProc = (DWORD)lIndata;
+ } // end if
+ break;
+
+ case VVF_CLOSE:
+ MCXPRINTF("VVF_CLOSE:");
+ // shut down all the VoiceView stuff on this port
+ //-----------------------------------------------
+ if ( hPort->VVInfo.wState != VVSTATE_INIT )
+ nResult = VVS_BAD_STATE;
+ else
+ {
+ // re-init to default values
+ hPort->VVInfo.wState = VVSTATE_NONE;
+ hPort->VVInfo.wClass = VVCLASS_0;
+ hPort->VVInfo.dwCallBackRef = NULL;
+ hPort->VVInfo.fpNotifyProc = NULL;
+ } // end if
+ break;
+
+ case VVF_MONITOR:
+ MCXPRINTF("VVF_MONITOR:");
+ // start monitoring VoiceView activity, switch to FCLASS+80
+ //---------------------------------------------------------
+ if ( hPort->VVInfo.wState != VVSTATE_INIT )
+ nResult = VVS_BAD_STATE;
+ else
+ {
+ hPort->VVInfo.wState = VVSTATE_MONITOR;
+ hPort->VVInfo.dwCallBackRef = lIndata;
+ VVSetClass( hPort, VVCLASS_80 );
+ } // end if
+ break;
+
+ case VVF_UNMONITOR:
+ MCXPRINTF("VVF_UNMONITOR:");
+ // end monitoring VoiceView, switch to FCLASS+0
+ //---------------------------------------------
+ if ( hPort->VVInfo.wState != VVSTATE_MONITOR )
+ nResult = VVS_BAD_STATE;
+ else
+ {
+ hPort->VVInfo.wState = VVSTATE_INIT;
+ VVSetClass( hPort, VVCLASS_0 );
+ } // end if
+ break;
+
+ case VVF_TAKEOVER:
+ MCXPRINTF("VVF_TAKEOVER:");
+ // VoiceView is going to use the port
+ //-----------------------------------
+ if ( hPort->VVInfo.wState != VVSTATE_MONITOR )
+ nResult = VVS_BAD_STATE;
+ else if ( hPort->VVInfo.wClass != VVCLASS_80 )
+ nResult = VVS_BUSY; // not in VV mode
+ else
+ {
+ // setup dummy struct to call existing function
+ apiInfo.hPort = hPort; // set the port
+ apiInfo.lParam = TRUE; // turn ON takeover
+ apiInfo.hWnd = NULL; // dummy arg
+ apiInfo.msg = NULL; // dummy arg
+ apiInfo.szData[0] = NULL; // dummy arg
+
+ MCXSetPassthrough( &apiInfo );
+ } // end if
+ break;
+
+ case VVF_RELEASE:
+ MCXPRINTF("VVF_RELEASE:");
+ // VoiceView is done with the port
+ //--------------------------------
+ if ((hPort->VVInfo.wState != VVSTATE_MONITOR) || (hPort->VVInfo.wClass != VVCLASS_80))
+ nResult = VVS_BAD_STATE;
+ else
+ {
+ // setup dummy struct to call existing function
+ apiInfo.hPort = hPort; // set the port
+ apiInfo.lParam = FALSE; // turn OFF takeover
+ apiInfo.hWnd = NULL; // dummy arg
+ apiInfo.msg = NULL; // dummy arg
+ apiInfo.szData[0] = NULL; // dummy arg
+
+ MCXSetPassthrough( &apiInfo );
+
+ // reset the modem to monitor!
+ hPort->mi_ModemState = STATE_MONITORING;
+
+ ReadNotifyClient(hPort, MODEM_SUCCESS);
+ } // end if
+ break;
+
+ default:
+ MCXPRINTF("VVS_INVALID_FUNC:");
+ // this is an invalid escape
+ //--------------------------
+ nResult = VVS_INVALID_FUNC;
+ } // end switch
+
+ return( nResult );
+} // end VVEscapeFunc
+
+
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | VVCallBackFunc | This function will call the VoiceView
+ DDI callback routine
+
+ @parm MODEMINFORMATION * | hPort | port handle of modem
+
+ @parm long | function | escape code
+
+ @rdesc Returns TRUE if successful, FALSE otherwise.
+
+ async events to notify about:
+ VVR_SSV VoiceView Data Mode Start Sequence Event
+ VVR_SMD Modem Data Mode Start Sequence Event
+ VVR_SFA Facisimile Data Mode Start Sequence Event
+ VVR_SRA Receive ADSI Response Event
+ VVR_SRQ Receive Capabilities Query Event
+ VVR_SRC Receive Capabilities Information Event
+ VVR_STO Talk-off Event (VoiceView start tone w/o a de indicator)
+ VVR_SVM VoiceView Message Available
+
+ VVR_LINE_GONE call has been ended
+ VVR_LINE_BACK call is back...
+
+ VVRS_NO_CLS80_SUPPORT can't get into fclass80
+
+ When the VxD sees some of these, he will probably take over the port
+ and read or write some stuff, or he will decide to go away
+
+*****************************************************************************/
+int VVCallBackFunc(MODEMINFORMATION *hPort, WORD wFunction)
+{
+ int nResult;
+
+ MCXPRINTF("VVCallBackFunc");
+
+ if ((hPort == NULL) || // verify hPort
+ ((wFunction < VVR_FIRST) || (wFunction > VVR_LAST))) // verify func
+ return( FALSE );
+
+ // go and call the VoiceView VxD
+ //------------------------------
+ nResult = (*hPort->VVInfo.fpNotifyProc)( hPort, hPort->VVInfo.dwCallBackRef, wFunction );
+
+ return( nResult );
+} // end VVCallBackFunc
+
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | VVSetClass | This function will set the modem into the correct
+ fclass
+
+ @parm MODEMINFORMATION * | hPort | port handle of modem
+
+ @parm long | wClass | class to be set
+
+ @rdesc Returns TRUE if successful, FALSE otherwise.
+
+ We are going to put the modem into either fclass 80 (for VoiceView) or
+ going to put it into fclass 0 for normal stuff. The modem will spend
+ most if it's time in fclass80 waiting for VV stuff, but if anyone else
+ wants to use it, we put it back into fclass0
+
+*****************************************************************************/
+int VVSetClass(MODEMINFORMATION *hPort, WORD wClass)
+{
+ int nResult;
+ APIINFO apiInfo;
+
+ if ((hPort == NULL) || // verify hPort
+ ((hPort->VVInfo.wState != VVSTATE_INIT) && // verify state
+ (hPort->VVInfo.wState != VVSTATE_MONITOR)) ||
+ ((wClass != VVCLASS_0) && (wClass != VVCLASS_80))) // verify param
+ return( FALSE );
+
+ if ( hPort->VVInfo.wClass == wClass )
+ return( TRUE ); // redundent call - ignore
+
+ // setup the voiceview states correctly
+ //-------------------------------------
+ hPort->VVInfo.wClass = wClass;
+
+ if ( hPort->mi_ModemState != STATE_MONITORING )
+ return( TRUE ); // we are in a invalid state, don't switch modem
+
+ // setup dummy struct and call the Monitor function
+ //-------------------------------------------------
+ apiInfo.hPort = hPort; // set the port
+ apiInfo.lParam = FALSE; // turn OFF takeover
+ apiInfo.hWnd = NULL; // dummy arg
+ apiInfo.msg = NULL; // dummy arg
+
+ // set the continuous monitoring state
+ if ( wClass == VVCLASS_80 )
+ {
+ hPort->mi_fContinuousMonitoring = TRUE;
+ hPort->VVInfo.fContinuousMonitoring = hPort->mi_fContinuousMonitoring;
+ }
+ else // VVCLASS_0
+ {
+ // restore old continuous monitoring state
+ hPort->mi_fContinuousMonitoring = hPort->VVInfo.fContinuousMonitoring;
+ } // end if
+ *((DWORD *)(&apiInfo.szData[0])) = hPort->mi_fContinuousMonitoring; // continuously monitor?
+
+ // switch the fclass!
+ //-------------------
+ nResult = RealMonitor( &apiInfo ); // implicitly sets fclass...
+
+ if ( nResult == MODEM_PENDING )
+ {
+ DWORD hTempSem;
+
+ // wait until fclass has been switched
+ //------------------------------------
+ hPort->VVInfo.hSemaphore = Create_Semaphore( 0L );
+ hPort->VVInfo.hTimer = Set_Global_Time_Out( VVTimerCallback, TO_FIRST_CHAR_AFTER_INIT_CMD, (ULONG)hPort );
+
+ // block until command is done or time out has occured
+ MCXPRINTF("waiting for the semaphore (class switch) to complete");
+
+ Wait_Semaphore( hPort->VVInfo.hSemaphore, BLOCK_ENABLE_INTS );
+ if( hPort->VVInfo.hTimer )
+ {
+ Cancel_Time_Out( hPort->VVInfo.hTimer );
+ hPort->VVInfo.hTimer = 0;
+ }
+
+ MCXPRINTF("returned from the semaphore!");
+
+ // get rid of this semapore
+ hTempSem = hPort->VVInfo.hSemaphore;
+ hPort->VVInfo.hSemaphore = 0;
+ Destroy_Semaphore( hTempSem );
+ } // end if
+
+ return( nResult );
+} // end VVSetClass
+
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | VVTimerCallback | This function gets called when a timer
+ event happens. This routine is to be used to wait for the switching
+ into the correct fclass for a modem.
+
+ @parm hPort is passed in in edx
+
+ @rdesc Returns void
+
+ If another command comes in while we are switching the modem into
+ fclass 0 or 80, we will wait for the command to complete before issuing
+ the new command.
+
+*****************************************************************************/
+void VVTimerCallback( void )
+{
+ MODEMINFORMATION *hPort;
+
+ _asm mov [hPort], edx
+
+ // clear timer
+ hPort->VVInfo.hTimer = 0L;
+
+ MCXPRINTF("Got VV semaphore timeout!");
+ // unblock the waiting command
+ if( hPort->VVInfo.hSemaphore )
+ {
+ Signal_Semaphore( hPort->VVInfo.hSemaphore );
+ }
+
+ return;
+} // end VVTimerCallback
+
+#endif // VOICEVIEW
diff --git a/private/unimodem/tapisp/mcxutil.c b/private/unimodem/tapisp/mcxutil.c
new file mode 100644
index 000000000..fcc6fd043
--- /dev/null
+++ b/private/unimodem/tapisp/mcxutil.c
@@ -0,0 +1,781 @@
+/******************************************************************************
+
+(C) Copyright MICROSOFT Corp., 1987-1993
+
+Rob Williams, June 93 w/ State machine and parser plagarized from RAS
+
+******************************************************************************/
+
+#include "unimdm.h"
+#include "mcxp.h"
+#include "common.h"
+#include <devioctl.h>
+#include <ntddser.h>
+
+#define LOGGING_ON 1
+
+#define DEFAULT_INACTIVITY_SCALE 10 // == decasecond units
+
+
+// common code from ../rovcomm.lib
+BOOL PUBLIC OpenResponsesKey(IN HKEY hkeyDrv, OUT PHKEY phkeyResp);
+
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | FreeModem | This function deallocates a modeminfo. structure
+
+ @parm char * | pModemName | name of modem to find
+
+ @rdesc Returns TRUE if the modem is, else FALSE
+*****************************************************************************/
+
+void FreeModem(MODEMINFORMATION * pModemInfo, HANDLE hComm)
+{
+ MODEMINFORMATION * pModem;
+ SERIALPERF_STATS serialstats;
+ DWORD dwBytes;
+ DWORD dwRet;
+ OVERLAPPED ov;
+
+ RegCloseKey(pModemInfo->mi_hKeyModem);
+
+ if (pModemInfo->mi_pNonStandardDefaults)
+ {
+ ASSERT(gRegistryFlags & fGRF_PORTLATENCY);
+ LocalFree(pModemInfo->mi_pNonStandardDefaults);
+ }
+
+ if (pModemInfo->mi_pszReset)
+ {
+ LocalFree(pModemInfo->mi_pszReset);
+ }
+ if (pModemInfo->mi_pszzHangupCmds)
+ {
+ LocalFree(pModemInfo->mi_pszzHangupCmds);
+ }
+ if (pModemInfo->mi_pszzCmds &&
+ pModemInfo->mi_pszzCmds != pModemInfo->mi_pszzHangupCmds)
+ {
+ MCXPRINTF("FreeModem() had to free mi_pszzCmds because someone else didn't!");
+ LocalFree(pModemInfo->mi_pszzCmds);
+ }
+
+ // Get Statistics
+ //
+ ov.hEvent = (HANDLE)((DWORD)pModemInfo->mi_SyncReadEvent | 1);
+
+ dwRet = DeviceIoControl(hComm,
+ IOCTL_SERIAL_GET_STATS,
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &dwBytes,
+ &ov);
+
+ if (!dwRet)
+ {
+ if (ERROR_IO_PENDING == GetLastError())
+ {
+ dwRet = GetOverlappedResult(hComm,
+ &ov,
+ &dwBytes,
+ TRUE);
+ }
+ }
+
+ if (dwRet)
+ {
+ MCXPRINTF("statistics:");
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_STATISTICS);
+
+ MCXPRINTF1(" Reads : %d bytes",
+ serialstats.ReceivedCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_READSTATS,
+ serialstats.ReceivedCount);
+
+ MCXPRINTF1(" Writes: %d bytes",
+ serialstats.TransmittedCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_WRITESTATS,
+ serialstats.TransmittedCount);
+
+ if (serialstats.FrameErrorCount)
+ {
+ MCXPRINTF1(" Frame Errors: %d",
+ serialstats.FrameErrorCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_FRAMEERRORSTATS,
+ serialstats.FrameErrorCount);
+ }
+ if (serialstats.SerialOverrunErrorCount)
+ {
+ MCXPRINTF1("Serial Overrun Errors: %d",
+ serialstats.SerialOverrunErrorCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_SERIALOVERRUNERRORSTATS,
+ serialstats.SerialOverrunErrorCount);
+ }
+ if (serialstats.BufferOverrunErrorCount)
+ {
+ MCXPRINTF1("Buffer Overrun Errors: %d",
+ serialstats.BufferOverrunErrorCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_BUFFEROVERRUNERRORSTATS,
+ serialstats.BufferOverrunErrorCount);
+ }
+ if (serialstats.ParityErrorCount)
+ {
+ MCXPRINTF1(" Parity Errors: %d",
+ serialstats.ParityErrorCount);
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_PARITYERRORSTATS,
+ serialstats.ParityErrorCount);
+ }
+ }
+
+
+ if (pModemInfo->mi_SyncReadEvent != NULL) {
+
+ CloseHandle(pModemInfo->mi_SyncReadEvent);
+ }
+
+ RemoveReferenceToCommon(
+ &gCommonList,
+ pModemInfo->mi_hCommon
+ );
+
+ //
+ // close the comm handle here so all i/o will complete, and waitcommevent
+ // won't corrupt the freed ModemInfo Structure
+ //
+
+ MCXPRINTF1("Closing comm handle %08lx", hComm);
+ CloseHandle(hComm);
+
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_CLOSED);
+
+ ModemCloseLog(pModemInfo->mi_hLogFile);
+ MCXPRINTF("closed modem.");
+
+ LocalFree(pModemInfo);
+}
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api void | BuildResponsesLinkedList | This function builds a
+ linked list of the responses it finds in the registry.
+
+ @parm MODEMINFORMATION * | hPort | port handle of modem
+
+ @rdesc Returns TRUE if successful, FALSE otherwise.
+
+*****************************************************************************/
+
+
+PRESPONSE_NODE WINAPI
+NewBuildResponsesLinkedList(
+ HKEY hKey
+ )
+{
+ DWORD dwRegRet;
+ HKEY hKeyResponses;
+ DWORD dwValueSize, dwDataSize, dwDataType;
+ DWORD dwAllocSize = 0;
+ DWORD dwNumResponses;
+ DWORD dwIndex;
+ CHAR *pszTemp, *pszValue, *pszExpandedValue;
+ PRESPONSE_NODE prnNew;
+
+ PRESPONSE_NODE prnResponseHead;
+
+
+ // Open the Responses key.
+#if 0
+ if (RegOpenKeyA(hKey, szResponses, &hKeyResponses)
+ != ERROR_SUCCESS)
+#endif
+ if (!OpenResponsesKey(hKey, &hKeyResponses))
+ {
+ DPRINTF("was unable to open the Responses key.");
+ return FALSE;
+ }
+
+ // set our pszTemp to point to some heap space to be used temporarily
+ //
+ if (!(pszTemp = (LPSTR)LocalAlloc(LPTR,
+ MAX_REG_KEY_LEN + MAX_REG_KEY_LEN)))
+ {
+ DPRINTF("out of memory.");
+ RegCloseKey(hKeyResponses);
+ return FALSE;
+ }
+ pszValue = pszTemp;
+ pszExpandedValue = pszValue + MAX_REG_KEY_LEN;
+
+ // Calculate the size of the responses linked-list.
+ //
+ for (dwIndex = 0, dwValueSize = MAX_REG_KEY_LEN, dwDataSize = sizeof(MSS);
+ (dwRegRet = RegEnumValueA(hKeyResponses, dwIndex, pszValue, &dwValueSize,
+ NULL, &dwDataType, NULL, &dwDataSize))
+ == ERROR_SUCCESS;
+ dwIndex++, dwValueSize = MAX_REG_KEY_LEN, dwDataSize = sizeof(MSS))
+ {
+ // Check entry
+ //
+ if (dwDataSize != sizeof(MSS) || dwDataType != REG_BINARY)
+ {
+ DPRINTF("response data from registry was in an invalid format.");
+ goto Exit;
+ }
+
+ // expand <cr>, <lf>, <hxx>, and << macros
+ //
+ if (!ExpandMacros(pszValue, pszExpandedValue, &dwValueSize, NULL, 0))
+ {
+ DPRINTFA1("couldn't expand macro for '%s'.", pszValue);
+ goto Exit;
+ }
+
+ dwAllocSize += sizeof(struct _RESPONSE_NODE *) +
+ sizeof(MSS) +
+ sizeof(BYTE) +
+ dwValueSize;
+ }
+
+ dwNumResponses = dwIndex;
+ DPRINTF2("response count = %d, size = %d bytes", dwNumResponses, dwAllocSize);
+
+ // Did we fail in a bad way?
+ //
+ if (dwRegRet != ERROR_NO_MORE_ITEMS)
+ {
+ DPRINTF("RegEnumValue failed for another reason besides ERROR_NO_MORE_ITEMS.");
+ goto Exit;
+ }
+
+ // Allocate the linked-list memory
+ // add 1 for the null that ExpandMacros will add to the end of the last string (it is a waste!)
+ //
+ if (!(prnResponseHead = (PRESPONSE_NODE)LocalAlloc(LPTR,
+ dwAllocSize + 1)))
+ {
+ DPRINTF("out of memory (trying to alloc prnResponseHead)");
+ goto Exit;
+ }
+
+ // Read in responses and build the list
+ //
+ for (dwIndex = 0, prnNew = prnResponseHead;
+ dwIndex < dwNumResponses;
+ dwIndex++, prnNew = prnNew->pNext)
+ {
+ dwValueSize = MAX_REG_KEY_LEN;
+ dwDataSize = sizeof(MSS);
+ if ((dwRegRet = RegEnumValueA(hKeyResponses, dwIndex, pszValue, &dwValueSize,
+ NULL, &dwDataType, (BYTE *)&prnNew->Mss,
+ &dwDataSize))
+ != ERROR_SUCCESS)
+ {
+ DPRINTF2("couldn't read response #%d from the registry. (error = %d)", dwIndex, dwRegRet);
+ LocalFree(prnResponseHead);
+ goto Exit;
+ }
+
+ // expand <cr>, <lf>, <hxx>, and << macros
+ //
+ if (!ExpandMacros(pszValue, prnNew->szResponse, &dwValueSize, NULL, 0))
+ {
+ DPRINTFA1("couldn't expand macro for '%s'.", pszValue);
+ LocalFree(prnResponseHead);
+ goto Exit;
+ }
+
+ // subtract 1 for offset, ie. 255 = 256, 0 = 1,...
+ //
+ prnNew->bLen = (BYTE) dwValueSize - 1;
+
+ // Only set pNext if this isn't the last one.
+ //
+ if ((dwIndex + 1) != dwNumResponses)
+ {
+ prnNew->pNext = (PRESPONSE_NODE)((LPSTR)&prnNew->szResponse + dwValueSize);
+ }
+ }
+
+ RegCloseKey(hKeyResponses);
+ LocalFree(pszTemp);
+ return prnResponseHead;
+
+
+
+Exit:
+ RegCloseKey(hKeyResponses);
+ LocalFree(pszTemp);
+ return NULL;
+}
+
+
+
+/******************************************************************************
+
+ @doc INTERNAL
+
+ @api MODEMINFORMATION * | AllocateModem | This function allocates a MODEMINFORMATION structure
+ and fills it using information from the registry.
+
+ @parm HKEY | hKey | information registry key
+
+ @parm char * | szModemName | Modem's name
+
+ @rdesc Returns pointer to MODEMINFORMATION if successful, else NULL
+*****************************************************************************/
+
+#define ALLOCATEMODEM_TEMP_SIZE 4096
+
+MODEMINFORMATION * AllocateModem(LPTSTR szKey,
+ LPTSTR szModemName,
+ HANDLE hDevice)
+{
+ HKEY hKey;
+ DWORD dwRetSize;
+ DWORD dwType;
+ DWORD dwResult;
+ int i;
+ MODEMINFORMATION * pModemInfo;
+ CHAR * pszTemp=NULL;
+ BYTE bLogging;
+ BYTE bDeviceType;
+ static char szLogging[] = "Logging";
+ static char szLoggingPath[] = "LoggingPath";
+ static char szDriverDesc[] = "DriverDesc";
+ static char szInfPath[] = "InfPath";
+ static char szInfSection[] = "InfSection";
+ static char szReset[] = "Reset";
+ static char szDeviceType[] = "DeviceType";
+ static char szHangup[] = "Hangup";
+ static char szInactivityScale[] = "InactivityScale";
+ static char szCDWaitPeriod[] = "CDWaitPeriod";
+ static char szCompatFlags[] = "CompatibilityFlags";
+ DPRINTF1("opening modem '%s'.", szModemName);
+
+ // Open the registry key
+ //
+ if (RegOpenKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS)
+ {
+ DPRINTF("bad registry key.");
+ return NULL;
+ };
+
+ // Allocate MODEMINFORMATION structure
+ //
+ pModemInfo = (MODEMINFORMATION *)LocalAlloc(LPTR, sizeof(MODEMINFORMATION));
+ if (!pModemInfo)
+ {
+ DPRINTF("out of memory.");
+ return NULL;
+ }
+
+ pModemInfo->mi_SyncReadEvent=CreateEvent(
+ NULL,
+ TRUE,
+ FALSE,
+ NULL
+ );
+
+ if (pModemInfo->mi_SyncReadEvent == NULL) {
+
+ DPRINTF("Could not create SyncRead Event.");
+ goto Failure;
+ }
+
+ pModemInfo->mi_hCommon=OpenCommonModemInfo(
+ &gCommonList,
+ hKey
+ );
+
+ if (pModemInfo->mi_hCommon == NULL) {
+
+ DPRINTF("Could not open common info.");
+ goto Failure;
+ }
+
+ // set our pszTemp to point to some heap space to be used temporarily
+ //
+ pszTemp = (LPSTR)LocalAlloc(LPTR, ALLOCATEMODEM_TEMP_SIZE);
+ if (!pszTemp)
+ {
+ DPRINTF("out of memory.");
+ LocalFree(pModemInfo);
+ goto Failure;
+ }
+
+ // Initialize the MODEMINFORMATION structure
+ //
+ pModemInfo->mi_ModemState = STATE_UNKNOWN;
+ pModemInfo->mi_pszzCmds = NULL;
+ pModemInfo->mi_dwUnconditionalReturnValue = MODEM_NO_UNCONDITIONAL;
+ pModemInfo->mi_hKeyModem = hKey;
+
+ // Read the Logging line from the registry and turn on logging if it is present and set to 1.
+ //
+ dwRetSize = sizeof(BYTE);
+ dwResult = RegQueryValueExA(hKey, szLogging, NULL, &dwType,
+ &bLogging,
+ &dwRetSize);
+ if (dwRetSize == sizeof(BYTE) &&
+ dwResult == ERROR_SUCCESS &&
+ bLogging == LOGGING_ON)
+ {
+ dwRetSize = ALLOCATEMODEM_TEMP_SIZE;
+ if (RegQueryValueExA(hKey, szLoggingPath, NULL,
+ &dwType, (VOID *)pszTemp, &dwRetSize) != ERROR_SUCCESS ||
+ dwType != REG_SZ)
+ {
+ DPRINTF("failed to open because the filename for the log was invalid or missing.");
+// goto Failure;
+ }
+ else
+ {
+ pModemInfo->mi_hLogFile=ModemOpenLog(pszTemp);
+
+ if ((pModemInfo->mi_hLogFile)==NULL)
+ {
+ DPRINTF("failed to open the log file.");
+ }
+
+#ifdef UNICODE
+ // Convert Unicode modem name to Ansi so we can log it.
+ {
+ LPSTR szAnsiModemName;
+ DWORD dwLen;
+
+ dwLen = WideCharToMultiByte(CP_ACP,
+ 0,
+ szModemName,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL);
+
+ if (dwLen != 0)
+ {
+ szAnsiModemName = (LPSTR) LocalAlloc(LPTR, dwLen);
+ if (szAnsiModemName != NULL)
+ {
+ dwLen = WideCharToMultiByte(CP_ACP,
+ 0,
+ szModemName,
+ -1,
+ szAnsiModemName,
+ dwLen,
+ NULL,
+ NULL);
+
+ LogString(pModemInfo->mi_hLogFile,
+ pModemInfo->mi_dwID,
+ IDS_MSGLOG_OPENED,
+ szAnsiModemName);
+
+ LocalFree(szAnsiModemName);
+ }
+ }
+ }
+#else // UNICODE
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_OPENED, szModemName);
+#endif // UNICODE
+ }
+ }
+
+ //
+ // Read in the compat flags
+ //
+ dwRetSize = sizeof(DWORD);
+
+ dwResult = RegQueryValueExA(
+ hKey,
+ szCompatFlags,
+ NULL,
+ &dwType,
+ (PBYTE)&pModemInfo->mi_CompatibilityFlags,
+ &dwRetSize
+ );
+
+ if (dwRetSize != sizeof(DWORD) ||
+ dwResult != ERROR_SUCCESS )
+ {
+ // reg query failed
+ //
+ pModemInfo->mi_CompatibilityFlags=0;
+
+ }
+
+
+
+ //
+ // Read in the CD wait period
+ //
+ dwRetSize = sizeof(DWORD);
+
+ dwResult = RegQueryValueExA(
+ hKey,
+ szCDWaitPeriod,
+ NULL,
+ &dwType,
+ (PBYTE)&pModemInfo->mi_dwWaitForCDTime,
+ &dwRetSize
+ );
+
+ if (dwRetSize != sizeof(DWORD) ||
+ dwResult != ERROR_SUCCESS ||
+ 0 == pModemInfo->mi_dwWaitForCDTime)
+ {
+ // reg query failed
+ //
+ pModemInfo->mi_dwWaitForCDTime=5000;
+
+ }
+
+
+
+ // Read in the InactivityScale
+ dwRetSize = sizeof(DWORD);
+ dwResult = RegQueryValueExA(hKey, szInactivityScale, NULL, &dwType,
+ (PBYTE)&pModemInfo->mi_dwInactivityScale,
+ &dwRetSize);
+ if (dwRetSize != sizeof(DWORD) ||
+ dwResult != ERROR_SUCCESS ||
+ 0 == pModemInfo->mi_dwInactivityScale)
+ {
+ // reg query failed
+ //
+ pModemInfo->mi_dwInactivityScale = DEFAULT_INACTIVITY_SCALE;
+ }
+
+ // Get some capabilities from modem.sys.
+ {
+ LPCOMMPROP lpCommProp = (LPCOMMPROP) pszTemp;
+
+ lpCommProp->dwProvSpec1 = COMMPROP_INITIALIZED;
+ lpCommProp->wPacketLength = ALLOCATEMODEM_TEMP_SIZE;
+
+ if (GetCommProperties(hDevice, lpCommProp) == TRUE)
+ {
+ LPMODEMDEVCAPS lpModemDevCaps = (LPMODEMDEVCAPS)
+ &lpCommProp->wcProvChar[0];
+
+ pModemInfo->mi_dwModemOptionsCap = lpModemDevCaps->dwModemOptions;
+ pModemInfo->mi_dwCallSetupFailTimerCap = lpModemDevCaps->dwCallSetupFailTimer;
+ pModemInfo->mi_dwInactivityTimeoutCap = lpModemDevCaps->dwInactivityTimeout;
+ pModemInfo->mi_dwSpeakerVolumeCap = lpModemDevCaps->dwSpeakerVolume;
+ pModemInfo->mi_dwSpeakerModeCap = lpModemDevCaps->dwSpeakerMode;
+ }
+ else
+ {
+ MCXPRINTF1("GetCommProperties() failed with %d", GetLastError());
+ ASSERT(0);
+
+ pModemInfo->mi_dwModemOptionsCap = 0;
+ pModemInfo->mi_dwCallSetupFailTimerCap = 0;
+ pModemInfo->mi_dwInactivityTimeoutCap = 0;
+ pModemInfo->mi_dwSpeakerVolumeCap = 0;
+ pModemInfo->mi_dwSpeakerModeCap = 0;
+ }
+ }
+
+ pModemInfo->mi_fSettingsInitStringsBuilt = FALSE;
+
+ // Read in the Reset command, if present
+ //
+ dwRetSize = MAXSTRINGLENGTH;
+ if (RegQueryValueExA(hKey, szReset, NULL,
+ &dwType, (VOID *)pszTemp, &dwRetSize) != ERROR_SUCCESS ||
+ dwType != REG_SZ ||
+ dwRetSize <= 1)
+ {
+ DPRINTFA1("didn't find a %s (or it wasn't REG_SZ).", szReset);
+ pModemInfo->mi_pszReset = NULL;
+ }
+ else
+ {
+ LPSTR pszExpanded = pszTemp + MAXSTRINGLENGTH;
+
+ ExpandMacros(pszTemp, pszExpanded, NULL, NULL, 0);
+
+ // allocate some memory
+ //
+ if (pModemInfo->mi_pszReset = (LPSTR)LocalAlloc(LPTR,
+ lstrlenA(pszExpanded)
+ + 1))
+
+ {
+ lstrcpyA(pModemInfo->mi_pszReset, pszExpanded);
+ pModemInfo->mi_dwResetLen = lstrlenA(pModemInfo->mi_pszReset);
+ }
+ else
+ {
+ DPRINTF("_HeapAllocate failed for mi_pszReset!");
+ }
+ }
+
+ pModemInfo->mi_prnResponseHead=GetCommonResponseList(pModemInfo->mi_hCommon);
+
+#if (MAXSTRINGLENGTH > ALLOCATEMODEM_TEMP_SIZE)
+#error "MAXSTRINGLENGTH > ALLOCATEMODEM_TEMP_SIZE"
+#endif
+
+ // Write out some inf identification info for PSS
+ //
+ dwRetSize = MAXSTRINGLENGTH;
+ if (RegQueryValueExA(hKey, szDriverDesc, NULL,
+ &dwType, pszTemp, &dwRetSize) == ERROR_SUCCESS)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_DRIVERDESC, pszTemp);
+ }
+
+ dwRetSize = MAXSTRINGLENGTH;
+ if (RegQueryValueExA(hKey, szInfPath, NULL,
+ &dwType, pszTemp, &dwRetSize) == ERROR_SUCCESS)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_INFPATH, pszTemp);
+ }
+
+ dwRetSize = MAXSTRINGLENGTH;
+ if (RegQueryValueExA(hKey, szInfSection, NULL,
+ &dwType, pszTemp, &dwRetSize) == ERROR_SUCCESS)
+ {
+ LogString(pModemInfo->mi_hLogFile,pModemInfo->mi_dwID, IDS_MSGLOG_INFSECTION, pszTemp);
+ }
+
+ // Set mi_fModem based on the DeviceType
+ //
+ dwRetSize = sizeof(BYTE);
+ if (RegQueryValueExA(hKey, szDeviceType, NULL,
+ &dwType, &bDeviceType, &dwRetSize) == ERROR_SUCCESS &&
+ dwRetSize == sizeof(BYTE))
+ {
+ switch(bDeviceType)
+ {
+ case DT_NULL_MODEM:
+ case DT_PARALLEL_PORT:
+ DPRINTF("device type = Null-Modem");
+ pModemInfo->mi_fModem = FALSE;
+ break;
+
+ case DT_EXTERNAL_MODEM:
+ case DT_INTERNAL_MODEM:
+ case DT_PCMCIA_MODEM:
+ case DT_PARALLEL_MODEM:
+ default:
+ DPRINTF("device type = Modem");
+ pModemInfo->mi_fModem = TRUE;
+
+ // Load in Hangup commands
+ //
+ if (!(pModemInfo->mi_pszzHangupCmds = LoadRegCommands(pModemInfo, szHangup, NULL)))
+ {
+ DPRINTF("failed to load Hangup commands on start.");
+ goto Failure;
+ }
+ break;
+ }
+ }
+ else
+ {
+ DPRINTFA1("failed to open because the '%s' line was missing from the registry or was not the right size.", szDeviceType);
+ goto Failure;
+ }
+
+ // Create nonstandard MODEMDEFAULTS section if there is one
+ if (gRegistryFlags & fGRF_PORTLATENCY)
+ {
+ TCHAR rgtch[] = szUNIMODEM_REG_PATH TEXT("\\PortSpecific\\Defaults");
+ DWORD dwLatency = 0;
+ DWORD dwSize=sizeof(dwLatency);
+ DWORD dwType = 0;
+ HKEY hKey=NULL;
+ LONG l;
+
+ pModemInfo->mi_pNonStandardDefaults = NULL;
+
+ l=RegOpenKeyEx(
+ HKEY_LOCAL_MACHINE, // handle of open key
+ rgtch, // address of name of subkey to open
+ 0, // reserved
+ KEY_READ, // desired security access
+ &hKey // address of buffer for opened handle
+ );
+
+ if (l!=ERROR_SUCCESS) goto Success;
+
+ l=RegQueryValueEx(
+ hKey,
+ TEXT("PortLatency"),
+ NULL,
+ &dwType,
+ (LPBYTE) &dwLatency,
+ &dwSize
+ );
+ if ( l==ERROR_SUCCESS
+ && dwType == REG_DWORD
+ && dwSize == sizeof(dwLatency)
+ && dwLatency < 20000)
+ {
+ MODEMDEFAULTS * pMD = LocalAlloc(LPTR, sizeof (MODEMDEFAULTS));
+ if (pMD)
+ {
+ pMD->dwFlags = 0;
+ pMD->dwPortLatency = dwLatency;
+ pModemInfo->mi_pNonStandardDefaults = pMD;
+ }
+ DPRINTF2(
+ "WARNING: [%s]: NON STANDARD PORT LATENCY: %lu",
+ szModemName,
+ dwLatency
+ );
+ }
+ RegCloseKey(hKey); hKey = NULL;
+ }
+
+
+Success:
+ // free temp memory
+ //
+ if (pszTemp) LocalFree(pszTemp);
+ return (pModemInfo);
+
+Failure:
+
+ if (pModemInfo->mi_SyncReadEvent != NULL) {
+
+ CloseHandle(pModemInfo->mi_SyncReadEvent);
+ }
+
+ if (pModemInfo->mi_hCommon != NULL) {
+
+ RemoveReferenceToCommon(
+ &gCommonList,
+ pModemInfo->mi_hCommon
+ );
+ }
+
+ ModemCloseLog(pModemInfo->mi_hLogFile);
+ LocalFree(pModemInfo);
+ pModemInfo = NULL;
+ goto Success;
+}
diff --git a/private/unimodem/tapisp/mdmasyn.c b/private/unimodem/tapisp/mdmasyn.c
new file mode 100644
index 000000000..bc2a99c13
--- /dev/null
+++ b/private/unimodem/tapisp/mdmasyn.c
@@ -0,0 +1,1325 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: mdmasyn.c
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 5/4/95 Viroon Touranachun Moved from modem.c
+//
+//
+// Description: Asynchronous thread entry and state machine
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+
+typedef struct tagMdmThrd {
+ struct tagMdmThrd* pNext;
+ HANDLE hThrd;
+ DWORD tid;
+} MDMTHRD, *PMDMTHRD;
+
+// Global asynchronous elements
+//
+PMDMTHRD gpMdmThrdList = NULL;
+HANDLE ghCompletionPort = NULL;
+
+extern MDMLIST gMdmList;
+
+void MdmCompleteAsync (PLINEDEV pLineDev, DWORD dwStatus, DWORD dwAsyncID);
+void HandleMdmError (PLINEDEV pLineDev, DWORD dwStatus);
+DWORD DetectDialtone (PLINEDEV pLineDev);
+
+VOID WINAPI
+ProcessRings(
+ PLINEDEV pLineDev,
+ DWORD Type
+ );
+
+
+//****************************************************************************
+// DWORD InitializeMdmThreads()
+//
+// Function: Initialize threads to handle modem's asynchronous operations.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************/
+
+DWORD InitializeMdmThreads()
+{
+ PMDMTHRD pMdmThrd;
+ DWORD dwRet = ERROR_SUCCESS; // assume success
+ SYSTEM_INFO systeminfo;
+ DWORD dwNumThreadsRunning = 0;
+
+ // We are going to create a thread per processor, so get the system info
+ // which contains the number of processors in the system.
+ //
+ GetSystemInfo(&systeminfo);
+
+ // Create the completion port. This starts without any file handles being
+ // associated with it.
+ //
+ ASSERT(ghCompletionPort == NULL);
+ ghCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE,
+ NULL,
+ 0,
+ 0);
+ if (ghCompletionPort == NULL)
+ {
+ dwRet = GetLastError();
+ DPRINTF1("CreateIoCompletionPort failed with %d", dwRet);
+ }
+ else
+ {
+ // Create the threads.
+ //
+ while (dwNumThreadsRunning < systeminfo.dwNumberOfProcessors)
+ {
+ if ((pMdmThrd = (PMDMTHRD)LocalAlloc(LPTR, sizeof(*pMdmThrd))) != NULL)
+ {
+ // Create thread
+ //
+ pMdmThrd->hThrd = CreateThread(NULL, // default security
+ 0, // default stack size
+ MdmAsyncThread, // thread entry point
+ pMdmThrd, // thread info
+ CREATE_SUSPENDED, // Start suspended
+ &pMdmThrd->tid); // thread id
+
+ if (pMdmThrd->hThrd != NULL)
+ {
+ dwNumThreadsRunning++;
+
+ // Put it in the thread list
+ //
+ pMdmThrd->pNext = gpMdmThrdList;
+ gpMdmThrdList = pMdmThrd;
+
+ DPRINTF1("Async Thread id: %x was created but suspended", pMdmThrd->tid);
+
+ // Send thread on its way...
+ //
+ ResumeThread(pMdmThrd->hThrd);
+
+ DPRINTF1("Async Thread id: %x is in operation", pMdmThrd->tid);
+ }
+ else
+ {
+ LocalFree(pMdmThrd);
+
+ // If we were able to get at least one thread going, indicate success.
+ //
+ if (dwNumThreadsRunning == 0)
+ {
+ DPRINTF("InitializeMdmThreads was unable to create all of the threads! (CreateThread failed)");
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+ break;
+ }
+ }
+ else
+ {
+ // If we were able to get at least one thread going, indicate success.
+ //
+ if (dwNumThreadsRunning == 0)
+ {
+ DPRINTF("InitializeMdmThreads was unable to create all of the threads! (LocalAlloc failed)");
+ dwRet = ERROR_OUTOFMEMORY;
+ }
+ break;
+ }
+ }
+ }
+
+ // If we failed in some way, delete the completion port, it isn't being used.
+ //
+ if (dwRet != ERROR_SUCCESS)
+ {
+ ASSERT(dwNumThreadsRunning == 0);
+
+ if (ghCompletionPort != NULL)
+ {
+ CloseHandle(ghCompletionPort);
+ ghCompletionPort = NULL;
+ }
+ }
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD DeinitializeMdmThreads()
+//
+// Function: Deinitialize threads to handle modem's asynchronous operations.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************/
+
+DWORD DeinitializeMdmThreads()
+{
+ PMDMTHRD pMdmThrd;
+ DWORD dwCount = 0;
+ HANDLE WaitHandles[MAXIMUM_WAIT_OBJECTS];
+
+ DPRINTF("DeinitializeMdmThreads() called.");
+
+ // Post a termination request to the completion port.
+ // Do one for each thread running. Keep count for later in this routine.
+ //
+ pMdmThrd = gpMdmThrdList;
+ while (pMdmThrd)
+ {
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0), // indicates nothing
+ 0, // indicates this is a termination message
+ NULL); // indicates nothing
+ dwCount++;
+
+ pMdmThrd = pMdmThrd->pNext;
+ }
+
+ ASSERT(dwCount <= MAXIMUM_WAIT_OBJECTS); // Make sure the world hasn't turned upside down.
+
+ // Do a WaitForMultipleObjects on all of the thread handles to wait for
+ // them to complete.
+ //
+ // Build array to wait on.
+ //
+ dwCount = 0;
+ pMdmThrd = gpMdmThrdList;
+ while (pMdmThrd)
+ {
+ WaitHandles[dwCount++] = pMdmThrd->hThrd;
+
+ pMdmThrd = pMdmThrd->pNext;
+ }
+
+ WaitForMultipleObjects(dwCount, // number of threads to wait to end
+ WaitHandles, // array of threads
+ TRUE, // wait until all have been terminated
+ INFINITE); // wait forever, if necessary
+
+ while (pMdmThrd = gpMdmThrdList)
+ {
+ CloseHandle(pMdmThrd->hThrd);
+
+ gpMdmThrdList = pMdmThrd->pNext;
+ LocalFree(pMdmThrd);
+ }
+
+ //
+ // close completion port handle
+ //
+ CloseHandle(ghCompletionPort);
+
+ DPRINTF("Async Threads terminated succesfully.");
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD APIENTRY MdmAsyncThread (PMDMTHRD)
+//
+// Function: An entry point to the asynchronous modem thread.
+//
+// Returns: None
+//
+//****************************************************************************/
+
+DWORD APIENTRY MdmAsyncThread (PMDMTHRD pMdmThrd)
+{
+ DWORD dwNumberOfBytesTransferred;
+ DWORD dwCompletionKey;
+ LPOVERLAPPED lpOverlapped;
+ PLINEDEV pLineDev;
+
+ DPRINTF1("Async thread id: %x is running", pMdmThrd->tid);
+
+ ASSERT(ghCompletionPort != NULL);
+
+ // Read from the completion port until we get signalled to exit the thread.
+ // This is done by having a completion posted that has a dwCompletionKey of 0.
+ // dwCompletionKey is normally the pLineDev associated with an operation.
+ //
+ for (;;)
+ {
+ if (GetQueuedCompletionStatus(ghCompletionPort,
+ &dwNumberOfBytesTransferred,
+ &dwCompletionKey,
+ &lpOverlapped,
+ (DWORD)-1) == FALSE &&
+ lpOverlapped == NULL)
+ {
+ DPRINTF1("GetQueuedCompletionStatus() returned FALSE and lpOverlapped was NULL (GetLastError() = %d)",
+ GetLastError());
+ ASSERT(0);
+ continue;
+ }
+
+ TRACE4(
+ IDEVENT_CP_GET,
+ dwNumberOfBytesTransferred,
+ dwCompletionKey,
+ lpOverlapped
+ );
+
+ if (dwCompletionKey == 0)
+ {
+ DPRINTF1("Async Thread id: %d being asked to exit", pMdmThrd->tid);
+ break; // NULL dwCompletionKey indicates we were asked to terminate.
+ }
+ else
+ {
+ pLineDev = (PLINEDEV)dwCompletionKey;
+ CLAIM_LINEDEV(pLineDev);
+
+ // BUGBUG: CCaputo 2/20/96: pLineDev could have disappeard.
+ // BUGBUG: Might want to do something here to verify existence.
+
+ // Is this completion for the upper layer state machine (unimdm) or the
+ // lower layer state machine (mcx)?
+ //
+ if (lpOverlapped == NULL)
+ {
+ DWORD dwType = CP_TYPE(dwNumberOfBytesTransferred);
+ if (dwType != 0) {
+ //
+ // it is a ring related event
+ //
+ ProcessRings(
+ pLineDev,
+ dwType
+ );
+
+ } else {
+ //
+ // Is the purpose of this completion to signal an event or
+ // continue in the normal unimdm state machine?
+ //
+ if (pLineDev->hSynchronizeEvent == NULL)
+ {
+ DWORD dwPendingID;
+
+ dwPendingID = pLineDev->McxOut.dwReqID;
+ pLineDev->McxOut.dwReqID = MDM_ID_NULL;
+
+ // Call the operation handler
+ //
+ MdmCompleteAsync(pLineDev, pLineDev->McxOut.dwResult, dwPendingID);
+ }
+ else
+ {
+ SetEvent(pLineDev->hSynchronizeEvent);
+ }
+ }
+ }
+ else
+ {
+ // non-NULL lpOverlapped indicates this is for MCXAsyncComplete()
+ //
+ if (pLineDev->hModem)
+ {
+ MCXAsyncComplete (pLineDev->hModem, lpOverlapped);
+ }
+
+ OverPoolFree(lpOverlapped);
+ }
+
+ RELEASE_LINEDEV(pLineDev);
+ }
+ }
+
+ // Exit the thread properly
+ //
+ DPRINTF1("Async Thread id: %d exits", pMdmThrd->tid);
+ ExitThread(ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+
+//
+// Rings are handle here instead of the main async handler beacuse they get built
+// up in the completion port and extra one mess up the state machine
+//
+VOID WINAPI
+ProcessRings(
+ PLINEDEV pLineDev,
+ DWORD Type
+ )
+
+{
+
+
+ switch (pLineDev->DevState) {
+
+ case DEVST_PORTLISTENING:
+ //
+ // The line is being monitored and the first ring is coming in.
+ //
+
+ // Make sure call hasn't already been allocated.
+ // If this isn't the first set of rings, then make
+ // sure the previous "hdcall" has been deallocated.
+ // In other words, ignore rings until this happens!
+ //
+ if (pLineDev->dwCall & CALL_ALLOCATED)
+ {
+ TSPPRINTF("RING ignored because IDLE call hasn't been deallocated!");
+ break;
+ };
+
+ // We need to notify a new call to TAPI
+ //
+ (*(pLineDev->lpfnEvent))(pLineDev->htLine, NULL, LINE_NEWCALL,
+ (DWORD)pLineDev,
+ (DWORD)((LPHANDLE)&(pLineDev->htCall)),
+ 0);
+
+ // Allocate the call
+ //
+ pLineDev->dwCall = CALL_ALLOCATED | CALL_INBOUND | CALL_ACTIVE;
+
+ // Then offer the call to TAPI
+ //
+ pLineDev->DevState = DEVST_PORTLISTENOFFER;
+
+ // OR in UNKNOWN since we don't know what kind of media mode this call is
+ //
+ pLineDev->dwCurMediaModes = pLineDev->dwDetMediaModes | LINEMEDIAMODE_UNKNOWN;
+
+ // default our bearermode to be what we support, excluding the passthrough bit
+ //
+ pLineDev->dwCurBearerModes = pLineDev->dwBearerModes & ~LINEBEARERMODE_PASSTHROUGH;
+
+ // Notify TAPI
+ //
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_OFFERING, 0);
+
+ //
+ // fall through
+ //
+
+
+ case DEVST_PORTLISTENOFFER:
+ {
+ //
+ // A ring is coming in (either the first ring or a subsequent one.)
+ // Handle the ring count
+ //
+ DWORD dwCurrent = GETTICKCOUNT();
+
+ // If this is the second or greater ring,
+ // then we may have a timer to kill.
+ //
+ if (pLineDev->dwRingCount)
+ {
+ KillMdmTimer((DWORD)pLineDev, NULL);
+
+ // Check whether the timeout expired
+ //
+ if (GTC_DELTA(pLineDev->dwRingTick, dwCurrent) >= TO_MS_RING_SEPARATION)
+ {
+ // Timeout has expired, indicating call has stopped ringing
+ //
+ pLineDev->dwRingTick = 0;
+ pLineDev->dwRingCount = 0;
+ pLineDev->DevState = DEVST_PORTLISTENING;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+ break;
+ };
+ };
+
+ pLineDev->dwRingCount++;
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_LINEDEVSTATE,
+ LINEDEVSTATE_RINGING, 1L, pLineDev->dwRingCount);
+ TSPPRINTF1("RING#%d notfied", pLineDev->dwRingCount);
+
+ pLineDev->dwRingTick = dwCurrent;
+ if (SetMdmTimer((DWORD)pLineDev, NULL, TO_MS_RING_SEPARATION)
+ != ERROR_SUCCESS)
+ {
+ TSPPRINTF("SetTimer failed!");
+ }
+ break;
+ }
+
+ default:
+
+ TSPPRINTF("ProcessRings: extra ring queued!");
+
+ break;
+
+ } // switch
+
+ return;
+
+}
+
+
+
+
+//****************************************************************************
+// void MdmCompleteAsync(PLINEDEV, DWORD, DWORD)
+//
+// Function: A caller invokes this function when it receives WM_COMNOTIFY
+// message in order to complete the pending asynchronous operation
+// or asynchronous event.
+//
+// Note: The dialing process is pretty complex. See dialing.txt for more info.
+//
+// Returns: nothing
+//
+//****************************************************************************
+
+void MdmCompleteAsync (PLINEDEV pLineDev, DWORD dwStatus, DWORD dwAsyncID)
+{
+ DWORD dwRet;
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+ TSPPRINTF2("MdmCompleteAsync services id: %d status: %d", dwAsyncID, dwStatus);
+
+ // We only care about messages we are expecting or
+ // MDM_ID_NULL (unexpected) messages
+ //
+ if (dwAsyncID != MDM_ID_NULL)
+ {
+ if (pLineDev->dwVxdPendingID == dwAsyncID)
+ {
+ // Reset the pending ID, except for when we are doing
+ // continuous monitoring from the VxD.
+ //
+ if (DEVST_PORTLISTENING != pLineDev->DevState &&
+ DEVST_PORTLISTENOFFER != pLineDev->DevState)
+ {
+ pLineDev->dwVxdPendingID = MDM_ID_NULL;
+ };
+ }
+ else
+ {
+ TSPPRINTF1("rejecting obsolete async id: %d", dwAsyncID);
+ return;
+ };
+ };
+
+ // Messages from the VxD when we are in takeover mode are used to do the
+ // async completion for the switch to takeover mode.
+ //
+ if (pLineDev->fTakeoverMode)
+ {
+ if (pLineDev->dwPendingID != INVALID_PENDINGID)
+ {
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_ON);
+ pLineDev->DevState = DEVST_CONNECTED;
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, ERROR_SUCCESS);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_CONNECTED, 0);
+ };
+ return;
+ };
+
+ // If it is the success notification, we continue the state machine
+ //
+ if (MDM_SUCCESS == dwStatus)
+ {
+ do
+ {
+ // Yes, it is. Determine the current line state
+ //
+ dwRet = ERROR_IO_PENDING;
+
+ switch (pLineDev->DevState)
+ {
+ case DEVST_PORTLISTENINIT:
+ //
+ // Put modem to non-continuous Monitor
+ //
+ pLineDev->DevState = DEVST_PORTLISTENING;
+ pLineDev->dwRingCount = 0;
+ pLineDev->dwRingTick = 0;
+
+ // Start monitoring the line
+ //
+ dwRet = UnimodemMonitor(pLineDev, MONITOR_CONTINUOUS);
+ break;
+
+ case DEVST_PORTSTARTPRETERMINAL:
+ //
+ // Start the terminal screen
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+ dwRet = ERROR_SUCCESS;
+
+ // Turn-on passthrough mode
+ //
+ if (UnimodemSetPassthrough(pLineDev, PASSTHROUGH_ON) == ERROR_SUCCESS)
+ {
+ // Put the terminal screen up here
+ //
+ pLineDev->DevState = DEVST_PORTPRETERMINAL;
+
+ if (TerminalDialog(pLineDev) == ERROR_SUCCESS)
+ {
+ // Wait until the terminal screen completes
+ //
+ dwRet = ERROR_IO_PENDING;
+ };
+ };
+ break;
+
+ case DEVST_PORTPRETERMINAL:
+ //
+ // Destroy the terminal window
+ //
+ DestroyTerminalDialog(pLineDev);
+
+ // Turn-off passthrough mode
+ //
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_OFF);
+
+ // Put it to init mode
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+ dwRet = UnimodemInit(pLineDev);
+ break;
+
+ case DEVST_PORTCONNECTINIT:
+ //
+ // The modem was sucessfully initialized for dialing out.
+ //
+ if (!pLineDev->InitStringsAreValid) {
+ //
+ // some one call lineSetDevConfig, redo the init
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+ dwRet = UnimodemInit(pLineDev);
+
+ break;
+ }
+
+
+ pLineDev->DevState = DEVST_PORTCONNECTDIALTONEDETECT;
+ pLineDev->dwCall |= CALL_ACTIVE;
+
+ // Detect dialtone
+ //
+ dwRet = DetectDialtone(pLineDev);
+ break;
+
+ case DEVST_PORTCONNECTWAITFORLINEDIAL:
+ case DEVST_PORTCONNECTDIALTONEDETECT:
+ //
+ // The dialtone was detected or we did not need to detect it. Now we
+ // are ready to dial.
+ //
+ // Note: The dialing process is pretty complex.
+ // (See dialing.txt for more info.)
+ //
+ pLineDev->dwCall |= CALL_ACTIVE;
+
+ // Check for needed async completion.
+ // (for the lineMakeCall)
+ //
+ if (pLineDev->dwPendingID != INVALID_PENDINGID &&
+ pLineDev->dwPendingType == PENDING_LINEMAKECALL)
+ {
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, 0L);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DIALTONE, LINEDIALTONEMODE_UNAVAIL);
+ };
+
+ // Fall through to common code path
+ //
+ case DEVST_MANUALDIALING:
+ //
+ // If it is an originate address (no semi-colone at the end,) this is
+ // the last string we are dialing before connecting.
+ //
+ if (IsOriginateAddress(pLineDev->szAddress))
+ {
+ // If we re-enter after manual dialing,
+ // do not repeat manual dialing
+ //
+ if (pLineDev->DevState != DEVST_MANUALDIALING)
+ {
+ // Don't optimize this and the one below!!! (see lineGetCallStatus)
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTING;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DIALING, 0);
+
+ // Handle Manual Dial
+ //
+ if (GETOPTIONS(pLineDev->pDevCfg) & MANUAL_DIAL)
+ {
+
+ // bring up modal manual dial dialog,
+ // it will return ERROR_SUCCESS or a non-pending error code
+ // when it is done...
+ //
+ dwRet = ManualDialog(pLineDev);
+
+ // If there is no error, wait for dialog to finish
+ //
+ if (ERROR_SUCCESS == dwRet)
+ {
+ dwRet = ERROR_IO_PENDING;
+ pLineDev->DevState = DEVST_MANUALDIALING;
+ };
+ break;
+ };
+ }
+ else
+ {
+ *pLineDev->szAddress = '\0';
+
+ // We finish manual dialing, continue
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTING;
+ };
+
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_PROCEEDING, 0);
+
+ // Handle INTERACTIVEVOICE
+ //
+ if (LINEMEDIAMODE_INTERACTIVEVOICE == pLineDev->dwCurMediaModes)
+ {
+ // if we have partial dialing capability and enough room to do it,
+ // then make it so we wait indefinitely.
+ //
+ if (pLineDev->fPartialDialing &&
+ lstrlenA(pLineDev->szAddress) + lstrlenA(szSemicolon)
+ < sizeof(pLineDev->szAddress))
+ {
+ lstrcatA(pLineDev->szAddress, szSemicolon);
+ };
+
+ // bring up talk drop dialog,
+ //
+ if ((dwRet = TalkDropDialog(pLineDev)) == ERROR_SUCCESS)
+ {
+ // Don't dial if we are MANUAL dialing.
+ //
+ if (!(GETOPTIONS(pLineDev->pDevCfg) & MANUAL_DIAL))
+ {
+ // Dial the number and either:
+ // 1) wait indefinitely, if we support partial dialing, or
+ // 2) begin busy monitoring for several seconds
+ // (register S7, dwCallSetupFailTimer)
+ //
+ if ((dwRet = UnimodemDial(pLineDev, pLineDev->szAddress, pLineDev->dwDialOptions))
+ == ERROR_IO_PENDING)
+ {
+ pLineDev->DevState = DEVST_TALKDROPDIALING;
+ };
+ }
+ else
+ {
+ // Wait until the user takes an action
+ //
+ dwRet = ERROR_IO_PENDING;
+ };
+ };
+ };
+ }
+ else
+ {
+ // Don't optimize this and the one above!!! (see lineGetCallStatus)
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTDIAL;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DIALING, 0);
+ };
+
+ // INTERACTIVEVOICE Originate's are handled above!
+ //
+ if (LINEMEDIAMODE_INTERACTIVEVOICE != pLineDev->dwCurMediaModes ||
+ DEVST_PORTCONNECTDIAL == pLineDev->DevState)
+ {
+ // Do we have anything useful to dial? (more than just ";"?)
+ //
+ if (lstrcmpA(pLineDev->szAddress, szSemicolon))
+ {
+ // Start the dialing process
+ //
+ dwRet = UnimodemDial(pLineDev, pLineDev->szAddress, pLineDev->dwDialOptions);
+ }
+ else
+ {
+ // just skip to the next stage
+ //
+ dwRet = ERROR_SUCCESS;
+ };
+ }
+
+ // Check for needed async completion.
+ // (for the lineDial)
+ //
+ if (pLineDev->dwPendingID != INVALID_PENDINGID &&
+ pLineDev->dwPendingType == PENDING_LINEDIAL)
+ {
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, 0L);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ };
+
+ break;
+
+ case DEVST_PORTCONNECTDIAL:
+ //
+ // The line was previously dialed with a non-originate address
+ // Wait for another lineDial
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTWAITFORLINEDIAL;
+ pLineDev->dwCall |= CALL_ACTIVE;
+
+ // Send up another LINECALLSTATE_DIALING so that app knows
+ // to check the call status to see that lineDial is usable again.
+ //
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DIALING, 0);
+ break;
+
+ case DEVST_TALKDROPDIALING:
+ //
+ // Result from UnimodemDial
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTING;
+
+ // Only pay attention to these messages if we are actually originating
+ // (monitoring) or if it is an error from the partial dial.
+ // (ignore MDM_SUCCESS from partial dial)
+ //
+ if (IsOriginateAddress(pLineDev->szAddress))
+ {
+ DestroyTalkDropDialog(pLineDev);
+ dwRet = ERROR_SUCCESS;
+ }
+ break;
+
+
+ case DEVST_PORTCONNECTING:
+ //
+ // The modem sucessfully dial the originate address.
+ // The modem is connected.
+ //
+ pLineDev->DevState = DEVST_PORTLISTENANSWER;
+ dwRet = ERROR_SUCCESS;
+
+ // Post-dial Terminal Mode
+ //
+ if (GETOPTIONS(pLineDev->pDevCfg) & TERMINAL_POST)
+ {
+ pLineDev->DevState = DEVST_PORTPOSTTERMINAL;
+ if (TerminalDialog(pLineDev) == ERROR_SUCCESS)
+ {
+ dwRet = ERROR_IO_PENDING;
+ };
+ };
+ break;
+
+ case DEVST_PORTPOSTTERMINAL:
+ //
+ // Destroy the termnal window
+ //
+ DestroyTerminalDialog(pLineDev);
+ pLineDev->DevState = DEVST_PORTLISTENANSWER;
+ dwRet = ERROR_SUCCESS;
+ break;
+
+ case DEVST_PORTLISTENANSWER:
+ //
+ // The modem is connected (with either incoming or outgoing call.)
+ // Ready to notify TAPI of the connected line.
+ //
+ // Treat INTERACTIVEVOICE connections differently.
+ //
+ if (LINEMEDIAMODE_INTERACTIVEVOICE != pLineDev->dwCurMediaModes)
+ {
+ // Get the call information
+ //
+ UnimodemGetNegotiatedRate(pLineDev, (LPDWORD)&pLineDev->dwNegotiatedRate);
+
+ //
+ // Start monitoring the remote disconnection here
+ //
+ UnimodemMonitorDisconnect(pLineDev);
+
+ // Do we need to lauch modem light?
+ // We launch the light when the light was selected.
+ //
+ if (!IS_NULL_MODEM(pLineDev) &&
+ (GETOPTIONS(pLineDev->pDevCfg) & LAUNCH_LIGHTS))
+ {
+ HANDLE hLight;
+
+ if (LaunchModemLight(pLineDev->szDeviceName,
+ pLineDev->hDevice,
+ &hLight) == ERROR_SUCCESS)
+ pLineDev->hLights = hLight;
+ };
+ };
+
+ // Notify TAPI of the connected line
+ //
+ pLineDev->DevState = DEVST_CONNECTED;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_CONNECTED, 0);
+ break;
+
+ case DEVST_DISCONNECTING:
+
+ TSPPRINTF("Setting Drop Event");
+
+
+ SetEvent(
+ pLineDev->DroppingEvent
+ );
+
+// case DEVST_DISCONNECTED:
+ //
+ // The modem was hung up successfully.
+ //
+ if (pLineDev->dwPendingID != INVALID_PENDINGID)
+ {
+ // Notify TAPI of the idle line
+ //
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+
+ (*(gfnCompletionCallback))(pLineDev->dwPendingID, 0L);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ };
+
+ pLineDev->DevState = DEVST_DISCONNECTED;
+
+ break;
+
+ default:
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ break;
+ };
+
+ // We may have a new failure
+ //
+ if ((dwRet != ERROR_IO_PENDING) && (dwRet != ERROR_SUCCESS))
+ {
+ dwStatus = MDM_FAILURE;
+ };
+
+ } while (dwRet == ERROR_SUCCESS);
+ };
+
+ // Handle failure
+ //
+ if ((dwStatus != MDM_SUCCESS) && (dwStatus != MDM_PENDING))
+ {
+ HandleMdmError(pLineDev, dwStatus);
+ };
+ return;
+}
+
+//****************************************************************************
+// DWORD MdmAsyncContinue(PLINEDEV, DWORD)
+//
+// Function: continues the next state for the modem device
+//
+// Returns: ERROR_SUCCESS
+//
+//****************************************************************************
+
+DWORD MdmAsyncContinue (PLINEDEV pLineDev, DWORD dwStatus)
+{
+ pLineDev->dwVxdPendingID++;
+ pLineDev->McxOut.dwReqID = pLineDev->dwVxdPendingID;
+ pLineDev->McxOut.dwResult = dwStatus;
+
+ PostQueuedCompletionStatus(ghCompletionPort,
+ CP_BYTES_WRITTEN(0),
+ (DWORD)pLineDev,
+ NULL);
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// void HandleMdmError(PLINEDEV, DWORD)
+//
+// Function: Handles the modem line when the status is not successful.
+//
+// Returns: nothing
+//
+//****************************************************************************
+
+void HandleMdmError(PLINEDEV pLineDev, DWORD dwStatus)
+{
+ // Do we have a call?
+ //
+ if ((pLineDev->dwCall & CALL_ALLOCATED) &&
+ (pLineDev->dwCallState != LINECALLSTATE_DISCONNECTED))
+ {
+ DWORD dwDisconnectMode = 0;
+ LONG lAsyncResult = 0;
+
+ // Terminate all UI windows
+ //
+ DestroyTalkDropDialog(pLineDev);
+ DestroyManualDialog(pLineDev);
+
+ // Determine the failure
+ //
+ switch (dwStatus)
+ {
+ case MDM_HANGUP:
+ //
+ // The line is disconnected remotely, or the user cancel the line
+ // Destroy the terminal window
+ //
+
+ if ((DEVST_PORTPRETERMINAL == pLineDev->DevState)
+ ||
+ (DEVST_PORTPOSTTERMINAL == pLineDev->DevState)) {
+
+ DestroyTerminalDialog(pLineDev);
+ lAsyncResult = LINEERR_OPERATIONFAILED;
+ }
+
+ dwDisconnectMode = LINEDISCONNECTMODE_NORMAL;
+ break;
+
+ case MDM_BUSY:
+ //
+ // We dialed out and the line is busy
+ //
+ dwDisconnectMode = LINEDISCONNECTMODE_BUSY;
+ break;
+
+ case MDM_NOANSWER:
+ case MDM_NOCARRIER:
+ //
+ // We dialed out and nobody answered the phone
+ //
+ dwDisconnectMode = LINEDISCONNECTMODE_NOANSWER;
+ break;
+
+ case MDM_NODIALTONE:
+ //
+ // We were dialing out but no dial tone on the line
+ // were we checking for a dialtone?
+ //
+ if (DEVST_PORTCONNECTDIALTONEDETECT == pLineDev->DevState &&
+ !(pLineDev->dwDialOptions & MDM_BLIND_DIAL))
+ {
+ lAsyncResult = LINEERR_CALLUNAVAIL;
+ };
+ dwDisconnectMode = LINEDISCONNECTMODE_NODIALTONE;
+ break;
+
+ case MDM_FAILURE:
+ default:
+ //
+ // The pending operation failed
+ //
+ if (DEVST_MANUALDIALING == pLineDev->DevState) {
+ //
+ // cancel was pressed on the manual dial dialog
+ //
+ dwDisconnectMode = LINEDISCONNECTMODE_CANCELLED;
+
+ } else {
+
+ dwDisconnectMode = LINEDISCONNECTMODE_UNAVAIL;
+ }
+
+ // If it is a failed makecall, need to return a failure
+ //
+ if (pLineDev->dwPendingType == PENDING_LINEMAKECALL)
+ {
+
+ lAsyncResult = LINEERR_OPERATIONFAILED;
+ };
+ break;
+ };
+
+ // No need for further UI
+ //
+ DestroyMdmDlgInstance(pLineDev);
+
+ // In any case, we need to notify TAPI to clean up the line
+ //
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_DISCONNECTED, dwDisconnectMode);
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+ pLineDev->DevState = DEVST_DISCONNECTED;
+
+ // Notify the caller async completion
+ //
+ if (pLineDev->dwPendingID != INVALID_PENDINGID)
+ {
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, lAsyncResult);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+
+ // If it is a failed makecall, we need to close the line
+ //
+ if (pLineDev->dwPendingType == PENDING_LINEMAKECALL)
+ {
+
+ if ((pLineDev->dwDetMediaModes) && !(pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)) {
+
+ if ((DevlineDetectCall(pLineDev)) != ERROR_SUCCESS) {
+ //
+ // init failed, tell the app
+ //
+ pLineDev->LineClosed=TRUE;
+
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_CLOSE,
+ 0L, 0L, 0L);
+ }
+
+ } else {
+ //
+ // No need to detect the line, just close it.
+ //
+ DevlineClose(pLineDev);
+ }
+
+
+#ifdef UNDER_CONSTRUCTION
+ if (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ DevlineDisabled(pLineDev);
+ }
+ else
+#endif // UNDER_CONSTRUCTION
+ {
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+
+ // Clean up the call state of this line
+ //
+ // pLineDev->htCall = NULL; will be cleaned up TSPI_lineClosecall
+ pLineDev->dwCall = 0L;
+ };
+ }
+ else
+ {
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ };
+ };
+ }
+ else
+ {
+ // A call has not been allocated but
+ // We may fail while start monitoring
+ //
+ if ((pLineDev->DevState == DEVST_PORTLISTENINIT) ||
+ (pLineDev->DevState == DEVST_PORTLISTENING))
+ {
+ // Notify the monitoring application
+ //
+ pLineDev->LineClosed=TRUE;
+
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_CLOSE,
+ 0L, 0L, 0L);
+
+ }
+ }
+ return;
+}
+
+//****************************************************************************
+// DWORD DetectDialtone(PLINEDEV)
+//
+// Function: detects the dialtone on the phone line if the modem is capable.
+// Otherwise assume there is dialtone.
+//
+// Returns: ERROR_SUCCESS, ERROR_IO_PENDING or an error code
+//
+//****************************************************************************
+
+DWORD DetectDialtone(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ // Skip dialtone detection if Manual Dial or Blind Dial or null modem
+ //
+ if (!(GETOPTIONS(pLineDev->pDevCfg) & MANUAL_DIAL ||
+ pLineDev->dwDialOptions & MDM_BLIND_DIAL ||
+ IS_NULL_MODEM(pLineDev) ||
+ pLineDev->fPartialDialing == FALSE))
+ {
+ // Start the dialtone detection process
+ //
+ dwRet = UnimodemDial(pLineDev, szSemicolon, pLineDev->dwDialOptions);
+ }
+ else
+ {
+ dwRet = ERROR_SUCCESS;
+ };
+
+ return dwRet;
+}
+
+#ifdef UNDER_CONSTRUCTION
+//****************************************************************************
+// linWindowProc()
+//
+// Function: Private message handling proc
+//
+//****************************************************************************
+
+long FAR PASCAL _loadds MdmWindowProc(hWnd, message, wParam, lParam)
+HWND hWnd; /* window handle */
+unsigned message; /* type of message */
+WPARAM wParam; /* additional information */
+LPARAM lParam; /* additional information */
+{
+ PLINEDEV pLineDev;
+
+ switch (message)
+ {
+ //**********************************************************************
+ // State machine driven notification
+ //**********************************************************************
+
+ case WM_MDMMESSAGE:
+ pLineDev = (PLINEDEV)LOWORD(lParam);
+
+ MdmCompleteAsync(pLineDev, wParam, HIWORD(lParam));
+ break;
+
+ //**********************************************************************
+ // line cancellation
+ //**********************************************************************
+
+ case WM_MDMCANCEL:
+ pLineDev = (PLINEDEV)LOWORD(lParam);
+
+ // Destroy the termnal window
+ //
+ if (IS_UI_DLG_UP(pLineDev, UI_DLG_TERMINAL))
+ {
+ CloseTerminalDlg(pLineDev);
+ };
+
+ // Notify the caller async completion
+ //
+ if (pLineDev->dwPendingID != INVALID_PENDINGID)
+ {
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, 0L);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ };
+
+ // Turn off passthrough for the preterminal.
+ //
+ if (DEVST_PORTPRETERMINAL == pLineDev->DevState)
+ {
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_OFF);
+ }
+ UnimodemHangup(pLineDev, TRUE);
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+ break;
+
+ //**********************************************************************
+ // Notification from PnP for a modem enabling/disabling
+ //**********************************************************************
+
+ case WM_DEVICECHANGE:
+ MdmDeviceServiceChanged((UINT)wParam, lParam);
+ return (DefWindowProc(hWnd, message, wParam, lParam));
+
+ //**********************************************************************
+ // Notification from Modem CPL for a modem installation/removal
+ //**********************************************************************
+
+ case WM_DEVICEINSTALL:
+ MdmDeviceChangeNotify((UINT)wParam, (LPSTR)lParam);
+ break;
+
+ //**********************************************************************
+ // Handle the changes in the modem status
+ //**********************************************************************
+
+ case WM_MDMCHANGE:
+ MdmDeviceChanged(wParam, lParam);
+ break;
+
+ //**********************************************************************
+ // Ring count timer
+ //**********************************************************************
+
+ case WM_TIMER:
+ pLineDev = GetCBfromHandle(MAKELONG(wParam, 0)); // Timer ID is the pLineDev
+ if(pLineDev)
+ {
+ DWORD tcNow = GETTICKCOUNT();
+ KillTimer(pLineDev->hwndLine, (UINT)pLineDev);
+ if (DEVST_PORTLISTENOFFER == pLineDev->DevState &&
+ GTC_DELTA(pLineDev->dwRingTick, tcNow) >= TO_MS_RING_SEPARATION)
+ {
+ // Timeout has expired, indicating call has stopped ringing
+ pLineDev->dwRingTick = 0;
+ pLineDev->dwRingCount = 0;
+ pLineDev->DevState = DEVST_PORTLISTENING;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+ }
+ else
+ {
+ DPRINTF("WM_TIMER!");
+ }
+ break;
+ }
+
+ // Fall through
+ //
+ default: /* Passes it on if unproccessed */
+ return (DefWindowProc(hWnd, message, wParam, lParam));
+ }
+ return (NULL);
+}
+
+//****************************************************************************
+// MdmDeviceServiceChanged()
+//
+// Function: Handle a device change notification.
+//
+// Returns: SUCCESS
+// PENDING
+// ERROR_PORT_DISCONNECTED
+//
+//****************************************************************************
+
+DWORD NEAR PASCAL MdmDeviceServiceChanged (UINT uEvent, LPARAM lParam)
+{
+ PDEV_BROADCAST_HDR pdbHdr = (PDEV_BROADCAST_HDR)lParam;
+ PDEV_BROADCAST_PORT pdbp;
+
+ // Determine the event type
+ //
+ switch(uEvent)
+ {
+ case DBT_DEVICEARRIVAL:
+ case DBT_DEVICEREMOVECOMPLETE:
+ //
+ // Check the device type, must be a port type
+ //
+ if (pdbHdr->dbch_devicetype == DBT_DEVTYP_PORT)
+ {
+ pdbp = (PDEV_BROADCAST_PORT)pdbHdr;
+ MdmDeviceChangeNotify( uEvent == DBT_DEVICEARRIVAL ?
+ UMDM_ENABLE : UMDM_DISABLE,
+ (LPSTR)pdbp->dbcp_name);
+ };
+ break;
+
+ default:
+ break;
+ };
+ return SUCCESS;
+}
+#endif // UNDER_CONSTRUCTION
diff --git a/private/unimodem/tapisp/mdmutil.c b/private/unimodem/tapisp/mdmutil.c
new file mode 100644
index 000000000..665b65860
--- /dev/null
+++ b/private/unimodem/tapisp/mdmutil.c
@@ -0,0 +1,1581 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: mdmutil.c
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 6/15/93 Nick Manson Revised OpenModem and CloseModem calls
+// 1/6/93 Viroon Touranachun Revised for RNA
+//
+//
+// Description: All Initialization code for rasman component lives here.
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include <devioctl.h>
+#include <ntddser.h>
+#include <slot.h>
+
+#define STOP_TIMER_EVENT 0
+#define RECALC_TIMER_EVENT 1
+#define TSP_NOTIFICATION_EVENT 2
+#define MAX_TIMER_EVENTS 3
+#define NUM_TIMER_EVENTS(_tlist) (((_tlist).hN)?3:2)
+
+// Timer list
+//
+typedef struct tagMdmTimer {
+ struct tagMdmTimer *pNext; // pointer to next CB
+ DWORD dwCompletionKey; // for PostQueuedCompletionStatus
+ LPOVERLAPPED lpOverlapped; // for PostQueuedCompletionStatus
+ DWORD dwWakeup; // wake-up time
+} MDMTIMER, *PMDMTIMER;
+
+typedef struct tagMdmTimerList {
+ PMDMTIMER pList;
+ HANDLE hEvent[MAX_TIMER_EVENTS];
+ CRITICAL_SECTION hSem;
+ HNOTIFICATION hN;
+
+} TIMERLIST, *PTIMERLIST;
+
+// LIGHTS application name
+//
+#define LIGHTSAPP_EXE_NAME TEXT("lights.exe")
+
+/*****************************************************************************
+* Global Parameters
+*****************************************************************************/
+
+MDMLIST gMdmList;
+TIMERLIST gTimerList;
+HANDLE ghtdTimer;
+DWORD gtidTimerMdm;
+
+// ******* SOME PRIVATES *************
+void ProcessNotification(HNOTIFICATION hN);
+BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize);
+void ProcessFrame(PNOTIFICATION_FRAME pnf);
+
+//****************************************************************************
+// BOOL InitCBList()
+//
+// Function: This function initilaizes the CB list
+//
+// Returns: TRUE always
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+BOOL InitCBList (HINSTANCE hInstance)
+{
+ // Initialize the modem list
+ //
+ INITCRITICALSECTION(gMdmList.hSem);
+ gMdmList.pList = NULL;
+ gMdmList.cModems = 0;
+ return TRUE;
+}
+
+//****************************************************************************
+// void DeinitCBList()
+//
+// Function: This function deinitilaizes the CB list
+//
+// Returns: None
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+void DeinitCBList (HINSTANCE hInstance)
+{
+ // Do nothing
+ //
+ DELETECRITICALSECTION(gMdmList.hSem);
+ return;
+}
+
+//****************************************************************************
+// BOOL MdmInitTracing()
+//
+// Function: Performs tracing-related initialization.
+//
+// Returns: None
+//
+// 3/29/96 JosephJ Created
+//****************************************************************************
+void MdmInitTracing(void)
+{
+ traceRegisterObject(
+ &gMdmList,
+ TSP_MODEM_LIST_GUID,
+ TSP_MODEM_LIST_VERSION,
+ 0,
+ 0
+ );
+}
+
+
+//****************************************************************************
+// BOOL MdmDeinitTracing()
+//
+// Function: Performs tracing-related de-initialization.
+//
+// Returns: None
+//
+// 3/29/96 JosephJ Created
+//****************************************************************************
+void MdmDeinitTracing(void)
+{
+ traceUnRegisterObject(&gMdmList, 0, 0);
+}
+
+//****************************************************************************
+// PLINEDEV AllocateCB (UINT cbSize)
+//
+// Function: Allocates a line device control block
+//
+// Returns: The pointer to the control block if successful, otherwise NULL.
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV AllocateCB(UINT cbSize)
+{
+ PLINEDEV pLineDev;
+
+ // Allocate from the process heap
+ //
+ pLineDev = (PLINEDEV)LocalAlloc(LPTR, cbSize);
+
+ if (pLineDev == NULL)
+ return NULL;
+
+ // Ininitialize the initial contents
+ //
+ pLineDev->pNext = (PLINEDEV)NULL;
+ pLineDev->dwVersion = UMDM_VERSION;
+ INITCRITICALSECTION(pLineDev->hSem);
+
+ return pLineDev;
+}
+
+//****************************************************************************
+// DWORD AddCBToList(PLINEDEV)
+//
+// Function: Inserts a line control block to the global modem list
+//
+// Returns: SUCCESS or an error code
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD AddCBToList(PLINEDEV pLineDev)
+{
+ // Validate the structure
+ //
+ if (!ISLINEDEV(pLineDev))
+ return ERROR_INVALID_HANDLE;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+
+ // Insert the new node into the global list
+ //
+ pLineDev->pNext = gMdmList.pList;
+ gMdmList.pList = pLineDev;
+ gMdmList.cModems++;
+
+ // Release the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD DeleteCB(PLINEDEV pLineDev )
+//
+// Function: Removes a line control block to the global modem list and
+// deallocate the buffer.
+//
+// Returns: SUCCESS or an error code
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+DWORD DeleteCB(PLINEDEV pLineDev)
+{
+ PLINEDEV pCurCB, pPrevCB;
+
+ // Validate the structure
+ //
+ if (!ISLINEDEV(pLineDev))
+ return ERROR_INVALID_HANDLE;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+
+ // Start from the head of the CB list
+ //
+ pPrevCB = NULL;
+ pCurCB = gMdmList.pList;
+
+ // traverse the list to find the specified CB
+ //
+ while (pCurCB != NULL)
+ {
+ if (pCurCB == pLineDev)
+ {
+ // Decrement the modem count
+ //
+ gMdmList.cModems--;
+
+ // Is there a previous control block?
+ //
+ if (pPrevCB == NULL)
+ {
+ // head of the list
+ //
+ gMdmList.pList = pCurCB->pNext;
+ }
+ else
+ {
+ pPrevCB->pNext = pCurCB->pNext;
+ };
+ break;
+ };
+
+ pPrevCB = pCurCB;
+ pCurCB = pCurCB->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+
+ // Wait until no one else is using the line
+ //
+ CLAIM_LINEDEV(pLineDev);
+ DELETECRITICALSECTION(pLineDev->hSem);
+ LocalFree(pLineDev);
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// PLINEDEV GetFirstCB()
+//
+// Function: Get the first modem device in the list
+//
+// Returns: SUCCESS or an error code
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV GetFirstCB()
+{
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+
+ // Get the next head of the CB list
+ //
+ if ((pLineDev = gMdmList.pList) != NULL)
+ {
+ CLAIM_LINEDEV(pLineDev);
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+
+ return pLineDev;
+}
+
+//****************************************************************************
+// PLINEDEV GetCBfromHandle()
+//
+// Function: This function gets the CB from a handle
+//
+// Returns: a pointer to PLINEDEV structure if the handle is valid, or
+// NULL otherwise
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV GetCBfromHandle (DWORD handle)
+{
+#if 0
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+ pLineDev = gMdmList.pList;
+
+ // Walk the modem list to find the line
+ //
+ while (pLineDev != NULL)
+ {
+ // BUGBUG: Chris Caputo - 1/24/96
+ // BUGBUG: pLineDev could be modified as we are scanning. The possibility
+ // BUGBUG: is that pLineDev->dwVersion gets changed.
+ if ((pLineDev == (PLINEDEV)handle) && ISLINEDEV(pLineDev))
+ {
+ // Exclusively accessing the line CB
+ //
+ CLAIM_LINEDEV(pLineDev);
+ ASSERT((pLineDev == (PLINEDEV)handle) && ISLINEDEV(pLineDev));
+ break;
+ }
+
+ pLineDev = pLineDev->pNext;
+ };
+
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+
+ return pLineDev;
+
+#endif
+
+ __try {
+
+ PLINEDEV pLineDev;
+
+ pLineDev=(PLINEDEV)handle;
+
+ if (pLineDev->dwVersion == UMDM_VERSION) {
+
+ CLAIM_LINEDEV(pLineDev);
+
+ return pLineDev;
+
+ }
+
+ } __except(EXCEPTION_EXECUTE_HANDLER) {
+
+
+
+ }
+
+ return NULL;
+
+}
+
+//****************************************************************************
+// PLINEDEV GetCBfromID()
+//
+// Function: This function looks for the CB owning the device
+//
+// Returns: TRUE (if valid)
+// FALSE
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV GetCBfromID (DWORD dwDeviceID)
+{
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+ pLineDev = gMdmList.pList;
+
+ // Walk the modem list to find the line
+ //
+ while (pLineDev != NULL)
+ {
+ // BUGBUG: Chris Caputo - 1/24/96
+ // BUGBUG: pLineDev could be modified as we are scanning. The possibility
+ // BUGBUG: is that pLineDev->dwID gets changed.
+ if (pLineDev->dwID == dwDeviceID)
+ {
+ // Exclusively accessing the line CB
+ //
+ CLAIM_LINEDEV(pLineDev);
+ ASSERT(pLineDev->dwID == dwDeviceID);
+ break;
+ }
+
+ pLineDev = pLineDev->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+ return pLineDev;
+}
+
+#if 0
+
+//****************************************************************************
+// PLINEDEV GetCBfromDeviceHandle()
+//
+// Function: This function looks for the CB owning the device
+//
+// Returns: TRUE (if valid)
+// FALSE
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV GetCBfromDeviceHandle (DWORD hDevice)
+{
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+ pLineDev = gMdmList.pList;
+
+ // Trace the list of modem port control block
+ //
+ while (pLineDev != NULL)
+ {
+ // BUGBUG: Chris Caputo - 1/24/96
+ // BUGBUG: pLineDev could be modified as we are scanning. The possibility
+ // BUGBUG: is that pLineDev->hDevice gets changed.
+ if (pLineDev->hDevice == (HANDLE)hDevice)
+ {
+ // Exclusively accessing the line CB
+ //
+ CLAIM_LINEDEV(pLineDev);
+ ASSERT(pLineDev->hDevice == (HANDLE)hDevice);
+ break;
+ }
+
+ pLineDev = pLineDev->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+ return pLineDev;
+}
+
+#endif
+
+//****************************************************************************
+// PLINEDEV GetCBfromName()
+//
+// Function: This function looks for the CB owning the device
+//
+// Returns: TRUE (if valid)
+// FALSE
+//
+// Fri 14-Apr-1995 12:47:57 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+PLINEDEV GetCBfromName (LPTSTR pszName)
+{
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+ pLineDev = gMdmList.pList;
+
+ // Trace the list of modem port control block
+ //
+ while (pLineDev != NULL)
+ {
+ // Exclusively accessing the line CB
+ //
+ CLAIM_LINEDEV(pLineDev);
+ if (!lstrcmp(pLineDev->szDeviceName, pszName))
+ break;
+
+ RELEASE_LINEDEV(pLineDev);
+ pLineDev = pLineDev->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+ return pLineDev;
+}
+
+#ifdef DYNA_ADDREMOVE
+//****************************************************************************
+// void DisableStaleModems(void)
+//
+// Function: Disable all modems that do not have the fReinit flag set.
+//
+// Returns: TRUE (if valid)
+// FALSE
+//
+// 4/24/96 JosephJ Created
+//****************************************************************************
+void DisableStaleModems(void)
+{
+ PLINEDEV pLineDev;
+
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(gMdmList.hSem);
+ pLineDev = gMdmList.pList;
+
+ // Trace the list of modem port control block
+ //
+ while (pLineDev != NULL)
+ {
+ // Exclusively accessing the line CB
+ //
+ CLAIM_LINEDEV(pLineDev);
+
+ if (!(pLineDev->fdwResources&LINEDEVFLAGS_REINIT))
+ {
+ DPRINTF1("WARNING: MARKING MODEM OUT-OF-SERVICE: [%s]",
+ pLineDev->szDeviceName);
+ pLineDev->fdwResources|= LINEDEVFLAGS_OUTOFSERVICE;
+ }
+ else
+ {
+ pLineDev->fdwResources&=~LINEDEVFLAGS_REINIT;
+ pLineDev->fdwResources&=~LINEDEVFLAGS_OUTOFSERVICE;
+ }
+
+ RELEASE_LINEDEV(pLineDev);
+ pLineDev = pLineDev->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(gMdmList.hSem);
+
+}
+#endif // DYNA_ADDREMOVE
+
+//****************************************************************************
+// DWORD NullifyLineDevice(PLINEDEV pLineDev)
+//
+// Functions: Clean up the contents of the modem CB
+//
+// Return: ERROR_SUCCESS always
+//****************************************************************************
+
+DWORD NullifyLineDevice (PLINEDEV pLineDev)
+{
+ // Turn the line device back to its initiali state
+ //
+ pLineDev->fdwResources = 0L;
+ pLineDev->hDevice = INVALID_DEVICE;
+ pLineDev->htLine = NULL;
+ pLineDev->lpfnEvent = NULL;
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ pLineDev->szAddress[0] = '\0';
+ pLineDev->htCall = NULL;
+ pLineDev->dwCall = 0L;
+ pLineDev->dwCallState = LINECALLSTATE_IDLE;
+ pLineDev->dwCallStateMode = 0L;
+ pLineDev->dwCurMediaModes = 0L;
+ pLineDev->dwDetMediaModes = 0L;
+ pLineDev->fTakeoverMode = FALSE;
+ pLineDev->dwMediaModes = pLineDev->dwDefaultMediaModes;
+ pLineDev->dwRingCount = 0L;
+ pLineDev->dwRingTick = 0L;
+ pLineDev->dwNegotiatedRate = 0L;
+
+ // Async operation
+ //
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ pLineDev->dwVxdPendingID = MDM_ID_NULL;
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// BOOL ValidateDevCfgClass(LPCSTR lpszDeviceClass)
+//
+// Functions: Validate the supported device class
+//
+// Return: TRUE if the device class is supported
+// FALSE otherwise
+//****************************************************************************
+
+BOOL ValidateDevCfgClass (LPCTSTR lpszDeviceClass)
+{
+ UINT idClass;
+
+ // Need the device class
+ //
+ if (lpszDeviceClass == NULL)
+ return FALSE;
+
+ // Determine the device class
+ //
+ for (idClass = 0; idClass < MAX_SUPPORT_CLASS; idClass++)
+ {
+ if (lstrcmpi(lpszDeviceClass, aGetID[idClass].szClassName) == 0)
+ break;
+ };
+
+ // Do we support the requested class?
+ //
+ switch (idClass)
+ {
+ case TAPILINE:
+ case COMM:
+ case COMMMODEM:
+ case COMMMODEMPORTNAME:
+ return TRUE;
+
+ default:
+ return FALSE;
+ };
+}
+
+//****************************************************************************
+// ValidateAddress()
+//
+// Function: This function validates a tapi address and creates a version of
+// it to pass to the VxD. In addition, it returns the address in
+// ANSI form, rather than Unicode.
+//
+// Returns: SUCCESS or LINEERR_xxx depending on the failure reason
+//
+//****************************************************************************
+
+LONG ValidateAddress(PLINEDEV pLineDev,
+#ifdef UNICODE
+ LPCTSTR lpszUnicodeInAddress,
+#else // UNICODE
+ LPCSTR lpszInAddress,
+#endif // UNICODE
+ LPSTR lpszOutAddress)
+{
+ LPCSTR lpszSrc;
+ int cbOutLen = MAXADDRESSLEN;
+#ifdef UNICODE
+ LPSTR lpszInAddress; // ANSI version of lpszUnicodeInAddress
+ DWORD dwInAddressLen; // in bytes
+#endif // UNICODE
+
+ ASSERT(lpszOutAddress);
+
+#ifdef UNICODE
+ // is lpszUnicodeInAddress NULL?
+ //
+ if (lpszUnicodeInAddress == NULL || *lpszUnicodeInAddress == 0)
+ {
+ *lpszOutAddress = 0;
+ return ERROR_SUCCESS;
+ }
+
+ // Convert lpszUnicodeInAddress to lpszInAddress (ANSI)
+ dwInAddressLen = WideCharToMultiByte(CP_ACP,
+ 0,
+ lpszUnicodeInAddress,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL);
+
+ if (dwInAddressLen == 0)
+ {
+ TSPPRINTF1("ValidateAddress:WideCharToMultiByte returned %d",
+ GetLastError());
+ return LINEERR_INVALADDRESS;
+ }
+
+ lpszInAddress = (LPSTR)LocalAlloc(LPTR, dwInAddressLen);
+
+ if (lpszInAddress == NULL)
+ {
+ TSPPRINTF1("ValidateAddress:WideCharToMultiByte returned %d",
+ GetLastError());
+ return LINEERR_NOMEM;
+ }
+
+ dwInAddressLen = WideCharToMultiByte(CP_ACP,
+ 0,
+ lpszUnicodeInAddress,
+ -1,
+ lpszInAddress,
+ dwInAddressLen,
+ NULL,
+ NULL);
+
+ if (dwInAddressLen == 0)
+ {
+ TSPPRINTF1("ValidateAddress:WideCharToMultiByte returned %d",
+ GetLastError());
+ LocalFree(lpszInAddress);
+ return LINEERR_INVALADDRESS;
+ }
+#endif // UNICODE
+
+ // Verify that the first char is a valid single-byte char.
+ //
+ if (CharNextA(lpszInAddress) - lpszInAddress != 1)
+ {
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_INVALADDRESS;
+ }
+
+ // tone or pulse? set dwDialOptions appropriately
+ // also, set lpszSrc
+ //
+ if (*lpszInAddress == 'T' || *lpszInAddress == 't') // tone
+ {
+ lpszSrc = lpszInAddress + 1;
+ pLineDev->dwDialOptions |= MDM_TONE_DIAL;
+ }
+ else
+ {
+ if (*lpszInAddress == 'P' || *lpszInAddress == 'p') // pulse
+ {
+ lpszSrc = lpszInAddress + 1;
+ pLineDev->dwDialOptions &= ~MDM_TONE_DIAL;
+ }
+ else
+ {
+ lpszSrc = lpszInAddress;
+ }
+ }
+
+ // copy In to Out scanning for various dialoptions, returning error if we
+ // don't support something.
+ //
+ while (*lpszSrc && cbOutLen)
+ {
+ switch (*lpszSrc)
+ {
+ case '$':
+ if (!(pLineDev->dwDevCapFlags & LINEDEVCAPFLAGS_DIALBILLING))
+ {
+ UINT cCommas;
+
+ // Get the wait-for-bong period
+ //
+ cCommas = GETWAITBONG(pLineDev->pDevCfg);
+
+ // Calculate the number of commas we need to insert
+ //
+ cCommas = (cCommas/INC_WAIT_BONG) +
+ (cCommas%INC_WAIT_BONG ? 1 : 0);
+
+ // Insert the strings of commas
+ //
+ while (cbOutLen && cCommas)
+ {
+ *lpszOutAddress++ = ',';
+ cbOutLen--;
+ cCommas--;
+ };
+ goto Skip_This_Character;
+ }
+ break;
+
+ case '@':
+ if (!(pLineDev->dwDevCapFlags & LINEDEVCAPFLAGS_DIALQUIET))
+ {
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_DIALQUIET;
+ }
+ break;
+
+ case 'W':
+ case 'w':
+ if (!(pLineDev->dwDevCapFlags & LINEDEVCAPFLAGS_DIALDIALTONE))
+ {
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_DIALDIALTONE;
+ }
+ break;
+
+ case '?':
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_DIALPROMPT;
+
+ case '|': // subaddress
+ case '^': // name field
+ goto Skip_The_Rest;
+
+ case ';':
+ if (!pLineDev->fPartialDialing)
+ {
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_INVALADDRESS;
+ }
+
+ // This signifies the end of a dialable address.
+ // Use it and skip the rest.
+ //
+ *lpszOutAddress++ = *lpszSrc;
+ goto Skip_The_Rest;
+
+ case ' ':
+ case '-':
+ // skip these characters
+ //
+ goto Skip_This_Character;
+ }
+
+ // Copy this character
+ //
+ *lpszOutAddress++ = *lpszSrc;
+ cbOutLen--;
+
+Skip_This_Character:
+ // Verify that the next char is a valid single-byte char.
+ //
+ if (CharNextA(lpszSrc) - lpszSrc != 1)
+ {
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_INVALADDRESS;
+ }
+ lpszSrc++;
+ }
+
+ // Did we run out of space in the outgoing buffer?
+ //
+ if (*lpszSrc && cbOutLen == 0)
+ {
+ // yes
+ //
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return LINEERR_INVALADDRESS;
+ }
+
+Skip_The_Rest:
+ *lpszOutAddress = 0;
+#ifdef UNICODE
+ LocalFree(lpszInAddress);
+#endif // UNICODE
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// IsOriginateAddress()
+//
+// Function: Figures out whether a string is an originate address or not.
+// An originate address is one that doesn't have a semi-colon at
+// the end.
+//
+// Note: lpszAddress is not a DBCS string. AnsiNext is not used.
+//
+// Returns: TRUE if it is an originate address.
+// FALSE if it is not. (ie. semi-colon at the end of the address)
+//
+//****************************************************************************
+
+BOOL IsOriginateAddress(LPCSTR lpszAddress)
+{
+ BOOL fRet = TRUE; // assume this is an originate string
+
+ // try to prove this isn't an originate string by finding a semi-colon
+ //
+ while (*lpszAddress)
+ {
+ if (';' == *lpszAddress)
+ {
+ fRet = FALSE;
+ break;
+ }
+ lpszAddress++;
+ };
+ return fRet;
+}
+
+//****************************************************************************
+// SetMdmTimer(LPOVERLAPPED, DWORD, DWORD)
+//
+// Function: Set a timer to post to the completion port after the specified
+// time elapsed.
+//
+// Returns: ERROR_SUCCESS if success
+// other error code for failure
+//
+//****************************************************************************
+
+DWORD SetMdmTimer (DWORD dwCompletionKey,
+ LPOVERLAPPED lpOverlapped,
+ DWORD dwTime)
+{
+ PMDMTIMER pTimer, pPrev, pNext;
+ DWORD tcNow = GETTICKCOUNT();
+
+ ASSERT(dwTime<GTC_MAXDELTA);
+
+ // Allocate a timer block
+ //
+ if ((pTimer = (PMDMTIMER)LocalAlloc(LMEM_FIXED, sizeof(*pTimer))) == NULL)
+ {
+ return ERROR_OUTOFMEMORY;
+ };
+
+ // Calculate the wake-up time
+ //
+ pTimer->pNext = NULL;
+ pTimer->dwCompletionKey = dwCompletionKey;
+ pTimer->lpOverlapped = lpOverlapped;
+ GTC_AequalsBplusC(pTimer->dwWakeup, tcNow, dwTime);
+
+ // Insert the timer block into the timer list
+ //
+// DPRINTF1("before SetMdmTimer crit sect (%d/%d)", dwCompletionKey, lpOverlapped);
+ ENTERCRITICALSECTION(gTimerList.hSem);
+// DPRINTF1("in SetMdmTimer crit sect (%d/%d)", dwCompletionKey, lpOverlapped);
+
+#ifdef DEBUG
+
+ pNext = gTimerList.pList;
+
+ while (pNext != NULL) {
+
+ ASSERT(!(pNext->dwCompletionKey == dwCompletionKey &&
+ pNext->lpOverlapped == lpOverlapped));
+
+ pNext=pNext->pNext;
+ }
+
+#endif //DEBUG
+
+ pPrev = NULL;
+ pNext = gTimerList.pList;
+
+ while(pNext != NULL)
+ {
+ if (GTC_AleB(pTimer->dwWakeup, pNext->dwWakeup))
+ {
+ // Found a place to insert
+ //
+ pTimer->pNext = pNext;
+ if (pPrev == NULL)
+ {
+ // Head of the list
+ //
+ gTimerList.pList = pTimer;
+ }
+ else
+ {
+ pPrev->pNext = pTimer;
+ };
+ break;
+ }
+ else
+ {
+ // Next timer block
+ //
+ pPrev = pNext;
+ pNext = pNext->pNext;
+ };
+ };
+
+ // If we are at the end of the list, append the new timer to the end
+ //
+ if (pNext == NULL)
+ {
+ if (pPrev == NULL)
+ {
+ gTimerList.pList = pTimer;
+ }
+ else
+ {
+ pPrev->pNext = pTimer;
+ };
+ };
+
+ // If we insert it in front of the list
+ // Wake up the timer thread to recalculate the sleep time
+ //
+ if (gTimerList.pList == pTimer)
+ {
+ SetEvent(gTimerList.hEvent[RECALC_TIMER_EVENT]);
+ };
+
+ LEAVECRITICALSECTION(gTimerList.hSem);
+// DPRINTF1("after SetMdmTimer crit sect (%d/%d)", dwCompletionKey, lpOverlapped);
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// KillMdmTimer(DWORD, LPOVERLAPPED)
+//
+// Function: Kill a timer
+//
+// Returns: TRUE is timeout was found and deleted.
+// FLASE if timeout was not found (maybe because it alread fired).
+//
+//****************************************************************************
+
+BOOL KillMdmTimer (DWORD dwCompletionKey,
+ LPOVERLAPPED lpOverlapped)
+{
+ PMDMTIMER pCurCB, pPrevCB;
+ BOOL bRet = FALSE;
+
+// DPRINTF1("KillMdmTimer entered (%d/%d)", dwCompletionKey, lpOverlapped);
+
+ // Exclusively access the timer list
+ //
+ ENTERCRITICALSECTION(gTimerList.hSem);
+// DPRINTF1("KillMdmTimer in crit sect (%d/%d)", dwCompletionKey, lpOverlapped);
+
+ // Start from the head of the CB list
+ //
+ pPrevCB = NULL;
+ pCurCB = gTimerList.pList;
+
+ // traverse the list to find the specified CB
+ //
+ while (pCurCB != NULL)
+ {
+ if (pCurCB->dwCompletionKey == dwCompletionKey &&
+ pCurCB->lpOverlapped == lpOverlapped)
+ {
+ bRet = TRUE;
+
+ // Is there a previous control block?
+ //
+ if (pPrevCB == NULL)
+ {
+ // head of the list
+ //
+ gTimerList.pList = pCurCB->pNext;
+ }
+ else
+ {
+ pPrevCB->pNext = pCurCB->pNext;
+ };
+ LocalFree(pCurCB);
+ break;
+ };
+
+ pPrevCB = pCurCB;
+ pCurCB = pCurCB->pNext;
+ };
+
+#ifdef DEBUG
+ if (pCurCB == NULL)
+ {
+ D_TRACE(TspDpf(666,TEXT("KillMdmTimer: Did not find event on list.\n"));)
+// DPRINTF("KillMdmTimer() did not fine event on its list.");
+ }
+#endif // DEBUG
+
+ // Finish accessing the timer list
+ //
+ LEAVECRITICALSECTION(gTimerList.hSem);
+
+// DPRINTF1("KillMdmTimer exit (%d/%d)", dwCompletionKey/lpOverlapped);
+ return bRet;
+}
+
+//****************************************************************************
+// DWORD InitializeMdmTimer()
+//
+// Function: Initialize a timer utility
+//
+// Returns: ERROR_SUCCESS if success
+// other error code for failure
+//
+//****************************************************************************
+
+DWORD InitializeMdmTimer()
+{
+ // Initialize the timer list critical section
+ //
+ INITCRITICALSECTION(gTimerList.hSem);
+ gTimerList.pList = NULL;
+
+ // Create the recalc event
+ //
+ if (gTimerList.hEvent[RECALC_TIMER_EVENT] = CreateEvent(NULL, FALSE, FALSE, NULL))
+ {
+ // Create the stop event
+ //
+ if (gTimerList.hEvent[STOP_TIMER_EVENT] = CreateEvent(NULL, FALSE, FALSE, NULL))
+ {
+ // Create the notification handle and event...
+ gTimerList.hN = notifCreate(TRUE, SLOTNAME_UNIMODEM_NOTIFY_TSP,
+ MAX_NOTIFICATION_FRAME_SIZE, 10);
+ if (!gTimerList.hN)
+ {
+ DPRINTF3("WARNING: notifServerCreate(\"%s\", %lu) failed. GetLastError=0x%lx.\n",
+ (LPCTSTR) SLOTNAME_UNIMODEM_NOTIFY_TSP,
+ (unsigned long) MAX_NOTIFICATION_FRAME_SIZE,
+ (unsigned long) GetLastError());
+ // Well, we go on, not a fatal error...
+ }
+ else
+ {
+ gTimerList.hEvent[TSP_NOTIFICATION_EVENT] =
+ notifGetObj(gTimerList.hN);
+ ASSERT(gTimerList.hEvent[TSP_NOTIFICATION_EVENT]);
+ }
+ // Start the timer thread
+ //
+ ghtdTimer = CreateThread(
+ NULL, // default security
+ 0, // default stack size
+ (LPTHREAD_START_ROUTINE)MdmTimerThread, // thread entry point
+ NULL, // no parameter
+ 0, // Start immediately
+ &gtidTimerMdm); // thread id
+
+ if (ghtdTimer)
+ {
+ // We started the timer services
+ //
+
+ // Register the timer list with the
+ // tracing system.
+ traceRegisterObject(
+ &gTimerList,
+ TSP_TIMER_LIST_GUID,
+ TSP_TIMER_LIST_VERSION,
+ 0,
+ 0
+ );
+ return ERROR_SUCCESS;
+ };
+ };
+ };
+
+ // Cannot start the timer, clean up resources
+ //
+
+ if (gTimerList.hN)
+ {
+ // the notification event is owned by the notif object, hN, so we don't
+ // CloseHandle it here.
+ gTimerList.hEvent[TSP_NOTIFICATION_EVENT]=NULL;
+ notifFree(gTimerList.hN);
+ gTimerList.hN=0;
+ }
+
+ if (gTimerList.hEvent[STOP_TIMER_EVENT])
+ {
+ CloseHandle(gTimerList.hEvent[STOP_TIMER_EVENT]);
+ };
+
+ if (gTimerList.hEvent[RECALC_TIMER_EVENT])
+ {
+ CloseHandle(gTimerList.hEvent[RECALC_TIMER_EVENT]);
+ };
+
+ DELETECRITICALSECTION(gTimerList.hSem);
+ return ERROR_OUTOFMEMORY;
+}
+
+//****************************************************************************
+// DWORD DeinitializeMdmTimer()
+//
+// Function: Deinitialize a timer utility
+//
+// Returns: ERROR_SUCCESS if success
+// other error code for failure
+//
+//****************************************************************************
+
+DWORD DeinitializeMdmTimer()
+{
+ // Un-register the timer list with the
+ // tracing system.
+ traceUnRegisterObject(&gTimerList, 0, 0);
+
+ // Signal the stop event
+ //
+ SetEvent(gTimerList.hEvent[STOP_TIMER_EVENT]);
+
+ // Wait until the the timer thread terminates
+ //
+ WaitForSingleObject(ghtdTimer, INFINITE);
+
+ //
+ // close thread handle
+ //
+ CloseHandle(ghtdTimer);
+
+ // Destroy the notification object, if we allocated it...
+ if (gTimerList.hN)
+ {
+ // the notification event is owned by the notif object, hN.
+ gTimerList.hEvent[TSP_NOTIFICATION_EVENT]=NULL;
+ notifFree(gTimerList.hN);
+ gTimerList.hN=0;
+ }
+ // Destroy the recalc and the stop events
+ //
+ CloseHandle(gTimerList.hEvent[STOP_TIMER_EVENT]);
+ CloseHandle(gTimerList.hEvent[RECALC_TIMER_EVENT]);
+
+ // Deinitialize the timer list critical section
+ //
+ DELETECRITICALSECTION(gTimerList.hSem);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD APIENTRY MdmTimerThread(DWORD)
+//
+// Function: timer thread
+//
+// Returns: None
+//
+//****************************************************************************
+
+DWORD APIENTRY MdmTimerThread(DWORD dwParam)
+{
+ DWORD dwWait;
+
+ // Start waiting for the new timer infinitely
+ //
+ dwWait = INFINITE;
+
+ // Wait for the recalc event for the specified time
+ //
+ while (TRUE)
+ {
+ switch (WaitForMultipleObjects(NUM_TIMER_EVENTS(gTimerList),
+ gTimerList.hEvent, FALSE, dwWait))
+ {
+ // If the waittime is expired, some timer block needs to wake up
+ //
+ case WAIT_TIMEOUT:
+ {
+ PMDMTIMER pTimer, pNext;
+ DWORD dwCurrent;
+
+ ENTERCRITICALSECTION(gTimerList.hSem);
+
+ dwCurrent = GETTICKCOUNT();
+
+ // Start signalling from the head of the list
+ //
+ pNext = gTimerList.pList;
+
+ while(pNext && GTC_AleB(pNext->dwWakeup, dwCurrent))
+ {
+// DPRINTF1("MdmTimerThread queuing %d/%d", pNext->dwCompletionKey, pNext->lpOverlapped);
+ PostQueuedCompletionStatus(ghCompletionPort,
+ 1,
+ pNext->dwCompletionKey,
+ pNext->lpOverlapped);
+ pTimer = pNext;
+ pNext = pTimer->pNext;
+ LocalFree(pTimer);
+ };
+
+ // Recalculate the wait time
+ // If nothing is in the list, the wake time is infinite
+ //
+ if (pNext)
+ {
+ dwWait = GTC_DELTA(dwCurrent, pNext->dwWakeup);
+ }
+ else
+ {
+ dwWait = INFINITE;
+ };
+
+ gTimerList.pList = pNext;
+ LEAVECRITICALSECTION(gTimerList.hSem);
+ break;
+ }
+
+ // If it is the recalc event
+ // we need to recalc the wait time from the head of the list
+ //
+ case WAIT_OBJECT_0+RECALC_TIMER_EVENT:
+ {
+ DWORD dwCurrent;
+
+ ENTERCRITICALSECTION(gTimerList.hSem);
+
+ dwCurrent = GETTICKCOUNT();
+
+ if (gTimerList.pList
+ && GTC_AleB(dwCurrent, gTimerList.pList->dwWakeup))
+ {
+ dwWait = GTC_DELTA(dwCurrent,gTimerList.pList->dwWakeup);
+ }
+ else
+ {
+ dwWait = 0;
+ };
+ LEAVECRITICALSECTION(gTimerList.hSem);
+ break;
+ }
+
+ case WAIT_OBJECT_0+TSP_NOTIFICATION_EVENT:
+ {
+
+ ENTERCRITICALSECTION(gTimerList.hSem);
+ ProcessNotification(gTimerList.hN);
+ LEAVECRITICALSECTION(gTimerList.hSem);
+ break;
+ }
+
+ // Otherwise terminate the timer thread
+ //
+ case WAIT_OBJECT_0+STOP_TIMER_EVENT:
+ {
+ PMDMTIMER pNextTimer, pTimer;
+
+ // Free all the timer block
+ //
+ pNextTimer = gTimerList.pList;
+ while(pNextTimer)
+ {
+ pTimer = pNextTimer;
+ pNextTimer = pTimer->pNext;
+ LocalFree(pTimer);
+ };
+ gTimerList.pList = NULL;
+
+ ExitThread(ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+ }
+
+ default:
+ DPRINTF("Got unknown notification!\n");
+ break;
+ };
+ };
+}
+
+//****************************************************************************
+// DWORD LaunchModemLight (LPTSTR szModemName, HANDLE hModem, LPHANDLE lphLight)
+//
+// Function: Lauch the modem lights applet
+//
+// Returns: ERROR_SUCCESS if success otherwise ERROR_OPEN_FAILED
+//
+//****************************************************************************/
+
+DWORD LaunchModemLight (LPTSTR szModemName, HANDLE hModem, LPHANDLE lphLight)
+{
+ HANDLE hEvent;
+ PROCESS_INFORMATION pi;
+ STARTUPINFO sti;
+ TCHAR szCmdline[256];
+ SERIALPERF_STATS serialstats;
+ DWORD dwBytes;
+ DWORD dwRet;
+ OVERLAPPED ov;
+
+ // Check to see if any bytes have been transferred or receive. If none
+ // has, there is no need to launch lights because this is probably a
+ // port driver that doesn't support this ioctl.
+ //
+ ov.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+
+ if (ov.hEvent == NULL)
+ {
+ return ERROR_OPEN_FAILED;
+ }
+
+ ov.hEvent = (HANDLE)((DWORD)ov.hEvent | 1);
+
+ dwRet = DeviceIoControl(hModem,
+ IOCTL_SERIAL_GET_STATS,
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &serialstats,
+ sizeof(SERIALPERF_STATS),
+ &dwBytes,
+ &ov);
+
+ if (!dwRet)
+ {
+ if (ERROR_IO_PENDING == GetLastError())
+ {
+ dwRet = GetOverlappedResult(hModem,
+ &ov,
+ &dwBytes,
+ TRUE);
+ }
+ }
+
+ ov.hEvent = (HANDLE)((DWORD)ov.hEvent & 0xfffffffe);
+ CloseHandle(ov.hEvent);
+
+
+
+ if (!dwRet ||
+ (serialstats.ReceivedCount == 0 &&
+ serialstats.TransmittedCount == 0))
+ {
+ return ERROR_OPEN_FAILED;
+ }
+
+
+ // OK, the GET_STATS ioctl seems to work, so let's really launch lights.
+
+
+ // Create the lights shutdown event handle.
+ if ((hEvent = CreateEvent( NULL, FALSE, FALSE, NULL )) != NULL)
+ {
+ // Create a global handle for use in other processes and close the
+ // local handle.
+ *lphLight = hEvent;
+
+ // Compose a modem lights process command line
+ //
+ wsprintf( szCmdline, LIGHTSAPP_EXE_NAME TEXT(" %lu %lu %lu %s"),
+ GetCurrentProcessId(), hEvent, hModem, szModemName );
+
+ // Create the modem lights process and store ID for use in CloseModem.
+ ZeroMemory(&sti, sizeof(sti));
+ sti.cb = sizeof(STARTUPINFO);
+ if ( !CreateProcess(NULL, szCmdline, // Start up command line
+ NULL, NULL, FALSE, 0, NULL, NULL, &sti, &pi) )
+ {
+ DPRINTF1("LaunchModemLight: CreateProcess failed (%d).",
+ GetLastError());
+
+ CloseHandle(hEvent);
+ *lphLight = (DWORD)NULL;
+
+ return ERROR_OPEN_FAILED;
+ }
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ DPRINTF("LaunchModemLight: Succeeded.");
+ return ERROR_SUCCESS;
+ }
+ DPRINTF1("LaunchModemLight: CreateEvent failed (%d).",
+ GetLastError());
+ return ERROR_OPEN_FAILED;
+}
+
+//****************************************************************************
+// DWORD TerminateModemLight (HANDLE hLight)
+//
+// Function: Terminate the modem lights applet
+//
+// Returns: ERROR_SUCCESS always
+//
+//****************************************************************************
+
+DWORD TerminateModemLight (HANDLE hLight)
+{
+ SetEvent(hLight);
+ CloseHandle(hLight);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// Function: Processes an external TSP notification
+// (produced as a result of some process loading unimdm.tsp and
+// calling UnimodemNotifyTSP(...))
+// WARNING: This function is called with the timer critical section still
+// held -- better return quickly!
+//****************************************************************************
+void ProcessNotification(HNOTIFICATION hN)
+{
+ BOOL fRet;
+ struct {
+ DWORD dw0;
+ BYTE rgb[MAX_NOTIFICATION_FRAME_SIZE];
+ } EmptyFr;
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr;
+ DWORD dwcbMax=sizeof(EmptyFr);
+ DWORD dwcbRead=0;
+
+ pnf->dwSig=pnf->dwSize=0;
+
+ fRet=notifReadMsg(hN, (LPBYTE) pnf, dwcbMax, &dwcbRead);
+ if (!fRet)
+ {
+ DPRINTF1("notifReadFrame(...) failed. GetLastError=0x%lx.\n",
+ (unsigned long) GetLastError());
+ goto end;
+ }
+
+ // Verify validity of msg...
+ if (!ValidateFrame(pnf, dwcbRead))
+ {
+ DPRINTF("Invalid frame\n");
+ goto end;
+ }
+ ProcessFrame(pnf);
+
+end:
+ return;
+}
+
+
+//****************************************************************************
+// Function: Validates a frame -- checks signature, etc...
+//****************************************************************************
+BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize)
+{
+ return (pnf && pnf->dwSig==dwNFRAME_SIG && pnf->dwSize>=sizeof(*pnf) &&
+ pnf->dwSize==dwTrueSize &&
+ pnf->dwSize<=MAX_NOTIFICATION_FRAME_SIZE);
+}
+
+
+//****************************************************************************
+// Function: Processes a received notification frame
+// (received as a result of some process loading unimdm.tsp and
+// calling UnimodemNotifyTSP(...))
+// WARNING: This function is called with the timer critical section still
+// held -- better return quickly!
+//****************************************************************************
+void ProcessFrame(PNOTIFICATION_FRAME pnf)
+{
+ void cplProcessNotification(PNOTIFICATION_FRAME pnf);
+
+ switch(pnf->dwType)
+ {
+
+ case TSPNOTIF_TYPE_CPL:
+ DPRINTF("ProcessFrame: Got CPL notification!\n");
+ cplProcessNotification(pnf);
+ break;
+ case TSPNOTIF_TYPE_DEBUG:
+ DPRINTF("ProcessFrame: Got DEBUG notifcation.\n");
+ traceProcessNotification(pnf);
+ break;
+ default:
+ DPRINTF1("WARNING:Got unknown notif type 0x%lu.\n", pnf->dwType);
+ break;
+ }
+}
diff --git a/private/unimodem/tapisp/modem.c b/private/unimodem/tapisp/modem.c
new file mode 100644
index 000000000..2cc5d42db
--- /dev/null
+++ b/private/unimodem/tapisp/modem.c
@@ -0,0 +1,532 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: modem.c
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 6/15/93 Nick Manson Modified OpenModem and CloseModem calls
+// 1/6/93 Viroon Touranachun Revised for RNA
+//
+//
+// Description: Intermediate modem SPI layer
+//
+//****************************************************************************
+
+
+#include "unimdm.h"
+#include "umdmspi.h"
+
+#ifdef UNDER_CONSTRUCTION
+
+#include <regstr.h>
+
+#define Not_VxD
+#include <vmm.h>
+#include <configmg.h>
+
+#endif // UNDER_CONSTRUCTION
+
+
+
+
+
+//****************************************************************************
+// LONG DevlineOpen(PLINEDEV)
+//
+// Function: Opens the modem device.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_ALLOCATED if the modem was already opened
+// LINEERR_RESOURCEUNAVAIL if the modem cannot be opened
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineOpen (PLINEDEV pLineDev)
+{
+ LPCOMMCONFIG lpComConfig;
+ DWORD dwRet;
+
+ // The line must be closed
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ return LINEERR_ALLOCATED;
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+
+ // Nullify the terminal window
+ //
+ STOP_UI_DLG (pLineDev, UI_DLG_TERMINAL);
+
+ pLineDev->LineClosed=FALSE;
+
+ // Open the modem port
+ //
+ lpComConfig = (LPCOMMCONFIG)&(pLineDev->pDevCfg->commconfig);
+ dwRet = OpenModem(pLineDev, (LPBYTE)lpComConfig, lpComConfig->dwSize);
+
+ // If we successfully opened the modem, reinitialize the rest of the CB
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // The modem is just opened, it is not connected
+ //
+ pLineDev->DevState = DEVST_DISCONNECTED;
+
+ }
+ else
+ {
+ dwRet = LINEERR_RESOURCEUNAVAIL;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineDetectCall(PLINEDEV)
+//
+// Function: Starts the modem to monitor a call.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_OPERATIONFAILED if the modem fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineDetectCall(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ switch (pLineDev->DevState)
+ {
+ // Do nothing if listening in progress
+ //
+ case DEVST_PORTLISTENINIT:
+ case DEVST_PORTLISTENING:
+ dwRet = ERROR_SUCCESS;
+ break;
+
+ // If the modem is not started, start listening
+ //
+ case DEVST_DISCONNECTED:
+ //
+ // If the privilege is to own an inbound call, start listening now
+ // First Initialize modem
+ //
+ pLineDev->DevState = DEVST_PORTLISTENINIT;
+
+ switch (UnimodemInit(pLineDev))
+ {
+ case ERROR_SUCCESS:
+ ASSERT(0); // We do not expect a success return
+
+ case ERROR_IO_PENDING:
+ dwRet = ERROR_SUCCESS;
+ break;
+
+ default:
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ dwRet = LINEERR_OPERATIONFAILED;
+ break;
+ };
+ break;
+
+ default:
+ dwRet = LINEERR_OPERATIONFAILED;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineMakeCall(PLINEDEV)
+//
+// Function: Dial M for modem.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_OPERATIONFAILED if the modem fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineMakeCall(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ // If we need a UI, start a dialog instance here
+ //
+ if ((GETOPTIONS(pLineDev->pDevCfg) & (TERMINAL_PRE | TERMINAL_POST | MANUAL_DIAL)) ||
+ (LINEMEDIAMODE_INTERACTIVEVOICE == pLineDev->dwCurMediaModes))
+ {
+ CreateMdmDlgInstance(pLineDev);
+ };
+
+ // If pre-dial terminal mode is set, go to terminal mode
+ //
+ if (GETOPTIONS(pLineDev->pDevCfg) & TERMINAL_PRE)
+ {
+ switch (pLineDev->DevState)
+ {
+ case DEVST_PORTLISTENINIT:
+
+ pLineDev->DevState = DEVST_PORTSTARTPRETERMINAL;
+
+ return pLineDev->dwPendingID;
+
+ case DEVST_PORTLISTENING:
+
+ Sleep(100);
+
+ case DEVST_DISCONNECTED:
+
+ pLineDev->DevState = DEVST_PORTSTARTPRETERMINAL;
+
+ if (MdmAsyncContinue(pLineDev, MDM_SUCCESS) == ERROR_SUCCESS)
+ {
+ return pLineDev->dwPendingID;
+ };
+
+ default:
+ DestroyMdmDlgInstance(pLineDev);
+ return LINEERR_OPERATIONFAILED;
+ };
+ };
+
+
+
+ // Start dialing procedure
+ //
+ switch (pLineDev->DevState)
+ {
+
+ case DEVST_PORTLISTENINIT:
+ //
+ // Wait until the current modem initialization to finish,
+ // then start dialing automatically.
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+ dwRet = pLineDev->dwPendingID;
+ break;
+
+
+ case DEVST_PORTLISTENING:
+ //
+ // The modem is listening. It was already initialized.
+ // Stop monitoring immediately.
+ // When the monitoring stops, it will start dialing automatically.
+ //
+
+ //
+ // BUGBUG: To prevent the init or dial strings from stomping the
+ // monitor command, we will wait briefly here
+ //
+ //
+ Sleep(100);
+
+ if (pLineDev->InitStringsAreValid) {
+
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+ dwRet = pLineDev->dwPendingID;
+ MdmAsyncContinue (pLineDev, MDM_SUCCESS);
+ break;
+
+ }
+ //
+ // LineSetDevConfig was called and changes the settings, need to rebuild the
+ // init strings to reflect this
+ //
+ //
+ // Fall on through
+ //
+ //
+
+ case DEVST_DISCONNECTED:
+
+ // The modem is disconnected. Initialize it before dialing.
+ //
+ pLineDev->DevState = DEVST_PORTCONNECTINIT;
+
+ switch (UnimodemInit(pLineDev))
+ {
+ case ERROR_SUCCESS:
+ ASSERT(0); // We do not expect a success return
+
+ case ERROR_IO_PENDING:
+ dwRet = pLineDev->dwPendingID;
+ break;
+
+ default:
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ DestroyMdmDlgInstance(pLineDev);
+ dwRet = LINEERR_OPERATIONFAILED;
+ break;
+ };
+ break;
+
+ default:
+ dwRet = LINEERR_OPERATIONFAILED;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineDial(PLINEDEV)
+//
+// Function: Dial M for modem.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_OPERATIONFAILED if the modem fails
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineDial(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ // Kick start the modem state machine
+ //
+ if (MdmAsyncContinue(pLineDev, MDM_SUCCESS) != ERROR_SUCCESS)
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+ else
+ {
+ dwRet = ERROR_SUCCESS;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineAnswer (PLINEDEV)
+//
+// Function: Answer an offered call.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_INVALCALLSTATE if the call was not offerred.
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineAnswer (PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ if (pLineDev->DevState != DEVST_PORTLISTENOFFER)
+ return LINEERR_INVALCALLSTATE;
+
+ // Kill RING timer
+ KillMdmTimer((DWORD)pLineDev, NULL);
+
+ // Advance the call state and return pending
+ //
+ pLineDev->DevState = DEVST_PORTLISTENANSWER;
+
+ // Get modem to answer the call
+ //
+ switch (UnimodemAnswer(pLineDev))
+ {
+ case ERROR_SUCCESS:
+ ASSERT(0); // We do not expect a success return
+
+ case ERROR_IO_PENDING:
+ dwRet = pLineDev->dwPendingID;
+ break;
+
+ default:
+ dwRet = LINEERR_OPERATIONFAILED;
+ break;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineDrop (PLINEDEV, BOOL)
+//
+// Function: Disconnect the call synchronous or asynchronously.
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_INVALCALLSTATE if the call was not offerred.
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineDrop (PLINEDEV pLineDev, BOOL fSync)
+{
+ DWORD dwRet;
+
+ // Synchronously terminate all the dangling UI windows
+ //
+ DestroyTalkDropDialog(pLineDev);
+ DestroyManualDialog(pLineDev);
+ DestroyTerminalDialog(pLineDev);
+ DestroyMdmDlgInstance(pLineDev);
+
+ // Do we need to do a hangup?
+ //
+ if (LINECALLSTATE_IDLE == pLineDev->dwCallState &&
+ DEVST_DISCONNECTED == pLineDev->DevState)
+ {
+ // The call is idle and the modem is disconnected,
+ // just notify the completion.
+ //
+ (*(gfnCompletionCallback))(pLineDev->dwPendingID, 0L);
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+ dwRet = ERROR_SUCCESS;
+ }
+ else
+ {
+ if (pLineDev->DevState == DEVST_CONNECTED) {
+
+ // Cancel the outstanding remote disconnection detection
+ //
+ UnimodemCancelMonitorDisconnect(pLineDev);
+ }
+
+ if (DEVST_PORTLISTENOFFER == pLineDev->DevState) {
+ //
+ // the call was offered and then droped without answering, need to kill timer
+ //
+ KillMdmTimer((DWORD)pLineDev, NULL);
+ }
+
+
+ if (DEVST_DISCONNECTING == pLineDev->DevState) {
+
+ TSPPRINTF("DevLineDrop: re-entered, waiting for drop to complete");
+
+ RELEASE_LINEDEV(pLineDev);
+
+ WaitForSingleObject(
+ pLineDev->DroppingEvent,
+ 30*1000
+ );
+
+ CLAIM_LINEDEV(pLineDev);
+
+ TSPPRINTF("DevLineDrop: re-entered, Done waiting");
+
+ dwRet = ERROR_SUCCESS;
+
+ } else {
+
+ TSPPRINTF1(
+ "DevLineDrop: Warning. DevState was %lu. Forcing to DISCONNECTING",
+ pLineDev->DevState
+ );
+
+ //
+ // 7/12/96 JosephJ BUGBUG
+ // We will simply clobber any existing command being sent out here,
+ // because we call UnimodemHangup which eventually cancels any pending
+ // I/O and calls purgecomm. End result is that the command being
+ // sent out can get truncated and the next command we send out gets
+ // concatenated to the previously-truncated command. Sometimes this
+ // results in ATE0V1 (truncated to AT) being combined with ATZ to
+ // form ATATZ, causing some modems to go off hook.
+ //
+ // Fix will to fix the state diagram so that previously executing
+ // commands are allowed to complete and response to be properly
+ // read. However this is a hack workaround in the (fSync) case...
+ // We sleep.
+ // We specifically exclude those states which are known to be OK
+ // (no pending I/O.)
+ if (fSync)
+ {
+ switch (pLineDev->DevState)
+ {
+ case DEVST_PORTLISTENING: // Fall through
+ case DEVST_PORTLISTENOFFER: // Fall through
+ case DEVST_PORTCONNECTWAITFORLINEDIAL: // Fall through
+ case DEVST_PORTCONNECTING: // Fall through
+ case DEVST_DISCONNECTED: // Fall through
+ case DEVST_CONNECTED: // Do Nothing.
+ break;
+
+ default:
+ Sleep(150);
+ break;
+ }
+ }
+
+ pLineDev->DevState = DEVST_DISCONNECTING;
+
+ ResetEvent(
+ pLineDev->DroppingEvent
+ );
+
+ // Make a direct call to unimodem to drop the line
+ //
+ switch (UnimodemHangup(pLineDev, fSync))
+ {
+ case ERROR_SUCCESS:
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ case ERROR_IO_PENDING:
+ dwRet = ERROR_SUCCESS;
+ break;
+
+ default:
+ ASSERT(0); // This should not happen whatsoever!!!
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ dwRet = LINEERR_OPERATIONFAILED;
+ break;
+ };
+ };
+ };
+
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineClose (PLINEDEV)
+//
+// Function: Close the modem.
+//
+// Returns: ERROR_SUCCESS always
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineClose (PLINEDEV pLineDev)
+{
+ // If the device is listening, we need to drop the line first
+ //
+ if (pLineDev->DevState != DEVST_DISCONNECTED)
+ {
+ DevlineDrop(pLineDev, TRUE);
+ };
+
+ DestroyMdmDlgInstance(pLineDev);
+
+ // Close the comm port
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ if(pLineDev->hLights != NULL)
+ {
+ TerminateModemLight(pLineDev->hLights);
+ pLineDev->hLights = NULL;
+ };
+
+ CloseModem(pLineDev);
+ pLineDev->hDevice = INVALID_DEVICE;
+ };
+
+ return ERROR_SUCCESS ;
+}
diff --git a/private/unimodem/tapisp/ov_pool.c b/private/unimodem/tapisp/ov_pool.c
new file mode 100644
index 000000000..be32d95b3
--- /dev/null
+++ b/private/unimodem/tapisp/ov_pool.c
@@ -0,0 +1,234 @@
+/******************************************************************************
+
+ Overlapped Structure Pool
+
+ Functions for managing a pool of overlapped structs
+
+ (C) Copyright MICROSOFT Corp., 1987-1996
+
+******************************************************************************/
+
+#include "unimdm.h"
+#include "umdmspi.h"
+
+/*
+ Structure definitions
+ */
+
+typedef struct tagOverList {
+ LPOVERNODE lpList;
+ CRITICAL_SECTION hSem;
+#ifdef DEBUG
+ DWORD dwNumInUse;
+ DWORD dwNumAllocated;
+#endif // DEBUG
+} OVERLIST, *LPOVERLIST;
+
+
+/*
+ Global Variables
+ */
+
+OVERLIST gOverList;
+
+
+/*
+ * BOOL OverPoolInit()
+ *
+ * Function: This function initializes the overlapped pool list
+ *
+ * Returns: TRUE always
+ */
+BOOL OverPoolInit()
+{
+ INITCRITICALSECTION(gOverList.hSem);
+
+ ENTERCRITICALSECTION(gOverList.hSem);
+
+ gOverList.lpList = NULL;
+
+#ifdef DEBUG
+ gOverList.dwNumInUse = 0;
+ gOverList.dwNumAllocated = 0;
+#endif // DEBUG
+
+ LEAVECRITICALSECTION(gOverList.hSem);
+
+ return TRUE;
+}
+
+
+/*
+ * BOOL OverPoolDeinit()
+ *
+ * Function: This function deinitializes the overlapped pool list
+ *
+ * Returns: None
+ */
+void OverPoolDeinit()
+{
+ LPOVERNODE lpOverNode, lpOverNodeNext;
+
+ ENTERCRITICALSECTION(gOverList.hSem);
+
+#ifdef DEBUG
+ if (gOverList.dwNumInUse != 0)
+ {
+ DPRINTF("OverPoolDeinit() called when gOverList.dwNumInUse != 0");
+ ASSERT(0);
+ }
+
+ DPRINTF1("Total number of overlapped nodes allocated = %d",
+ gOverList.dwNumAllocated);
+#endif // DEBUG
+
+ lpOverNode = gOverList.lpList;
+
+ while (lpOverNode)
+ {
+ lpOverNodeNext = lpOverNode->lpNext;
+
+ LocalFree(lpOverNode);
+
+ lpOverNode = lpOverNodeNext;
+ }
+
+ gOverList.lpList = NULL;
+
+ LEAVECRITICALSECTION(gOverList.hSem);
+ DELETECRITICALSECTION(gOverList.hSem);
+}
+
+
+/*
+ * BOOL OverPoolInitTracing()
+ *
+ * Function: Performs tracing-related initialization.
+ *
+ * Returns: None
+ */
+void OverPoolInitTracing(void)
+{
+ traceRegisterObject(
+ &gOverList,
+ TSP_OVER_LIST_GUID,
+ TSP_OVER_LIST_VERSION,
+ 0,
+ 0
+ );
+}
+
+
+/*
+ * BOOL OverPoolDeinitTracing()
+ *
+ * Function: Performs tracing-related de-initialization.
+ *
+ * Returns: None
+ */
+void OverPoolDeinitTracing(void)
+{
+ traceUnRegisterObject(&gOverList, 0, 0);
+}
+
+
+/*
+ * BOOL OverPoolAlloc()
+ *
+ * Function: This function returns a pointer to an overlapped structure.
+ * The structure will be zeroed. The reference count will be
+ * set to what is passed in. This will indicate how many times
+ * OverPoolFree will need to be called to actually free the struct.
+ *
+ * Returns: pointer to an overlapped struct on success or NULL on failure
+ */
+LPOVERLAPPED OverPoolAlloc(DWORD dwToken, DWORD dwRefCount)
+{
+ LPOVERNODE lpOverNode;
+
+ ENTERCRITICALSECTION(gOverList.hSem);
+
+ if (gOverList.lpList != NULL)
+ {
+ // Remove from the free list
+ lpOverNode = gOverList.lpList;
+ gOverList.lpList = lpOverNode->lpNext;
+ ZeroMemory(lpOverNode, sizeof(OVERNODE));
+ }
+ else
+ {
+ // Allocated zeroed memory.
+ lpOverNode = LocalAlloc(LPTR, sizeof(OVERNODE));
+#ifdef DEBUG
+ if (lpOverNode == NULL)
+ {
+ DPRINTF1("LocalAlloc() in OverPoolAlloc() failed = %d",
+ GetLastError());
+ }
+ else
+ {
+ gOverList.dwNumAllocated++;
+ }
+#endif // DEBUG
+
+ }
+
+ if (lpOverNode)
+ {
+ //DPRINTF2("OverPoolAlloc(refcount=%d) = %0.8x", dwRefCount, lpOverNode);
+
+ lpOverNode->dwToken = dwToken;
+ lpOverNode->dwRefCount = dwRefCount;
+
+#ifdef DEBUG
+ gOverList.dwNumInUse++;
+#endif // DEBUG
+ }
+
+ LEAVECRITICALSECTION(gOverList.hSem);
+
+ return (LPOVERLAPPED)lpOverNode;
+}
+
+
+/*
+ * BOOL OverPoolFree()
+ *
+ * Function: This function returns an overlapped structure to the free list.
+ *
+ * Returns: TRUE always
+ */
+void OverPoolFree(LPOVERLAPPED lpOverlapped)
+{
+ LPOVERNODE lpOverNode = (LPOVERNODE)lpOverlapped;
+
+ ENTERCRITICALSECTION(gOverList.hSem);
+
+ //DPRINTF1("OverPoolFree() = %0.8x", lpOverNode);
+
+ lpOverNode->dwRefCount--;
+
+ if (lpOverNode->dwRefCount == 0)
+ {
+ // Add to the free list
+ lpOverNode->lpNext = gOverList.lpList;
+ gOverList.lpList = lpOverNode;
+
+#ifdef DEBUG
+
+ lpOverNode->Type=(DWORD)-1;
+
+ if (gOverList.dwNumInUse == 0)
+ {
+ DPRINTF("OverPoolFree() called to free more than allocated!");
+ ASSERT(0);
+ }
+ else
+ {
+ gOverList.dwNumInUse--;
+ }
+#endif // DEBUG
+ }
+
+ LEAVECRITICALSECTION(gOverList.hSem);
+}
diff --git a/private/unimodem/tapisp/rcids.h b/private/unimodem/tapisp/rcids.h
new file mode 100644
index 000000000..36d72242b
--- /dev/null
+++ b/private/unimodem/tapisp/rcids.h
@@ -0,0 +1,75 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: rcids.h
+// Content: This file contain all the declaration for device setting
+// resource ID
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Wed 15-Jun-1993 10:38:00 -by- Nick Manson [t-nickm]
+// Fri 09-Apr-1993 14:41:01 -by- Viroon Touranachun [viroont]
+//
+//****************************************************************************
+
+#ifndef _RCIDS_
+#define _RCIDS_
+
+#define MAXTITLE 32
+#define MAXMESSAGE 256
+
+//*****************************************************************************
+// Icon ID number section
+//*****************************************************************************
+
+#define IDI_ICON 100
+#define IDI_NULL 101
+#define IDI_EXT_MDM 102
+#define IDI_INT_MDM 103
+#define IDI_PCM_MDM 104
+
+// Terminal Mode Setting
+//
+#define IDD_TERMINALSETTING 1000
+#define IDC_TERMINAL_PRE (IDD_TERMINALSETTING)
+#define IDC_TERMINAL_POST (IDD_TERMINALSETTING+1)
+#define IDC_MANUAL_DIAL (IDD_TERMINALSETTING+2)
+#define IDC_LAUNCH_LIGHTS (IDD_TERMINALSETTING+3)
+#define IDC_TERMINALGRP (IDD_TERMINALSETTING+4)
+#define IDC_MANUAL_DIALGRP (IDD_TERMINALSETTING+5)
+#define IDC_LAUNCH_LIGHTSGRP (IDD_TERMINALSETTING+6)
+#define IDC_WAIT_TEXT (IDD_TERMINALSETTING+7)
+#define IDC_WAIT_SEC (IDD_TERMINALSETTING+8)
+#define IDC_WAIT_SEC_ARRW (IDD_TERMINALSETTING+9)
+#define IDC_WAIT_UNIT (IDD_TERMINALSETTING+10)
+#define IDC_PHONENUMBER (IDD_TERMINALSETTING+11)
+
+#define IDD_TERMINALDLG 1150
+#define CID_T_EB_SCREEN (IDD_TERMINALDLG)
+#define CID_T_PB_ENTER (IDD_TERMINALDLG+1)
+
+// Talk Drop Dialog
+//
+#define IDD_TALKDROP 1300
+#define IDTALK (IDD_TALKDROP)
+#define IDDROP (IDD_TALKDROP+1)
+
+// Manual Dial Dialog
+//
+#define IDD_MANUAL_DIAL 1400
+#define IDCONNECT (IDD_MANUAL_DIAL)
+
+// Resources
+//
+#define ID_STRING_BASE 100
+#define ID_PROVIDER_INFO ID_STRING_BASE+0
+#define IDS_PRETERM_TITLE ID_STRING_BASE+1
+#define IDS_POSTTERM_TITLE ID_STRING_BASE+2
+
+#define IDS_ERR_TITLE 1000
+#define IDS_ERR_INSTALLED IDS_ERR_TITLE+1
+#define IDS_ERR_INV_WAIT IDS_ERR_TITLE+2
+
+
+#endif //_RCIDS_
diff --git a/private/unimodem/tapisp/resource.h b/private/unimodem/tapisp/resource.h
new file mode 100644
index 000000000..bd8776be1
--- /dev/null
+++ b/private/unimodem/tapisp/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NO_MFC 1
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1002
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/private/unimodem/tapisp/resource.rc b/private/unimodem/tapisp/resource.rc
new file mode 100644
index 000000000..10cee01f9
--- /dev/null
+++ b/private/unimodem/tapisp/resource.rc
@@ -0,0 +1,324 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#define APSTUDIO_HIDDEN_SYMBOLS
+#include "windows.h"
+#undef APSTUDIO_HIDDEN_SYMBOLS
+#include "commctrl.h"
+#include "winver.h"
+#include "ntverp.h"
+#include "rcids.h"
+#include "logids.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_NULL ICON DISCARDABLE "..\\resource\\nullmdm.ico"
+IDI_EXT_MDM ICON DISCARDABLE "..\\resource\\modem.ico"
+IDI_INT_MDM ICON DISCARDABLE "..\\resource\\internal.ico"
+IDI_PCM_MDM ICON DISCARDABLE "..\\resource\\pcmcia.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_TERMINALSETTING DIALOG DISCARDABLE 0, 0, 212, 188
+STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
+ WS_SYSMENU
+CAPTION "Options"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Connection control",IDC_TERMINALGRP,10,10,192,54
+ CONTROL "Bring up terminal window &before dialing",
+ IDC_TERMINAL_PRE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 25,25,150,10
+ CONTROL "Bring up terminal window a&fter dialing",
+ IDC_TERMINAL_POST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 25,42,150,10
+ GROUPBOX "Dial control",IDC_MANUAL_DIALGRP,10,74,192,57
+ CONTROL "Operator assisted or &manual dial",IDC_MANUAL_DIAL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,90,150,10
+ LTEXT "&Wait for credit card tone:",IDC_WAIT_TEXT,25,108,79,8
+ EDITTEXT IDC_WAIT_SEC,107,107,25,12,ES_RIGHT | WS_GROUP
+ CONTROL "",IDC_WAIT_SEC_ARRW,"msctls_updown32",UDS_SETBUDDYINT |
+ UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS |
+ WS_BORDER | WS_GROUP,120,107,12,12
+ LTEXT "seconds",IDC_WAIT_UNIT,136,108,29,8
+ GROUPBOX "Status control",IDC_LAUNCH_LIGHTSGRP,10,141,192,37
+ CONTROL "Display modem &status",IDC_LAUNCH_LIGHTS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,25,157,115,10
+END
+
+IDD_TERMINALDLG DIALOG DISCARDABLE 0, 0, 251, 180
+STYLE DS_ABSALIGN | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
+ WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+CAPTION "Terminal Mode"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ EDITTEXT CID_T_EB_SCREEN,8,8,235,140,ES_MULTILINE | WS_VSCROLL |
+ WS_HSCROLL
+ DEFPUSHBUTTON "Enter",CID_T_PB_ENTER,8,8,50,14,NOT WS_VISIBLE
+ PUSHBUTTON "Co&ntinue",IDOK,58,155,54,14
+ PUSHBUTTON "&Cancel",IDCANCEL,125,155,54,14
+END
+
+IDD_TALKDROP DIALOG DISCARDABLE 20, 15, 210, 90
+STYLE DS_ABSALIGN | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
+ WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Call Status"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ ICON IDI_EXT_MDM,-1,10,10,18,20
+ LTEXT "Lift the receiver and click Talk.",-1,42,10,158,11
+ LTEXT "To disconnect, click Hang Up and replace the receiver.",
+ -1,42,26,145,16
+ DEFPUSHBUTTON "&Talk",IDTALK,94,66,51,14
+ PUSHBUTTON "Hang &Up",IDDROP,150,66,50,14
+END
+
+IDD_MANUAL_DIAL DIALOG DISCARDABLE 20, 15, 210, 90
+STYLE DS_ABSALIGN | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER |
+ WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "Operator Assisted or Manual Dial"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ ICON IDI_EXT_MDM,IDC_STATIC,10,10,18,20
+ LTEXT "Pick up the handset and dial (or ask the operator to dial). Press OK immediately after dialing, then replace the handset.\n",
+ IDC_STATIC,42,9,157,24
+ DEFPUSHBUTTON "&OK",IDCONNECT,94,66,51,14
+ PUSHBUTTON "Cancel",IDCANCEL,150,66,50,14
+ LTEXT "Phone Number:",IDC_STATIC,42,43,50,8
+ LTEXT "",IDC_PHONENUMBER,97,43,105,8
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""windows.h""\r\n"
+ "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
+ "#include ""commctrl.h""\r\n"
+ "#include ""winver.h""\r\n"
+ "#include ""ntverp.h""\r\n"
+ "#include ""rcids.h""\r\n"
+ "#include ""logids.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGERR_FAILED_VOICE_WAVEOPEN "ERROR: Failed Wave Open.\r\n"
+ IDS_MSGERR_FAILED_VOICE_WAVECLOSE "ERROR: Failed Wave Close.\r\n"
+ ID_PROVIDER_INFO "Windows Telephony Service Provider for Universal Modem Driver"
+ IDS_PRETERM_TITLE "Pre-Dial Terminal Screen"
+ IDS_POSTTERM_TITLE "Post-Dial Terminal Screen"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_ERR_TITLE "Modem Settings"
+ IDS_ERR_INSTALLED "Universal Modem Service Provider needs to be installed only once."
+ IDS_ERR_INV_WAIT "The wait period is invalid or out of range.\nRe-enter a new number."
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_OK "OK"
+ IDS_RESP_INFORMATIVE "Informative"
+ IDS_RESP_CONNECT "Connect"
+ IDS_RESP_ERROR "Error"
+ IDS_RESP_NO_CARRIER "No Carrier"
+ IDS_RESP_NO_DIALTONE "No Dialtone"
+ IDS_RESP_BUSY "Busy"
+ IDS_RESP_NO_ANSWER "No Answer"
+ IDS_RESP_RING "Ring"
+ IDS_RESP_SSV "SSV"
+ IDS_RESP_SMD "SMD"
+ IDS_RESP_SFA "SFA"
+ IDS_RESP_SRA "SRA"
+ IDS_RESP_SRQ "SRQ"
+ IDS_RESP_SRC "SRC"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_STO "STO"
+ IDS_RESP_SVM "SVM"
+ IDS_RESP_DRON "DRON"
+ IDS_RESP_DROF "DROF"
+ IDS_RESP_DATE "DATE"
+ IDS_RESP_TIME "TIME"
+ IDS_RESP_NMBR "NMBR"
+ IDS_RESP_NAME "NAME"
+ IDS_RESP_MESG "MESG"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_RESP_UNKNOWN "Unknown Response\r\n"
+ IDS_MSGLOG_CONNECTED "Connection established.\r\n"
+ IDS_MSGLOG_CONNECTEDBPS "Connection established at %dbps.\r\n"
+ IDS_MSGLOG_UNKNOWNERRORCONTROL "Error-control off or unknown.\r\n"
+ IDS_MSGLOG_CELLULAR "Cellular error-control on.\r\n"
+ IDS_MSGLOG_ERRORCONTROL "Error-control on.\r\n"
+ IDS_MSGLOG_COMPRESSION "Data compression on.\r\n"
+ IDS_MSGLOG_UNKNOWNCOMPRESSION "Data compression off or unknown.\r\n"
+ IDS_MSGPERF_WRDESC "Bytes sent to modem per second.\r\n"
+ IDS_MSGPERF_WRNAME "Bytes sent/sec\r\n"
+ IDS_MSGPERF_WRREG "SendRate\r\n"
+ IDS_MSGPERF_RDDESC "Bytes received from modem per second.\r\n"
+ IDS_MSGPERF_RDNAME "Bytes received/sec\r\n"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGPERF_RDREG "ReceiveRate\r\n"
+ IDS_MSGPERF_UNITS "Bytes\r\n"
+ IDS_MSGLOG_STATISTICS "Session Statistics:\r\n"
+ IDS_MSGLOG_READSTATS " Reads : %d bytes\r\n"
+ IDS_MSGLOG_WRITESTATS " Writes: %d bytes\r\n"
+ IDS_MSGLOG_FRAMEERRORSTATS " Frame Errors: %d\r\n"
+ IDS_MSGLOG_SERIALOVERRUNERRORSTATS "Serial Overrun Errors: %d\r\n"
+ IDS_MSGLOG_BUFFEROVERRUNERRORSTATS "Buffer Overrun Errors: %d\r\n"
+ IDS_MSGLOG_PARITYERRORSTATS " Parity Errors: %d\r\n"
+ IDS_MSGERR_FAILED_INITSTRINGCONSTRUCTION
+ "ERROR: Init string construction failed.\r\n"
+ IDS_MSGERR_FAILED_INIT "ERROR: Init failed.\r\n"
+ IDS_MSGERR_FAILED_DIALSTRINGCONSTRUCTION
+ "ERROR: Dial string construction failed for '%s'.\r\n"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGERR_FAILED_DIAL "ERROR: Dial failed.\r\n"
+ IDS_MSGERR_FAILED_MONITOR "ERROR: Monitor failed.\r\n"
+ IDS_MSGERR_FAILED_ANSWER "ERROR: Answer failed.\r\n"
+ IDS_MSGERR_FAILED_HANGUP "ERROR: Hangup failed.\r\n"
+ IDS_MSGERR_FAILED_FLUSH "ERROR: Unable to send command to the device.\r\n"
+ IDS_MSGERR_FAILED_RESPONSE
+ "ERROR: Unable to recover from unrecognized response.\r\n"
+ IDS_MSGERR_FAILED_VOICE_ANSWER "ERROR: Voice Answer failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_DIALSETUP "ERROR: Voice dial setup failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_COMMAND "ERROR: Voice Command failed. %s\r\n"
+ IDS_MSGERR_FAILED_VOICE_STARTWAVE
+ "ERROR: Start wave play/record failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_STOPWAVE
+ "ERROR: Stop wave play/record failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_SETFORMAT
+ "ERROR: Failed to set wave foramt.\r\n"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGERR_FAILED_VOICE_SPEAKERPHONECOMMAND
+ "ERROR: Speaker Phaone Command Failed.\r\n"
+ IDS_MSGERR_FAILED_VOICE_GENERATEDTMF "ERROR: Generate DTMF failed.\r\n"
+ IDS_MSGWARN_UNRECOGNIZEDRESPONSE
+ "WARNING: Unrecognized response. Retrying...\r\n"
+ IDS_MSGWARN_FAILEDTOQUERYVALUE
+ "WARNING: Unable to load the '%s' string.\r\n"
+ IDS_MSGWARN_FAILEDDTRDROPPAGE
+ "WARNING: The modem did not respond to lowering DTR. Trying software hangup...\r\n"
+ IDS_MSGWARN_PREVIOUSCONNECTIONNOTHUNGUP
+ "WARNING: A previous program left a connection established. Hanging up previous connection...\r\n"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGLOG_OPENED "%s in use.\r\n"
+ IDS_MSGLOG_DRIVERDESC "Modem type: %s\r\n"
+ IDS_MSGLOG_INFPATH "Modem inf path: %s\r\n"
+ IDS_MSGLOG_INFSECTION "Modem inf section: %s\r\n"
+ IDS_MSGLOG_CLOSED "Modem closed.\r\n"
+ IDS_MSGLOG_DIAL "Dialing.\r\n"
+ IDS_MSGLOG_MONITOR "Waiting for a call.\r\n"
+ IDS_MSGLOG_ANSWER "Answering the call.\r\n"
+ IDS_MSGLOG_INIT "Initializing modem.\r\n"
+ IDS_MSGLOG_HANGUP "Hanging up the modem.\r\n"
+ IDS_MSGLOG_VOICE_ANSWER "Answering the voice call.\r\n"
+ IDS_MSGLOG_VOICE_DIALSETUP "Setup to dial voice call.\r\n"
+ IDS_MSGLOG_VOICE_COMMAND "Issueing voice command.\r\n"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ IDS_MSGLOG_VOICE_STARTWAVE "Starting wave play/record.\r\n"
+ IDS_MSGLOG_VOICE_STOPWAVE "Ending wave play/record.\r\n"
+ IDS_MSGLOG_VOICE_SETWAVEFORMAT "Setting wave format.\r\n"
+ IDS_MSGLOG_VOICE_WAVEOPEN "Voice Modem Wave Open.\r\n"
+ IDS_MSGLOG_VOICE_WAVECLOSE "Voice Modem Wave Close.\r\n"
+ IDS_MSGLOG_VOICE_SPEAKERPHONECOMMAND
+ "Issueing Speakerphone command.\r\n"
+ IDS_MSGLOG_VOICE_GENTERAEDTMF "Generating DTMF.\r\n"
+ IDS_MSGLOG_VOICE_DLERECEIVED "Received DLE Raw=%d, Translated=%d.\r\n"
+ IDS_MSGLOG_HARDWAREHANGUP "Hardware hangup by lowering DTR.\r\n"
+ IDS_MSGLOG_REMOTEHANGUP "Remote modem hung up.\r\n"
+ IDS_MSGLOG_COMMAND "Send: %s\r\n"
+ IDS_MSGLOG_RAWRESPONSE "Recv: %s\r\n"
+ IDS_MSGLOG_EMPTYRESPONSE "<no response>\r\n"
+ IDS_MSGLOG_RESPONSE "Interpreted response: %s\r\n"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/private/unimodem/tapisp/sources b/private/unimodem/tapisp/sources
new file mode 100644
index 000000000..994dbf9cc
--- /dev/null
+++ b/private/unimodem/tapisp/sources
@@ -0,0 +1,82 @@
+!IF 0
+
+Copyright (c) 1989-1993 Microsoft Corporation
+
+Module Name:
+
+ sources.
+
+Abstract:
+
+ This file specifies the target component being built and the list of
+ sources files needed to build that component. Also specifies optional
+ compiler switches and libraries that are unique for the component being
+ built.
+
+Author:
+
+ John Rogers (JohnRo) 25-Oct-1991
+
+NOTE: Commented description of this file is in \nt\public\oak\bin\sources.tpl
+
+Revision History:
+
+!ENDIF
+
+ROOT=..\..
+MAJORCOMP=net
+MINORCOMP=tapi
+
+TARGETNAME=unimdm
+TARGETPATH=obj
+TARGETTYPE=DYNLINK
+TARGETEXT=TSP
+
+TARGETLIBS=$(_NTDRIVE)\nt\public\sdk\lib\*\kernel32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\gdi32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\user32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\advapi32.lib \
+ $(_NTDRIVE)\nt\public\sdk\lib\*\setupapi.lib \
+ ..\lib\*\rovcomm.lib
+
+DLLBASE=0x69000000
+
+INCLUDES=.;..\inc;
+
+C_DEFINES=-DWIN32 -DWINNT -D_WIN32 -DWINVER=0x0400
+
+USE_MSVCRT=1
+
+SOURCES=common.c \
+ log.c \
+ unimdm.c \
+ mdmutil.c \
+ modem.c \
+ devioctl.c \
+ mdmasyn.c \
+ mcxstate.c \
+ mcxutil.c \
+ mcxapi.c \
+ mcxrw.c \
+ wndthrd.c \
+ cfgdlg.c \
+ terminal.c \
+ talkdrop.c \
+ manual.c \
+ umdminit.c \
+ debug.c \
+ ov_pool.c \
+ tracing.c \
+ unimdm.rc
+
+UMTYPE=windows
+
+DLLENTRY=_DllMainCRTStartup
+
+PRECOMPILED_INCLUDE=unimdm.h
+PRECOMPILED_PCH=unimdmp.pch
+PRECOMPILED_OBJ=unimdmp.obj
+
+!IFNDEF 386_WARNING_LEVEL
+386_WARNING_LEVEL=/W3
+!ENDIF
diff --git a/private/unimodem/tapisp/talkdrop.c b/private/unimodem/tapisp/talkdrop.c
new file mode 100644
index 000000000..025598634
--- /dev/null
+++ b/private/unimodem/tapisp/talkdrop.c
@@ -0,0 +1,137 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: talkdrop.c
+//
+// Copyright (c) 1992-1994, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 2/28/94 Chris Caputo Created
+//
+//
+// Description: Talk drop dialog, as found in the ATSP
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include "wndthrd.h"
+#include "rcids.h"
+
+//****************************************************************************
+// Function prototypes
+//****************************************************************************
+
+LRESULT TalkDropDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam);
+
+//****************************************************************************
+// HWND CreateTalkDropDlg(HWND hwndOwner, DWORD idLine)
+//
+// Function: creates a modeless talk/drop dialog box
+//
+// Returns: the modeless window handle
+//
+//****************************************************************************
+
+HWND CreateTalkDropDlg(HWND hwndOwner, DWORD idLine)
+{
+ HWND hwnd;
+
+ // Create dialog
+ //
+ hwnd = CreateDialogParam(ghInstance,
+ MAKEINTRESOURCE(IDD_TALKDROP),
+ hwndOwner,
+ TalkDropDlgProc,
+ (LPARAM)idLine);
+ return hwnd;
+}
+
+//****************************************************************************
+// LRESULT TalkDropDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
+//
+// Function: Talk-Drop dialog routine
+//
+// Returns: varies
+//
+//****************************************************************************
+
+LRESULT TalkDropDlgProc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
+{
+ DWORD idLine;
+
+ switch(wMsg)
+ {
+ case WM_INITDIALOG:
+
+ // remember the hLineDev passed in
+ //
+ SetWindowLong(hwnd, DWL_USER, (LONG)lParam);
+ return 1;
+ break;
+
+ case WM_COMMAND:
+ {
+ UINT idCmd=GET_WM_COMMAND_ID(wParam, lParam);
+ TUISPIDLLCALLBACK Callback;
+ //
+ // One of the buttons (Talk/Drop) is pressed
+ //
+ if (idCmd == IDTALK || idCmd == IDDROP || idCmd == IDCANCEL)
+ {
+ DLGREQ DlgReq;
+ PDLGNODE pDlgNode;
+
+ pDlgNode= (PDLGNODE)GetWindowLong(hwnd, DWL_USER);
+
+ idLine = pDlgNode->idLine;
+
+ // Make a direct call to unimodem to drop the line
+ //
+ DlgReq.dwCmd = UI_REQ_HANGUP_LINE;
+ DlgReq.dwParam = 0;
+
+ Callback=GetCallbackProc(pDlgNode->Parent);
+
+ (*Callback)(idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&DlgReq, sizeof(DlgReq));
+
+ // Return the result
+ //
+ EndMdmDialog(pDlgNode->Parent,idLine, TALKDROP_DLG,
+ (idCmd == IDTALK) ? MDM_SUCCESS : MDM_HANGUP);
+ return 1;
+ break;
+ }
+ break;
+ }
+
+ case WM_DESTROY:
+ {
+ TUISPIDLLCALLBACK Callback;
+ DLGREQ DlgReq;
+
+ PDLGNODE pDlgNode;
+
+ pDlgNode= (PDLGNODE)GetWindowLong(hwnd, DWL_USER);
+
+ idLine = pDlgNode->idLine;
+
+
+ DlgReq.dwCmd = UI_REQ_END_DLG;
+ DlgReq.dwParam = TALKDROP_DLG;
+
+ Callback=GetCallbackProc(pDlgNode->Parent);
+
+ (*Callback)(idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&DlgReq, sizeof(DlgReq));
+ break;
+ }
+ default:
+ break;
+ };
+
+ return 0;
+}
diff --git a/private/unimodem/tapisp/terminal.c b/private/unimodem/tapisp/terminal.c
new file mode 100644
index 000000000..6993434ed
--- /dev/null
+++ b/private/unimodem/tapisp/terminal.c
@@ -0,0 +1,890 @@
+//THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
+//ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
+// PARTICULAR PURPOSE.
+//
+// Copyright 1993-1996 Microsoft Corporation. All Rights Reserved.
+//
+// MODULE: terminal.c
+//
+// PURPOSE: Terminal screen simulation
+//
+// FUNCTIONS:
+// CreateTerminalDlg()
+// TerminalDlgWndProc()
+// TerminalScreenWndProc()
+// OnCommand()
+// GetInput()
+// SendCharacter()
+// AdjustTerminal()
+// TerminalThread()
+//
+
+#include "unimdm.h" // includes common header files and global declarations
+#include "umdmspi.h" // includes common header files and global declarations
+#include "wndthrd.h" // includes UI declarations
+#include "rcids.h" // includes the resource definitions
+
+//****************************************************************************
+// Constants Declaration
+//****************************************************************************
+
+#define MAXTITLE 32
+#define MAXMESSAGE 256
+
+#define WM_MODEMNOTIFY (WM_USER + 998)
+#define WM_EOLFROMDEVICE (WM_USER + 999)
+
+#define SIZE_ReceiveBuf 1024
+#define SIZE_SendBuf 1
+
+#define Y_MARGIN 4
+#define X_SPACING 2
+#define MIN_X 170
+#define MIN_Y 80
+
+#define TERMINAL_BK_COLOR (RGB( 0, 0, 0 ))
+#define TERMINAL_FR_COLOR (RGB( 255, 255, 255 ))
+#define MAXTERMLINE 24
+
+#define READ_EVENT 0
+#define STOP_EVENT 1
+#define MAX_EVENT 2
+
+//****************************************************************************
+// Type Definitions
+//****************************************************************************
+
+typedef struct tagTERMDLG {
+ HANDLE hport;
+ HANDLE hThread;
+ HANDLE hEvent[MAX_EVENT];
+ HWND hwnd;
+ PBYTE pbyteReceiveBuf;
+ PBYTE pbyteSendBuf;
+ HBRUSH hbrushScreenBackground;
+ HFONT hfontTerminal;
+ WNDPROC WndprocOldTerminalScreen;
+ DWORD idLine;
+ HWND ParenthWnd;
+} TERMDLG, *PTERMDLG, FAR* LPTERMDLG;
+
+//****************************************************************************
+// Function prototypes
+//****************************************************************************
+
+LRESULT FAR PASCAL TerminalDlgWndProc(HWND hwnd,
+ UINT wMsg,
+ WPARAM wParam,
+ LPARAM lParam );
+LRESULT FAR PASCAL TerminalScreenWndProc(HWND hwnd,
+ UINT wMsg,
+ WPARAM wParam,
+ LPARAM lParam );
+BOOL NEAR PASCAL OnCommand (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+BOOL NEAR PASCAL GetInput (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+VOID NEAR PASCAL SendCharacter( HWND hwnd, BYTE byte );
+VOID NEAR PASCAL AdjustTerminal (HWND hwnd, int wWidth, int wHeight);
+void WINAPI TerminalThread (PTERMDLG pTerminaldialog);
+
+//****************************************************************************
+// HWND CreateTerminalDlg(HWND hwndOwner, DWORD idLine)
+//
+// Function: creates a modeless terminal dialog box
+//
+// Returns: the modeless window handle
+//
+//****************************************************************************
+
+HWND CreateTerminalDlg(HWND hwndOwner, DWORD idLine)
+{
+ HANDLE hComm;
+ HWND hwnd;
+ COMMTIMEOUTS commtimeout;
+ PTERMDLG pTerminaldialog;
+ DWORD id;
+ int i;
+ int iRet;
+ TERMREQ TermReq;
+
+ TUISPIDLLCALLBACK Callback;
+
+ Callback=GetCallbackProc(hwndOwner);
+
+ // Get the terminal parameters
+ //
+ TermReq.DlgReq.dwCmd = UI_REQ_TERMINAL_INFO;
+ TermReq.DlgReq.dwParam = GetCurrentProcessId();
+
+ (*Callback)(idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&TermReq, sizeof(TermReq));
+ hComm = TermReq.hDevice;
+
+ // Allocate the terminal buffer
+ //
+ if ((pTerminaldialog = (PTERMDLG)LocalAlloc(LPTR, sizeof(*pTerminaldialog)))
+ == NULL)
+ return NULL;
+
+ if ((pTerminaldialog->pbyteReceiveBuf = (PBYTE)LocalAlloc(LMEM_FIXED,
+ SIZE_ReceiveBuf
+ + SIZE_SendBuf))
+ == NULL)
+ {
+ LocalFree((HLOCAL)pTerminaldialog);
+ return NULL;
+ };
+ pTerminaldialog->pbyteSendBuf = pTerminaldialog->pbyteReceiveBuf + SIZE_ReceiveBuf;
+
+ // Initialize the terminal buffer
+ //
+ pTerminaldialog->ParenthWnd= hwndOwner;
+ pTerminaldialog->hport = hComm;
+ pTerminaldialog->idLine = idLine;
+ pTerminaldialog->hbrushScreenBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
+ pTerminaldialog->hfontTerminal = (HFONT)GetStockObject( SYSTEM_FIXED_FONT );
+
+ // Start receiving from the port
+ //
+ commtimeout.ReadIntervalTimeout = MAXDWORD;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = 0;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 1000;
+ SetCommTimeouts(hComm, &commtimeout);
+
+ SetCommMask(hComm, EV_RXCHAR);
+
+ if (TermReq.dwTermType == TERMINAL_PRE) {
+
+#define ECHO_OFF "ATE1\r"
+
+ COMMTIMEOUTS commtimeout;
+ HANDLE hEvent;
+
+ hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+
+ if (hEvent != NULL) {
+
+ DWORD cb;
+ OVERLAPPED ov;
+ BOOLEAN bResult;
+
+ ov.Offset = 0;
+ ov.OffsetHigh = 0;
+
+ // OR with 1 to prevent it from being posted to the completion port.
+ //
+ ov.hEvent = (HANDLE)((DWORD)hEvent | 1);
+
+ bResult=WriteFile(
+ hComm,
+ ECHO_OFF,
+ sizeof(ECHO_OFF)-1,
+ &cb,
+ &ov
+ );
+
+
+ if (!bResult) {
+
+ DWORD dwResult = GetLastError();
+
+ if (ERROR_IO_PENDING == dwResult) {
+
+ GetOverlappedResult(
+ hComm,
+ &ov,
+ &cb,
+ TRUE
+ );
+ }
+ }
+
+ CloseHandle(hEvent);
+ }
+ }
+
+
+ // Create read thread and the synchronization objects
+ for (i = 0; i < MAX_EVENT; i++)
+ {
+ pTerminaldialog->hEvent[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
+ };
+
+ pTerminaldialog->hThread = CreateThread(NULL, 0,
+ (LPTHREAD_START_ROUTINE) TerminalThread,
+ pTerminaldialog, 0, &id);
+
+ // Create the terminal window
+ hwnd = CreateDialogParam(ghInstance,
+ MAKEINTRESOURCE(IDD_TERMINALDLG),
+ hwndOwner,
+ (DLGPROC)TerminalDlgWndProc,
+ (LPARAM)pTerminaldialog);
+
+ if (IsWindow(hwnd))
+ {
+ TCHAR szTitle[MAXTITLE];
+
+ // Set window caption
+ //
+ LoadString (ghInstance,
+ (TermReq.dwTermType == TERMINAL_POST)?
+ IDS_POSTTERM_TITLE : IDS_PRETERM_TITLE,
+ szTitle, sizeof(szTitle));
+ SetWindowText(hwnd, szTitle);
+ }
+ else
+ {
+ // The terminal dialog was terminalted, free resources
+ //
+ SetEvent(pTerminaldialog->hEvent[STOP_EVENT]);
+
+ SetCommMask(hComm, 0);
+ WaitForSingleObject(pTerminaldialog->hThread, INFINITE);
+ CloseHandle(pTerminaldialog->hThread);
+
+ for (i = 0; i < MAX_EVENT; i++)
+ {
+ CloseHandle(pTerminaldialog->hEvent[i]);
+ };
+
+ LocalFree((HLOCAL)pTerminaldialog->pbyteReceiveBuf);
+ LocalFree((HLOCAL)pTerminaldialog);
+
+ hwnd = NULL;
+ };
+
+ return hwnd;
+}
+
+
+/*----------------------------------------------------------------------------
+** Terminal Window Procedure
+**----------------------------------------------------------------------------
+*/
+
+LRESULT FAR PASCAL TerminalDlgWndProc(HWND hwnd,
+ UINT wMsg,
+ WPARAM wParam,
+ LPARAM lParam )
+{
+ PTERMDLG pTerminaldialog;
+ HWND hwndScrn;
+ RECT rect;
+
+ switch (wMsg)
+ {
+ case WM_INITDIALOG:
+ pTerminaldialog = (PTERMDLG)lParam;
+ SetWindowLong(hwnd, DWL_USER, (LONG)lParam);
+ SetForegroundWindow(hwnd);
+ pTerminaldialog->hwnd = hwnd;
+
+ // Install subclassed WndProcs.
+ //
+ hwndScrn = GetDlgItem(hwnd, CID_T_EB_SCREEN);
+ pTerminaldialog->WndprocOldTerminalScreen =
+ (WNDPROC)SetWindowLong( hwndScrn, GWL_WNDPROC,
+ (LONG)TerminalScreenWndProc );
+
+ // Set the terminal screen font
+ //
+ SendMessage(hwndScrn, WM_SETFONT, (WPARAM)pTerminaldialog->hfontTerminal,
+ 0L);
+
+ // Adjust the dimension
+ //
+ GetClientRect(hwnd, &rect);
+ AdjustTerminal(hwnd, rect.right-rect.left, rect.bottom-rect.top);
+
+ // Start receiving from the port
+ //
+ PostMessage(hwnd, WM_MODEMNOTIFY, 0, 0);
+
+ // Set the input focus to the screen
+ //
+ SetFocus(hwndScrn);
+ return 0;
+
+ case WM_CTLCOLOREDIT:
+ {
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwnd, DWL_USER);
+
+ /* Set terminal screen colors to TTY-ish green on black.
+ */
+ if (pTerminaldialog->hbrushScreenBackground)
+ {
+ SetBkColor( (HDC)wParam, TERMINAL_BK_COLOR );
+ SetTextColor((HDC)wParam, TERMINAL_FR_COLOR );
+
+ return (LRESULT)pTerminaldialog->hbrushScreenBackground;
+ }
+
+ break;
+ };
+
+ case WM_MODEMNOTIFY:
+ return GetInput(hwnd, wMsg, wParam, lParam);
+
+ case WM_COMMAND:
+
+ // Handle the control activities
+ //
+ return OnCommand(hwnd, wMsg, wParam, lParam);
+
+ case WM_DESTROY:
+ {
+ DLGREQ DlgReq;
+ int i;
+ TUISPIDLLCALLBACK Callback;
+
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwnd, DWL_USER);
+ SetWindowLong( GetDlgItem(hwnd, CID_T_EB_SCREEN), GWL_WNDPROC,
+ (LONG)pTerminaldialog->WndprocOldTerminalScreen );
+
+ // Destroy the dialog
+ //
+ DlgReq.dwCmd = UI_REQ_END_DLG;
+ DlgReq.dwParam = TERMINAL_DLG;
+
+ Callback=GetCallbackProc(pTerminaldialog->ParenthWnd);
+
+ (*Callback)(pTerminaldialog->idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&DlgReq, sizeof(DlgReq));
+
+ // The terminal dialog was terminated, free resources
+ //
+ SetEvent(pTerminaldialog->hEvent[STOP_EVENT]);
+
+ if (pTerminaldialog->hport != NULL)
+ {
+ SetCommMask(pTerminaldialog->hport, 0);
+ };
+
+ if (pTerminaldialog->hThread != NULL)
+ {
+ WaitForSingleObject(pTerminaldialog->hThread, INFINITE);
+ CloseHandle(pTerminaldialog->hThread);
+ };
+ CloseHandle(pTerminaldialog->hport);
+
+ for (i = 0; i < MAX_EVENT; i++)
+ {
+ CloseHandle(pTerminaldialog->hEvent[i]);
+ };
+
+ LocalFree((HLOCAL)pTerminaldialog->pbyteReceiveBuf);
+ LocalFree((HLOCAL)pTerminaldialog);
+ break;
+ }
+ case WM_SIZE:
+ AdjustTerminal(hwnd, (int)LOWORD(lParam), (int)HIWORD(lParam));
+ break;
+
+ case WM_GETMINMAXINFO:
+ {
+ MINMAXINFO FAR* lpMinMaxInfo = (MINMAXINFO FAR*)lParam;
+ DWORD dwUnit = GetDialogBaseUnits();
+
+ lpMinMaxInfo->ptMinTrackSize.x = (MIN_X*LOWORD(dwUnit))/4;
+ lpMinMaxInfo->ptMinTrackSize.y = (MIN_Y*LOWORD(dwUnit))/4;
+ break;
+ };
+ };
+
+ return 0;
+}
+
+/*----------------------------------------------------------------------------
+** Terminal Screen Subclasses Window Procedure
+**----------------------------------------------------------------------------
+*/
+
+LRESULT FAR PASCAL TerminalScreenWndProc(HWND hwnd,
+ UINT wMsg,
+ WPARAM wParam,
+ LPARAM lParam )
+{
+ HWND hwndParent;
+ PTERMDLG pTerminaldialog;
+
+ hwndParent = GetParent(hwnd);
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwndParent, DWL_USER);
+
+ if (wMsg == WM_EOLFROMDEVICE)
+ {
+ /* Remove the first line if the next line exceeds the maximum line
+ */
+ if (SendMessage(hwnd, EM_GETLINECOUNT, 0, 0L) == MAXTERMLINE)
+ {
+ SendMessage(hwnd, EM_SETSEL, 0,
+ SendMessage(hwnd, EM_LINEINDEX, 1, 0L));
+ SendMessage(hwnd, EM_REPLACESEL, 0, (LPARAM)(LPTSTR)TEXT(""));
+ SendMessage(hwnd, EM_SETSEL, 32767, 32767);
+ SendMessage(hwnd, EM_SCROLLCARET, 0, 0);
+ };
+
+ /* An end-of-line in the device input was received. Send a linefeed
+ ** character to the window.
+ */
+ wParam = '\n';
+ wMsg = WM_CHAR;
+ }
+ else
+ {
+ BOOL fCtrlKeyDown = (GetKeyState( VK_CONTROL ) < 0);
+ BOOL fShiftKeyDown = (GetKeyState( VK_SHIFT ) < 0);
+
+ if (wMsg == WM_KEYDOWN)
+ {
+ /* The key was pressed by the user.
+ */
+ if (wParam == VK_RETURN && !fCtrlKeyDown && !fShiftKeyDown)
+ {
+ /* Enter key pressed without Shift or Ctrl is discarded. This
+ ** prevents Enter from being interpreted as "press default
+ ** button" when pressed in the edit box.
+ */
+ return 0;
+ }
+
+ if (fCtrlKeyDown && wParam == VK_TAB)
+ {
+ /* Ctrl+Tab pressed. Send a tab character to the device.
+ ** Pass tab thru to let the edit box handle the visuals.
+ ** Ctrl+Tab doesn't generate a WM_CHAR.
+ */
+ SendCharacter( hwndParent, (BYTE )VK_TAB );
+ }
+
+ if (GetKeyState( VK_MENU ) < 0)
+ {
+ return (CallWindowProc(pTerminaldialog->WndprocOldTerminalScreen, hwnd, wMsg, wParam, lParam ));
+ };
+ }
+ else if (wMsg == WM_CHAR)
+ {
+ /* The character was typed by the user.
+ */
+ if (wParam == VK_TAB)
+ {
+ /* Ignore tabs...Windows sends this message when Tab (leave
+ ** field) is pressed but not when Ctrl+Tab (insert a TAB
+ ** character) is pressed...weird.
+ */
+ return 0;
+ }
+
+#ifdef UNICODE
+ {
+ CHAR chAnsi;
+
+ if (WideCharToMultiByte(CP_ACP,
+ 0,
+ (LPWSTR)&wParam,
+ 1,
+ &chAnsi,
+ 1,
+ NULL,
+ NULL))
+ {
+ SendCharacter( hwndParent, (BYTE )chAnsi );
+ }
+ }
+#else // UNICODE
+ SendCharacter( hwndParent, (BYTE )wParam );
+#endif // UNICODE
+
+ return 0;
+ }
+ }
+
+ /* Call the previous window procedure for everything else.
+ */
+ return (CallWindowProc(pTerminaldialog->WndprocOldTerminalScreen, hwnd, wMsg, wParam, lParam ));
+}
+
+/*----------------------------------------------------------------------------
+** Terminal Window's Control Handler
+**----------------------------------------------------------------------------
+*/
+
+BOOL NEAR PASCAL OnCommand (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (GET_WM_COMMAND_ID(wParam, lParam))
+ {
+ case CID_T_EB_SCREEN:
+ {
+ switch (HIWORD(wParam))
+ {
+ case EN_SETFOCUS:
+ {
+ /* Turn off the default button whenever the terminal
+ ** window has the focus. Pressing [Return] in the
+ ** terminal acts like a normal terminal.
+ */
+ SendDlgItemMessage(hwnd, CID_T_PB_ENTER, BM_SETSTYLE,
+ (WPARAM)BS_DEFPUSHBUTTON, TRUE);
+
+ /* Don't select the entire string on entry.
+ */
+ SendDlgItemMessage(hwnd, CID_T_EB_SCREEN, EM_SETSEL,
+ 32767, 32767);
+ SendMessage(hwnd, EM_SCROLLCARET, 0, 0);
+ break;
+ };
+ };
+
+ break;
+ };
+
+ case IDOK:
+ case IDCANCEL:
+ {
+ PTERMDLG pTerminaldialog;
+
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwnd, DWL_USER);
+ EndMdmDialog(pTerminaldialog->ParenthWnd,pTerminaldialog->idLine, TERMINAL_DLG,
+ (GET_WM_COMMAND_ID(wParam, lParam) == IDOK) ?
+ MDM_SUCCESS : MDM_HANGUP);
+ break;
+ }
+ };
+ return 0;
+}
+
+
+/*----------------------------------------------------------------------------
+** Terminal Input Handler
+**----------------------------------------------------------------------------
+*/
+
+BOOL NEAR PASCAL GetInput (HWND hwnd,
+ UINT usMsg,
+ WPARAM wParam,
+ LPARAM lParam )
+{
+ PTERMDLG pTerminaldialog;
+ DWORD cbRead;
+ OVERLAPPED ov;
+ HANDLE hEvent;
+ COMMTIMEOUTS commtimeout;
+
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwnd, DWL_USER);
+
+ if ((hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) == NULL)
+ {
+ return FALSE;
+ }
+
+ // Set write timeout to one second
+ //
+ commtimeout.ReadIntervalTimeout = MAXDWORD;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = 0;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 1000;
+ SetCommTimeouts(pTerminaldialog->hport, &commtimeout);
+
+ do
+ {
+ /* Make sure we still have the comm port
+ */
+ if (pTerminaldialog->hport == NULL)
+ break;
+
+ /* A character has been received from the device.
+ */
+ ov.Internal = 0;
+ ov.InternalHigh = 0;
+ ov.Offset = 0;
+ ov.OffsetHigh = 0;
+ ov.hEvent = (HANDLE)((DWORD)hEvent | 1);
+
+ cbRead = 0;
+
+ if (FALSE == ReadFile(pTerminaldialog->hport,
+ pTerminaldialog->pbyteReceiveBuf,
+ SIZE_ReceiveBuf, (LPDWORD)&cbRead, &ov))
+ {
+ DWORD dwResult = GetLastError();
+
+ if (ERROR_IO_PENDING == dwResult)
+ {
+ GetOverlappedResult(pTerminaldialog->hport,
+ &ov,
+ &cbRead,
+ TRUE);
+ }
+ else
+ {
+ DPRINTF1("ReadFile() in GetInput() failed (0x%8x)!", dwResult);
+ }
+ };
+
+ SetEvent(pTerminaldialog->hEvent[READ_EVENT]);
+
+ /* Send the device talk to the terminal edit box.
+ */
+ if (cbRead != 0)
+ {
+ char szBuf[ SIZE_ReceiveBuf + 1 ];
+#ifdef UNICODE
+ WCHAR szUnicodeBuf[ SIZE_ReceiveBuf + 1 ];
+#endif // UNICODE
+ LPSTR pch = szBuf;
+ int i, cb;
+ HWND hwndScrn = GetDlgItem(hwnd, CID_T_EB_SCREEN);
+
+ cb = cbRead;
+ for (i = 0; i < cb; ++i)
+ {
+ char ch = pTerminaldialog->pbyteReceiveBuf[ i ];
+
+ /* Formatting: Converts CRs to LFs (there seems to be no VK_
+ ** for LF) and throws away LFs. This prevents the user from
+ ** exiting the dialog when they press Enter (CR) in the
+ ** terminal screen. LF looks like CRLF in the edit box. Also,
+ ** throw away TABs because otherwise they change focus to the
+ ** next control.
+ */
+ if (ch == VK_RETURN)
+ {
+ /* Must send whenever end-of-line is encountered because
+ ** EM_REPLACESEL doesn't handle VK_RETURN characters well
+ ** (prints garbage).
+ */
+ *pch = '\0';
+
+ /* Turn off current selection, if any, and replace the null
+ ** selection with the current buffer. This has the effect
+ ** of adding the buffer at the caret. Finally, send the
+ ** EOL to the window which (unlike EM_REPLACESEL) handles
+ ** it correctly.
+ */
+ SendMessage(hwndScrn, WM_SETREDRAW, (WPARAM )FALSE, 0);
+
+ SendMessage(hwndScrn, EM_SETSEL, 32767, 32767 );
+#ifdef UNICODE
+ if (MultiByteToWideChar(CP_ACP,
+ 0,
+ szBuf,
+ -1,
+ szUnicodeBuf,
+ sizeof(szUnicodeBuf)))
+ {
+ SendMessage(hwndScrn, EM_REPLACESEL, 0, (LPARAM )szUnicodeBuf );
+ }
+#else // UNICODE
+ SendMessage(hwndScrn, EM_REPLACESEL, 0, (LPARAM )szBuf );
+#endif // UNICODE
+ SendMessage(hwndScrn, WM_EOLFROMDEVICE, 0, 0 );
+
+ SendMessage(hwndScrn, WM_SETREDRAW, (WPARAM )TRUE, 0);
+ SendMessage(hwndScrn, EM_SCROLLCARET, 0, 0);
+ InvalidateRect(hwndScrn, NULL, FALSE);
+
+ /* Start afresh on the output buffer.
+ */
+ pch = szBuf;
+ continue;
+ }
+ else if (ch == '\n' || ch == VK_TAB)
+ continue;
+
+ *pch++ = ch;
+ }
+
+ *pch = '\0';
+
+ if (pch != szBuf)
+ {
+ /* Send the last remnant of the line.
+ */
+ SendMessage(hwndScrn, EM_SETSEL, 32767, 32767);
+#ifdef UNICODE
+ if (MultiByteToWideChar(CP_ACP,
+ 0,
+ szBuf,
+ -1,
+ szUnicodeBuf,
+ sizeof(szUnicodeBuf)))
+ {
+ SendMessage(hwndScrn, EM_REPLACESEL, 0, (LPARAM)szUnicodeBuf );
+ }
+#else // UNICODE
+ SendMessage(hwndScrn, EM_REPLACESEL, 0, (LPARAM)szBuf );
+#endif // UNICODE
+ SendMessage(hwndScrn, EM_SCROLLCARET, 0, 0);
+ }
+ }
+ }while (cbRead != 0);
+
+ CloseHandle(hEvent);
+
+ return TRUE;
+}
+
+/*----------------------------------------------------------------------------
+** Terminal Output Handler
+**----------------------------------------------------------------------------
+*/
+
+VOID NEAR PASCAL SendCharacter( HWND hwnd, BYTE byte )
+
+ /* Send character 'byte' to the device.
+ */
+{
+ PTERMDLG pTerminaldialog;
+ DWORD cbWrite;
+ OVERLAPPED ov;
+ HANDLE hEvent;
+ COMMTIMEOUTS commtimeout;
+
+ pTerminaldialog = (PTERMDLG)GetWindowLong(hwnd, DWL_USER);
+
+ /* Make sure we still have the comm port
+ */
+ if (pTerminaldialog->hport == NULL)
+ return;
+
+ /* Send the character to the device. It is not passed thru
+ ** because the device will echo it.
+ */
+ pTerminaldialog->pbyteSendBuf[ 0 ] = (BYTE )byte;
+
+ // Set write timeout to one second
+ //
+ commtimeout.ReadIntervalTimeout = MAXDWORD;
+ commtimeout.ReadTotalTimeoutMultiplier = 0;
+ commtimeout.ReadTotalTimeoutConstant = 0;
+ commtimeout.WriteTotalTimeoutMultiplier= 0;
+ commtimeout.WriteTotalTimeoutConstant = 1000;
+ SetCommTimeouts(pTerminaldialog->hport, &commtimeout);
+
+ if ((hEvent = CreateEvent(NULL, TRUE, FALSE, NULL)) != NULL)
+ {
+ ov.Internal = 0;
+ ov.InternalHigh = 0;
+ ov.Offset = 0;
+ ov.OffsetHigh = 0;
+ ov.hEvent = (HANDLE)((DWORD)hEvent | 1);
+
+ cbWrite = 0;
+
+ if (FALSE == WriteFile(pTerminaldialog->hport,
+ pTerminaldialog->pbyteSendBuf,
+ SIZE_SendBuf, &cbWrite, &ov))
+ {
+ DWORD dwResult = GetLastError();
+ DWORD dwNumBytesWritten;
+
+ if (ERROR_IO_PENDING == dwResult)
+ {
+ GetOverlappedResult(pTerminaldialog->hport,
+ &ov,
+ &dwNumBytesWritten,
+ TRUE);
+ if (dwNumBytesWritten != SIZE_SendBuf)
+ {
+ DPRINTF1("WriteFile() in SendCharacter() only wrote %d bytes!",
+ dwNumBytesWritten);
+ }
+ }
+ else
+ {
+ DPRINTF1("WriteFile() in SendCharacter() failed (0x%8x)!", dwResult);
+ }
+ }
+
+ CloseHandle(hEvent);
+ }
+
+ return;
+}
+
+/*----------------------------------------------------------------------------
+** Terminal Apperance Adjuster
+**----------------------------------------------------------------------------
+*/
+
+VOID NEAR PASCAL AdjustTerminal (HWND hwnd, int wWidth, int wHeight)
+{
+ HWND hwndCtrl;
+ RECT rect;
+ SIZE sizeButton;
+ POINT ptPos;
+ DWORD dwUnit;
+
+ // Get the sizes of the push buttons
+ //
+ dwUnit = GetDialogBaseUnits();
+ hwndCtrl = GetDlgItem(hwnd, IDOK);
+ GetWindowRect(hwndCtrl, &rect);
+ sizeButton.cx = rect.right - rect.left;
+ sizeButton.cy = rect.bottom - rect.top;
+ ptPos.x = wWidth/2 - ((X_SPACING*LOWORD(dwUnit))/4)/2 - sizeButton.cx;
+ ptPos.y = wHeight - (sizeButton.cy+((Y_MARGIN*HIWORD(dwUnit))/4));
+
+ // Move the push buttons
+ MoveWindow(hwndCtrl, ptPos.x, ptPos.y, sizeButton.cx, sizeButton.cy, TRUE);
+
+ ptPos.x += ((X_SPACING*LOWORD(dwUnit))/4) + sizeButton.cx;
+ MoveWindow(GetDlgItem(hwnd, IDCANCEL), ptPos.x, ptPos.y,
+ sizeButton.cx, sizeButton.cy, TRUE);
+
+ // Get the current position of the terminal screen
+ hwndCtrl = GetDlgItem(hwnd, CID_T_EB_SCREEN);
+ GetWindowRect(hwndCtrl, &rect);
+ ScreenToClient(hwnd, (LPPOINT)&rect);
+ MoveWindow(hwndCtrl, rect.left, rect.top,
+ wWidth - 2*rect.left,
+ ptPos.y - rect.top - ((Y_MARGIN*HIWORD(dwUnit))/4),
+ TRUE);
+
+ InvalidateRect(hwnd, NULL, TRUE);
+ return;
+}
+
+/*----------------------------------------------------------------------------
+** Terminal read-notification thread
+**----------------------------------------------------------------------------
+*/
+
+void WINAPI TerminalThread (PTERMDLG pTerminaldialog)
+{
+ DWORD dwEvent;
+ DWORD dwMask;
+
+ while((dwEvent = WaitForMultipleObjects(MAX_EVENT, pTerminaldialog->hEvent,
+ FALSE, INFINITE))
+ < WAIT_OBJECT_0+MAX_EVENT)
+ {
+ switch (dwEvent)
+ {
+ case READ_EVENT:
+
+ // If we are stopped already, just get out of here
+ //
+ if (WaitForSingleObject(pTerminaldialog->hEvent[STOP_EVENT], 0)
+ == WAIT_TIMEOUT)
+ {
+ dwMask = 0;
+ WaitCommEvent(pTerminaldialog->hport, &dwMask, NULL);
+
+ if ((dwMask & EV_RXCHAR) && (pTerminaldialog->hwnd != NULL))
+ {
+ PostMessage(pTerminaldialog->hwnd, WM_MODEMNOTIFY, 0, 0);
+ };
+ break;
+ };
+
+ case STOP_EVENT:
+ ExitThread(ERROR_SUCCESS);
+ break;
+ };
+ };
+}
diff --git a/private/unimodem/tapisp/timer.c b/private/unimodem/tapisp/timer.c
new file mode 100644
index 000000000..cb22775d5
--- /dev/null
+++ b/private/unimodem/tapisp/timer.c
@@ -0,0 +1,527 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: timer.c
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+//
+//
+// Description:
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+
+#include "timer.h"
+
+typedef struct _TIMER_CONTROL {
+
+ CRITICAL_SECTION Lock;
+
+ PUNIMODEM_TIMER TimerToBeSet;
+
+ HANDLE Event;
+
+ HANDLE ThreadHandle;
+
+ DWORD ThreadID;
+
+ BOOL TimerEnd;
+
+ HANDLE TimerThreadRunningEvent;
+
+ CRITICAL_SECTION CancelCriticalSection;
+
+} TIMER_CONTROL, *PTIMER_CONTROL;
+
+VOID WINAPI
+TimerThreadProc(
+ PTIMER_CONTROL TimerControl
+ );
+
+VOID WINAPI
+TimerApcRoutine(
+ PUNIMODEM_TIMER ThisTimer,
+ DWORD LowTime,
+ DWORD HighTime
+ );
+
+
+TIMER_CONTROL TimerControlBlock;
+
+LONG WINAPI
+InitializeTimerThread(
+ VOID
+ )
+
+{
+ LONG Result;
+ PTIMER_CONTROL TimerControl;
+
+ TimerControl=&TimerControlBlock;
+
+ TimerControl->TimerEnd=FALSE;
+
+ TimerControl->TimerToBeSet=NULL;
+
+ InitializeCriticalSection(
+ &TimerControl->Lock
+ );
+
+
+ InitializeCriticalSection(
+ &TimerControl->CancelCriticalSection
+ );
+
+ TimerControl->Event=CreateEvent(
+ NULL,
+ FALSE, // autoreset
+ FALSE, // reset
+ NULL
+ );
+
+
+ if (TimerControl->Event == NULL) {
+
+ return GetLastError();
+
+ }
+
+ TimerControl->TimerThreadRunningEvent=CreateEvent(
+ NULL,
+ TRUE, // man reset
+ FALSE, // reset
+ NULL
+ );
+
+ if (TimerControl->TimerThreadRunningEvent == NULL) {
+
+ Result=GetLastError();
+
+ CloseHandle(TimerControl->Event);
+
+ return Result;
+ }
+
+ TimerControl->ThreadHandle=CreateThread(
+ NULL,
+ 0,
+ TimerThreadProc,
+ TimerControl,
+ 0,
+ &TimerControl->ThreadID
+ );
+
+ if (TimerControl->ThreadHandle == NULL) {
+
+ Result=GetLastError();
+
+ CloseHandle(TimerControl->TimerThreadRunningEvent);
+
+ CloseHandle(TimerControl->Event);
+
+ return Result;
+ }
+
+ return ERROR_SUCCESS;
+
+}
+
+
+VOID WINAPI
+TimerThreadProc(
+ PTIMER_CONTROL TimerControl
+ )
+
+{
+
+ while (!TimerControl->TimerEnd) {
+
+ //
+ // if canceling, block here until the cancel code is done
+ //
+ EnterCriticalSection(
+ &TimerControl->CancelCriticalSection
+ );
+
+ D_TRACE(McxDpf(888,"TimerThreadProc: Past cancel spinlock");)
+
+ //
+ // done running for now
+ //
+ ResetEvent(
+ TimerControl->TimerThreadRunningEvent
+ );
+
+ //
+ // release it now, since the cancel routine has done what it needed to
+ //
+ LeaveCriticalSection(
+ &TimerControl->CancelCriticalSection
+ );
+
+ D_TRACE(McxDpf(888,"TimerThreadProc: Thread waiting");)
+
+ //
+ // wait for APC's, or our event to be signaled
+ //
+ WaitForSingleObjectEx(
+ TimerControl->Event,
+ INFINITE,
+ TRUE
+ );
+
+ D_TRACE(McxDpf(888,"TimerThreadProc: thread running");)
+
+ //
+ // set this so the cancel code can tell when the thread non alertable
+ //
+ SetEvent(
+ TimerControl->TimerThreadRunningEvent
+ );
+
+
+
+ EnterCriticalSection(
+ &TimerControl->Lock
+ );
+
+ while (TimerControl->TimerToBeSet != NULL) {
+
+ PUNIMODEM_TIMER NewTimer;
+
+ NewTimer=TimerControl->TimerToBeSet;
+
+ TimerControl->TimerToBeSet=NewTimer->Next;
+
+ D_TRACE(McxDpf(888,"TimerThreadProc: Setting new timer");)
+
+ SetWaitableTimer(
+ NewTimer->TimerHandle,
+ &NewTimer->DueTime,
+ 0,
+ TimerApcRoutine,
+ NewTimer,
+ FALSE
+ );
+
+ }
+
+ LeaveCriticalSection(
+ &TimerControl->Lock
+ );
+
+
+
+
+ }
+
+ return;
+
+}
+
+
+VOID WINAPI
+TimerApcRoutine(
+ PUNIMODEM_TIMER TimerObject,
+ DWORD LowTime,
+ DWORD HighTime
+ )
+
+{
+
+ TIMER_CALLBACK *Callback;
+ HANDLE Context1;
+ HANDLE Context2;
+
+
+ EnterCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+ Callback=TimerObject->CallbackProc;
+ Context1=TimerObject->Context1;
+ Context2=TimerObject->Context2;
+
+
+ TimerObject->CallbackProc=NULL;
+ TimerObject->Context1=NULL;
+ TimerObject->Context2=NULL;
+
+ LeaveCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+
+ (*Callback)(
+ Context1,
+ Context2
+ );
+
+ return;
+
+}
+
+
+HANDLE WINAPI
+CreateUnimodemTimer(
+ VOID
+ )
+
+{
+
+ PUNIMODEM_TIMER TimerObject;
+
+ TimerObject=LocalAlloc(LPTR,sizeof(UNIMODEM_TIMER));
+
+ if (TimerObject == NULL) {
+
+ return NULL;
+ }
+
+
+ TimerObject->Next=NULL;
+
+ TimerObject->CallbackProc=NULL;
+ TimerObject->Context1=NULL;
+ TimerObject->Context2=NULL;
+
+ InitializeCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+
+ TimerObject->TimerHandle=CreateWaitableTimer(
+ NULL,
+ TRUE,
+ NULL
+ );
+
+ if (TimerObject->TimerHandle == NULL) {
+
+ LocalFree(TimerObject);
+
+ return NULL;
+ }
+
+ return (HANDLE)TimerObject;
+
+}
+
+VOID WINAPI
+FreeUnimodemTimer(
+ HANDLE TimerHandle
+ )
+
+{
+ PUNIMODEM_TIMER TimerObject=(PUNIMODEM_TIMER) TimerHandle;
+
+ CancelUnimodemTimer(
+ TimerObject
+ );
+
+
+ CloseHandle(
+ TimerObject->TimerHandle
+ );
+
+ LocalFree(TimerObject);
+
+ return;
+}
+
+
+
+VOID WINAPI
+SetUnimodemTimer(
+ HANDLE TimerHandle,
+ DWORD Duration,
+ TIMER_CALLBACK CallbackFunc,
+ HANDLE Context1,
+ HANDLE Context2
+ )
+
+{
+
+ PUNIMODEM_TIMER TimerObject=(PUNIMODEM_TIMER) TimerHandle;
+
+ EnterCriticalSection(
+ &TimerControlBlock.Lock
+ );
+
+ EnterCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+ D_TRACE(McxDpf(888,"SetUnimodemTimer: ");)
+
+ TimerObject->Next=NULL;
+
+ TimerObject->CallbackProc=CallbackFunc;
+ TimerObject->Context1=Context1;
+ TimerObject->Context2=Context2;
+
+
+ TimerObject->DueTime=Int32x32To64(Duration,-10000);
+
+
+ TimerObject->Next=TimerControlBlock.TimerToBeSet;
+
+ TimerControlBlock.TimerToBeSet=TimerObject;
+
+ SetEvent(
+ TimerControlBlock.Event
+ );
+
+ D_TRACE(McxDpf(888,"SetUnimodemTimer: Done");)
+
+ LeaveCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+ LeaveCriticalSection(
+ &TimerControlBlock.Lock
+ );
+
+ return;
+
+}
+
+
+BOOL WINAPI
+CancelUnimodemTimer(
+ HANDLE TimerHandle
+ )
+
+{
+
+ PUNIMODEM_TIMER TimerObject=(PUNIMODEM_TIMER) TimerHandle;
+
+ PUNIMODEM_TIMER Current;
+ PUNIMODEM_TIMER Prev;
+ BOOL ReturnValue=TRUE;
+
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: ");)
+ //
+ // enter the cancel critical section, so the timer thread will block
+ //
+ EnterCriticalSection(
+ &TimerControlBlock.CancelCriticalSection
+ );
+
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: Got cancel lock");)
+ //
+ // Signal the event, so the timer thread will run and block on the criical section
+ //
+ SetEvent(
+ TimerControlBlock.Event
+ );
+
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: Waiting for thread to run");)
+ //
+ // now wait for the thread to actaully run so we know it is not alerted
+ //
+ WaitForSingleObject(
+ TimerControlBlock.TimerThreadRunningEvent,
+ INFINITE
+ );
+
+
+ EnterCriticalSection(
+ &TimerControlBlock.Lock
+ );
+
+ EnterCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+
+ Prev=NULL;
+
+ Current=TimerControlBlock.TimerToBeSet;
+
+ //
+ // see if it waiting to be set
+ //
+ while (Current != NULL) {
+
+ if (Current == TimerObject) {
+ //
+ // found it
+ //
+ if (Current == TimerControlBlock.TimerToBeSet) {
+
+ TimerControlBlock.TimerToBeSet=Current->Next;
+
+ } else {
+
+ Prev->Next=Current->Next;
+ }
+
+ TimerObject->Next=NULL;
+ TimerObject->CallbackProc=NULL;
+
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: timer not set yet");)
+
+ goto Done;
+
+ }
+
+ Prev=Current;
+ Current=Current->Next;
+ }
+
+ //
+ // not on list
+ //
+ if (TimerObject->CallbackProc != NULL) {
+ //
+ // hasn't run yet, so kill it
+ //
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: Canceling pending timer");)
+
+ CancelWaitableTimer(
+ TimerObject->TimerHandle
+ );
+
+ TimerObject->Next=NULL;
+ TimerObject->CallbackProc=NULL;
+
+ } else {
+ //
+ // didn't get the timer, it has run
+ //
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: Missed timer");)
+
+ ReturnValue=FALSE;
+ }
+
+Done:
+
+ LeaveCriticalSection(
+ &TimerObject->CriticalSection
+ );
+
+
+ LeaveCriticalSection(
+ &TimerControlBlock.Lock
+ );
+
+
+ //
+ // Done canceling, let the thread go
+ //
+ LeaveCriticalSection(
+ &TimerControlBlock.CancelCriticalSection
+ );
+
+ D_TRACE(McxDpf(888,"CancelUnimodemTimer: done canceling");)
+
+ return ReturnValue;
+
+}
diff --git a/private/unimodem/tapisp/timer.h b/private/unimodem/tapisp/timer.h
new file mode 100644
index 000000000..f1a8daa82
--- /dev/null
+++ b/private/unimodem/tapisp/timer.h
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+typedef VOID WINAPI TIMER_CALLBACK(HANDLE,HANDLE);
+
+
+typedef struct _UNIMODEM_TIMER {
+
+ struct _UNIMODEM_TIMER *Next;
+
+ CRITICAL_SECTION CriticalSection;
+
+ TIMER_CALLBACK *CallbackProc;
+ HANDLE Context1;
+ HANDLE Context2;
+
+ HANDLE TimerHandle;
+
+ LONGLONG DueTime;
+
+} UNIMODEM_TIMER, *PUNIMODEM_TIMER;
+
+
+
+LONG WINAPI
+InitializeTimerThread(
+ VOID
+ );
+
+
+HANDLE WINAPI
+CreateUnimodemTimer(
+ VOID
+ );
+
+VOID WINAPI
+SetUnimodemTimer(
+ HANDLE TimerObject,
+ DWORD Duration,
+ TIMER_CALLBACK CallbackFunc,
+ HANDLE Context1,
+ HANDLE Context2
+ );
+
+BOOL WINAPI
+CancelUnimodemTimer(
+ HANDLE TimerObject
+ );
diff --git a/private/unimodem/tapisp/traceids.h b/private/unimodem/tapisp/traceids.h
new file mode 100644
index 000000000..a5f2081d7
--- /dev/null
+++ b/private/unimodem/tapisp/traceids.h
@@ -0,0 +1,130 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: TRACEIDS.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/11/96 JosephJ Created
+//
+//
+// Description: Trace-related IDs.
+//
+//****************************************************************************
+
+
+//------------------ IDFROM_* -----------------------------------------------
+//
+// THESE INDICATE LOCATIONS IN THE TSP FROM WHICH A TRACING CALL IS MADE
+//
+// BASE IDs
+#define IDFROM_TSPIFN_BASE 10000L
+#define IDFROM_LINEDEV_BASE 20000L
+#define IDFROM_MDMTIMER_BASE 30000L
+
+// LineDev related
+//
+#define IDFROM_LINEDEV_INITLIST (IDFROM_LINEDEV_BASE+ 0L)
+#define IDFROM_LINEDEV_ALLOCATE (IDFROM_LINEDEV_BASE+ 1L)
+#define IDFROM_LINEDEV_FREE (IDFROM_LINEDEV_BASE+ 2L)
+#define IDFROM_LINEDEV_ADD (IDFROM_LINEDEV_BASE+ 3L)
+
+#define IDFROM_LINEDEV_HANGUP_BEFOREWAIT (IDFROM_LINEDEV_BASE+ 10L)
+#define IDFROM_LINEDEV_HANGUP_AFTERWAIT (IDFROM_LINEDEV_BASE+ 11L)
+
+#define IDFROM_LINEDEV_GETFIRST (IDFROM_LINEDEV_BASE+ 100L)
+#define IDFROM_LINEDEV_GETFROMDEVICEHANDLE (IDFROM_LINEDEV_BASE+ 101L)
+#define IDFROM_LINEDEV_GETFROMNAME (IDFROM_LINEDEV_BASE+ 102L)
+#define IDFROM_LINEDEV_GETFROMHANDLE (IDFROM_LINEDEV_BASE+ 103L)
+#define IDFROM_LINEDEV_GETFROMID (IDFROM_LINEDEV_BASE+ 104L)
+
+#define IDFROM_LINEDEV_ASYNC (IDFROM_LINEDEV_BASE+ 200L)
+#define IDFROM_LINEDEV_ASYNC_GOTCOMPLETION (IDFROM_LINEDEV_BASE+ 210L)
+
+#define IDFROM_DEVLINE_SHUTDOWN (IDFROM_LINEDEV_BASE+ 310L)
+
+// Timer List related
+//
+#define IDFROM_MDMTIMER_INIT (IDFROM_MDMTIMER_BASE+ 000L)
+#define IDFROM_MDMTIMER_DEINIT (IDFROM_MDMTIMER_BASE+ 010L)
+#define IDFROM_MDMTIMER_SET (IDFROM_MDMTIMER_BASE+ 020L)
+#define IDFROM_MDMTIMER_KILL (IDFROM_MDMTIMER_BASE+ 030L)
+#define IDFROM_MDMTIMER_TIMERTHRD_TIMEOUT (IDFROM_MDMTIMER_BASE+ 040L)
+#define IDFROM_MDMTIMER_TIMERTHRD_RECALC (IDFROM_MDMTIMER_BASE+ 050L)
+
+// TSPI_line*
+//
+#define IDFROM_TSPI_lineAccept (IDFROM_TSPIFN_BASE+ 10L)
+#define IDFROM_TSPI_lineAnswer (IDFROM_TSPIFN_BASE+ 20L)
+#define IDFROM_TSPI_lineClose (IDFROM_TSPIFN_BASE+ 30L)
+#define IDFROM_TSPI_lineCloseCall (IDFROM_TSPIFN_BASE+ 40L)
+#define IDFROM_TSPI_lineConditionalMediaDetection (IDFROM_TSPIFN_BASE+ 50L)
+#define IDFROM_TSPI_lineDial (IDFROM_TSPIFN_BASE+ 60L)
+#define IDFROM_TSPI_lineDrop (IDFROM_TSPIFN_BASE+ 70L)
+#define IDFROM_TSPI_lineDropOnClose (IDFROM_TSPIFN_BASE+ 80L)
+#define IDFROM_TSPI_lineGetAddressCaps (IDFROM_TSPIFN_BASE+ 90L)
+#define IDFROM_TSPI_lineGetAddressStatus (IDFROM_TSPIFN_BASE+ 100L)
+#define IDFROM_TSPI_lineGetCallAddressID (IDFROM_TSPIFN_BASE+ 110L)
+#define IDFROM_TSPI_lineGetCallInfo (IDFROM_TSPIFN_BASE+ 120L)
+#define IDFROM_TSPI_lineGetCallStatus (IDFROM_TSPIFN_BASE+ 130L)
+#define IDFROM_TSPI_lineGetDevCaps (IDFROM_TSPIFN_BASE+ 140L)
+#define IDFROM_TSPI_lineGetDevConfig (IDFROM_TSPIFN_BASE+ 150L)
+#define IDFROM_TSPI_lineGetIcon (IDFROM_TSPIFN_BASE+ 160L)
+#define IDFROM_TSPI_lineGetID (IDFROM_TSPIFN_BASE+ 170L)
+#define IDFROM_TSPI_lineGetLineDevStatus (IDFROM_TSPIFN_BASE+ 180L)
+#define IDFROM_TSPI_lineGetNumAddressIDs (IDFROM_TSPIFN_BASE+ 190L)
+#define IDFROM_TSPI_lineMakeCall (IDFROM_TSPIFN_BASE+ 200L)
+#define IDFROM_TSPI_lineNegotiateTSPIVersion (IDFROM_TSPIFN_BASE+ 210L)
+#define IDFROM_TSPI_lineOpen (IDFROM_TSPIFN_BASE+ 220L)
+#define IDFROM_TSPI_lineSetAppSpecific (IDFROM_TSPIFN_BASE+ 230L)
+#define IDFROM_TSPI_lineSetCallParams (IDFROM_TSPIFN_BASE+ 240L)
+#define IDFROM_TSPI_lineSetDefaultMediaDetection (IDFROM_TSPIFN_BASE+ 250L)
+#define IDFROM_TSPI_lineSetDevConfig (IDFROM_TSPIFN_BASE+ 260L)
+#define IDFROM_TSPI_lineSetMediaMode (IDFROM_TSPIFN_BASE+ 270L)
+#define IDFROM_TSPI_lineSetStatusMessages (IDFROM_TSPIFN_BASE+ 280L)
+
+// TSPI_provider*
+//
+#define IDFROM_TSPI_providerConfig (IDFROM_TSPIFN_BASE+ 500L)
+#define IDFROM_TSPI_providerCreateLineDevice (IDFROM_TSPIFN_BASE+ 510L)
+#define IDFROM_TSPI_providerEnumDevices (IDFROM_TSPIFN_BASE+ 520L)
+#define IDFROM_TSPI_providerFreeDialogInstance (IDFROM_TSPIFN_BASE+ 530L)
+#define IDFROM_TSPI_providerGenericDialogData (IDFROM_TSPIFN_BASE+ 540L)
+#define IDFROM_TSPI_providerInit (IDFROM_TSPIFN_BASE+ 550L)
+#define IDFROM_TSPI_providerInstall (IDFROM_TSPIFN_BASE+ 560L)
+#define IDFROM_TSPI_providerRemove (IDFROM_TSPIFN_BASE+ 570L)
+#define IDFROM_TSPI_providerShutdown (IDFROM_TSPIFN_BASE+ 580L)
+#define IDFROM_TSPI_providerUIIdentify (IDFROM_TSPIFN_BASE+ 590L)
+
+// ----------------- END IDFROM_* -------------------------------------------
+
+
+
+//------------------ IDEVENT_ -----------------------------------------------
+//
+// THESE INDICATE VARIOUS EVENTS IN THE TSP
+//
+// BASE IDs
+//
+#define IDEVENT_CP_BASE 10000L // Completion-port
+#define IDEVENT_W32C_BASE 20000L // Win32-Comm functions
+#define IDEVENT_CS_BASE 30000L // Critical Sections
+#define IDEVENT_TSPFN_BASE 40000L // TSP Functions
+#define IDEVENT_LOG_BASE 50000L // TSP Functions
+
+
+#define IDEVENT_CP_POST (IDEVENT_CP_BASE+ 10L)
+#define IDEVENT_CP_GET (IDEVENT_CP_BASE+ 20L)
+
+
+#define IDEVENT_TSPFN_ENTER (IDEVENT_TSPFN_BASE+ 10L)
+#define IDEVENT_TSPFN_EXIT (IDEVENT_TSPFN_BASE+ 20L)
+#define IDEVENT_TSPFN_EVENTPROC (IDEVENT_TSPFN_BASE+ 30L)
+#define IDEVENT_TSPFN_COMPLETIONPROC (IDEVENT_TSPFN_BASE+ 40L)
+
+
+#define IDEVENT_LOG_PRINTF (IDEVENT_LOG_BASE+ 10L)
+#define IDEVENT_LOG_STRING (IDEVENT_LOG_BASE+ 20L)
diff --git a/private/unimodem/tapisp/tracing.c b/private/unimodem/tapisp/tracing.c
new file mode 100644
index 000000000..5ad7915ad
--- /dev/null
+++ b/private/unimodem/tapisp/tracing.c
@@ -0,0 +1,696 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: TRACING.C
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/29/96 JosephJ Created
+//
+//
+// Description: Tracing (retail-mode diagnostics) functions
+//
+//****************************************************************************
+#include "unimdm.h"
+#include "umdmspi.h"
+
+// Other modules use this via the TRACINGENABLED macro to determine if
+// tracing is enabled in this session.
+BOOL gfTracingEnabled;
+
+
+#define fTRACING_INITED (0x1<<0)
+#define fTRACING_EXTDLLBOUND (0x1<<1)
+
+#define TRACINGINITED() (gTracing.dwFlags&fTRACING_INITED)
+#define EXTDLLBOUND() (gTracing.dwFlags&fTRACING_EXTDLLBOUND)
+
+typedef BOOL (WINAPI *PFNINIT) (DWORD, LPDWORD);
+typedef void (WINAPI *PFNDEINIT) (void);
+typedef void (WINAPI *PFNNOTIFY) (PNOTIFICATION_FRAME);
+typedef void (WINAPI *PFNREGISTEROBJECT) (PVOID, PGUID, DWORD, DWORD, DWORD);
+typedef void (WINAPI *PFNUNREGISTEROBJECT) (PVOID, DWORD, DWORD);
+typedef void (WINAPI *PFNTRACE1) (DWORD);
+typedef void (WINAPI *PFNTRACE2) (DWORD, DWORD);
+typedef void (WINAPI *PFNTRACE3) (DWORD, DWORD, DWORD);
+typedef void (WINAPI *PFNTRACE4) (DWORD, DWORD, DWORD, DWORD);
+typedef void (WINAPI *PFNTRACE5) (DWORD, DWORD, DWORD, DWORD, DWORD);
+typedef void (WINAPI *PFNTRACE8) (DWORD, DWORD, DWORD, DWORD, DWORD,
+ DWORD, DWORD, DWORD);
+
+// Maintains info on the binding to the external MODEMDBG.DLL which contains
+// extended tracing and diagnostic information.
+// The ext field in gTracing is initialized after a successful call to
+// itraceBindToExternalDll.
+typedef struct
+{
+ HANDLE hDll;
+ PFNINIT pfnInit;
+ PFNDEINIT pfnDeinit;
+ PFNREGISTEROBJECT pfnRegisterObject;
+ PFNUNREGISTEROBJECT pfnUnRegisterObject;
+ PFNNOTIFY pfnNotify;
+ PFNTRACE1 pfnTrace1;
+ PFNTRACE2 pfnTrace2;
+ PFNTRACE3 pfnTrace3;
+ PFNTRACE4 pfnTrace4;
+ PFNTRACE5 pfnTrace5;
+ PFNTRACE8 pfnTrace8;
+
+} EXTERNAL_DLL;
+
+// Global internal tracing state.
+struct {
+ DWORD dwFlags;
+ CRITICAL_SECTION crit;
+ EXTERNAL_DLL ext;
+ LINEEVENT lineEventProc;
+ ASYNC_COMPLETION TapiCompletionProc;
+} gTracing;
+
+
+//---------- PRIVATE FUNCTIONS -------------------------------
+BOOL itraceCheckIfEnabled(DWORD dwPermanentID);
+BOOL itraceBindToExternalDll(void);
+void itraceUnbindFromExternalDll(void);
+void CALLBACK itraceEventProc(HTAPILINE htLine,
+ HTAPICALL htCall,
+ DWORD dwMsg,
+ DWORD dwParam1,
+ DWORD dwParam2,
+ DWORD dwParam3
+ );
+void CALLBACK itraceTapiCompletionProc(
+ DRV_REQUESTID dwRequestID,
+ LONG lResult
+ );
+
+
+//****************************************************************************
+// Function: To be called on process attach
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceOnProcessAttach(void)
+{
+ InitializeCriticalSection(&gTracing.crit);
+}
+
+
+//****************************************************************************
+// Function: To be called on process detach
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceOnProcessDetach(void)
+{
+ DeleteCriticalSection(&gTracing.crit);
+}
+
+
+//****************************************************************************
+// Function: To be called on provider initialization
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceInitialize(DWORD dwPermanentID)
+{
+ TCHAR rgtchExternalDllName[MAX_PATH];
+
+ EnterCriticalSection(&gTracing.crit);
+ ASSERT(!gTracing.dwFlags);
+
+ // Determine if tracing is enabled, if so set the gTracingEnabled flag.
+ gfTracingEnabled = itraceCheckIfEnabled(dwPermanentID);
+
+ // If tracing enabled, try to load the external trace dll and get the
+ // entry points to that function.
+ if (TRACINGENABLED())
+ {
+ if (itraceBindToExternalDll())
+ {
+ ASSERT(EXTDLLBOUND());
+ }
+ }
+
+ gTracing.dwFlags |= fTRACING_INITED;
+ LeaveCriticalSection(&gTracing.crit);
+}
+
+
+//****************************************************************************
+// Function: To be called on provider shutdown
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceDeinitialize(void)
+{
+ EnterCriticalSection(&gTracing.crit);
+
+ if (!TRACINGINITED()) goto end;
+
+ // Deinit external dll..
+ if (EXTDLLBOUND())
+ {
+ itraceUnbindFromExternalDll();
+ }
+
+
+ gTracing.dwFlags = 0;
+
+end:
+ ASSERT(!gTracing.dwFlags);
+ LeaveCriticalSection(&gTracing.crit);
+}
+
+
+//****************************************************************************
+// Function: Registers an arbitrary object with the external dll.
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceRegisterObject(
+ PVOID pv, // Pointer to the object
+ PGUID pg, // GUID uniquely defining the object
+ DWORD dwVersion, // Implementation version of the object
+ DWORD dwFlags, // Unused, currently zero
+ DWORD dwParam // Unused, currently zero
+)
+{
+
+ DPRINTF2("traceRegisterObject: obj 0x%lx, type 0x%lx\n",
+ (DWORD) pv, (DWORD) pg);
+ if (!TRACINGENABLED()) goto end;
+
+ if (EXTDLLBOUND())
+ {
+ ASSERT(gTracing.ext.pfnRegisterObject);
+ gTracing.ext.pfnRegisterObject(pv, pg, dwVersion, dwFlags, dwParam);
+ }
+
+
+end:
+ return;
+}
+
+//****************************************************************************
+// Function: UnRegisters an arbitrary object with the external dll.
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceUnRegisterObject(
+ PVOID pv, // Pointer to a previously-registered object.
+ DWORD dwFlags, // Unused, currently zero
+ DWORD dwParam // Unused, currently zero
+)
+{
+ DPRINTF1("traceUnRegiserObject: obj 0x%lx\n", (DWORD) pv);
+ if (!TRACINGENABLED()) goto end;
+
+ if (EXTDLLBOUND())
+ {
+ ASSERT(gTracing.ext.pfnUnRegisterObject);
+ gTracing.ext.pfnUnRegisterObject(pv, dwFlags, dwParam);
+ }
+
+end:
+ return;
+}
+
+
+//****************************************************************************
+// Function: Processes an external debug notification.
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+void traceProcessNotification(
+ PNOTIFICATION_FRAME pnf
+)
+{
+ if (!TRACINGENABLED()) goto end;
+
+ ASSERT(TSP_VALID_FRAME(pnf));
+ ASSERT(TSP_DEBUG_FRAME(pnf));
+
+ DPRINTF1("traceProcessNotification: type 0x%lx\n", pnf->dwType);
+
+ if (EXTDLLBOUND())
+ {
+ ASSERT(gTracing.ext.pfnNotify);
+ gTracing.ext.pfnNotify(pnf);
+ }
+
+end:
+ return;
+}
+
+
+void traceTrace1(
+ DWORD dwWhat
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace1);
+ gTracing.ext.pfnTrace1(dwWhat);
+
+end:
+ return;
+}
+
+
+
+void traceTrace2(
+ DWORD dwWhat,
+ DWORD dw0
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace2);
+ gTracing.ext.pfnTrace2(dwWhat, dw0);
+
+end:
+ return;
+}
+
+
+
+void traceTrace3(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace3);
+ gTracing.ext.pfnTrace3(dwWhat, dw0, dw1);
+
+end:
+ return;
+}
+
+void traceTrace4(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace4);
+ gTracing.ext.pfnTrace4(dwWhat, dw0, dw1, dw2);
+
+end:
+ return;
+}
+
+void traceTrace5(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace5);
+ gTracing.ext.pfnTrace5(dwWhat, dw0, dw1, dw2, dw3);
+
+end:
+ return;
+}
+
+void traceTrace8(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3,
+ DWORD dw4,
+ DWORD dw5,
+ DWORD dw6
+)
+{
+ ASSERT(TRACINGENABLED());
+
+ if (!EXTDLLBOUND()) goto end;
+
+ ASSERT(gTracing.ext.pfnTrace8);
+ gTracing.ext.pfnTrace8(dwWhat, dw0, dw1, dw2, dw3, dw4, dw5, dw6);
+
+end:
+ return;
+}
+
+LINEEVENT traceSetEventProc(LINEEVENT lineEventProc)
+{
+ ASSERT(TRACINGENABLED());
+ gTracing.lineEventProc = lineEventProc;
+ return itraceEventProc;
+}
+
+ASYNC_COMPLETION traceSetCompletionProc(ASYNC_COMPLETION cbCompletionProc)
+{
+ ASSERT(TRACINGENABLED());
+ gTracing.TapiCompletionProc = cbCompletionProc;
+ return itraceTapiCompletionProc;
+}
+
+#ifdef ENABLE_TRACE_CRITICAL_SECTION
+//****************************************************************************
+// void TRACEInitializeCriticalSection (
+// TRACE_CRITICAL_SECTION * ptspcrit,
+// DWORD dwID)
+//
+// Function: InitializeCriticalSection, with some perf monitoring
+//****************************************************************************
+
+void TRACEInitializeCriticalSection(TRACE_CRITICAL_SECTION * ptspcrit, DWORD dwID, DWORD dwWTime, DWORD dwCTime)
+{
+ FillMemory(ptspcrit, sizeof(TRACE_CRITICAL_SECTION), 0);
+ InitializeCriticalSection(&(ptspcrit->crit));
+ ptspcrit->dwID = dwID;
+ ptspcrit->dwMaxWaitTime=dwWTime;
+ ptspcrit->dwMaxClaimTime=dwCTime;
+
+}
+
+//****************************************************************************
+// void TRACEEnterCriticalSection (
+// TRACE_CRITICAL_SECTION * ptspcrit,
+// DWORD dwID)
+//
+// Function: EnterCriticalSection, with some perf monitoring
+//****************************************************************************
+void TRACEEnterCriticalSection(TRACE_CRITICAL_SECTION * ptspcrit, DWORD dwFrom)
+{
+ DWORD tc0 = GetTickCount(), tc1;
+ DWORD dwDelta;
+
+ EnterCriticalSection(&(ptspcrit->crit));
+
+ ptspcrit->dwTotalHits++;
+
+ if (!ptspcrit->dwNested++)
+ {
+ tc1 = ptspcrit->tcEntered = GetTickCount();
+ ptspcrit->dwFromWhere = dwFrom;
+ dwDelta = GETTICKCOUNT_DELTA(tc0, tc1);
+
+ if (dwDelta>=CRIT_MIN_WAIT_DELTA)
+ {
+ if (dwDelta>=ptspcrit->dwMaxWaitTime)
+ {
+ // MONTSPEVENT(_id, _subid, ,,......)
+ DPRINTF3("WARNING: Took %lums to claim crit %lu from %lu",
+ dwDelta, ptspcrit->dwID, dwFrom);
+ }
+ ptspcrit->dwWaitHits++;
+ ptspcrit->dwTotalWaitTime+=dwDelta;
+ }
+ }
+}
+
+//****************************************************************************
+// void TRACELeaveCriticalSection (
+// TRACE_CRITICAL_SECTION * ptspcrit,
+// DWORD dwFrom)
+//
+// Function: LeaveCriticalSection, with some perf monitoring
+void TRACELeaveCriticalSection(TRACE_CRITICAL_SECTION * ptspcrit, DWORD dwFrom)
+{
+ DWORD tc0 = ptspcrit->tcEntered, tc1=GetTickCount();
+ DWORD dwDelta = GETTICKCOUNT_DELTA(tc0, tc1);
+
+ if (!(--(ptspcrit->dwNested)))
+ {
+ if (dwDelta>=CRIT_MIN_CLAIM_DELTA)
+ {
+ ptspcrit->dwTotalClaimTime+=dwDelta;
+ ptspcrit->dwClaimHits++;
+ if (dwDelta>ptspcrit->dwMaxClaimTime)
+ {
+ // MONTSPEVENT(_id, _subid, ,,......)
+ DPRINTF4("WARNING: Took %lums inside crit %lu claimed from %lu;"
+ "released from %lu",
+ dwDelta, ptspcrit->dwID, ptspcrit->dwFromWhere, dwFrom);
+ }
+ }
+ }
+
+ LeaveCriticalSection(&(ptspcrit->crit));
+}
+
+//****************************************************************************
+// void TRACEDeleteCriticalSection (
+// TRACE_CRITICAL_SECTION * ptspcrit,
+// DWORD dwID)
+//
+// Function: DeleteCriticalSection, with some perf monitoring
+void TRACEDeleteCriticalSection(TRACE_CRITICAL_SECTION * ptspcrit)
+{
+ EnterCriticalSection(&(ptspcrit->crit));
+ DPRINTF2("Deleteing TRACE crit %lu. TH=%lu",
+ ptspcrit->dwID,
+ ptspcrit->dwTotalHits);
+ DPRINTF4(" ... TWT=%lu TWH=%lu TCT=%lu TCH=%lu\n",
+ ptspcrit->dwTotalWaitTime,
+ ptspcrit->dwWaitHits,
+ ptspcrit->dwTotalClaimTime,
+ ptspcrit->dwClaimHits);
+ // +++ MON
+
+ DeleteCriticalSection(&(ptspcrit->crit));
+}
+
+
+//****************************************************************************
+// void TRACESetMaxWaitAndClaimTime(
+// TRACE_CRITICAL_SECTION * ptspcrit,
+// DWORD dwWTime,
+// DWORD dwCTime)
+//
+// Function: Sets the MaxWaitOrClaimTime of the crit -- if this time is
+// exceeded, it results in a mon event being logged.
+void TRACESetMaxWaitAndClaimTime(TRACE_CRITICAL_SECTION *ptspcrit, DWORD dwWTime, DWORD dwCTime)
+{
+ DPRINTF2("TRACECRIT: setting (wait,claim) max time to (%lu,%lu)",
+ dwWTime, dwCTime);
+
+ EnterCriticalSection(&(ptspcrit->crit));
+ ptspcrit->dwMaxWaitTime = dwWTime;
+ ptspcrit->dwMaxClaimTime = dwCTime;
+ LeaveCriticalSection(&(ptspcrit->crit));
+}
+
+#endif // ENABLE_TRACE_CRITICAL_SECTION
+
+
+//****************************************************************************
+// Function: Reads the registry and determines if tracing is enabled in this
+// session. Currently tracing is always enabled.
+// History:
+// 3/25/96 JosephJ Created
+//****************************************************************************/
+BOOL itraceCheckIfEnabled(DWORD dwPermanentID)
+{
+ BOOL fRet=FALSE;
+ DWORD dwFlags=0;
+ DWORD dwType=0;
+ HKEY hKey=0;
+ LONG l;
+ DWORD dwSize=sizeof(dwFlags);
+ TCHAR rgtch[] = szUNIMODEM_REG_PATH TEXT("\\Diagnostics");
+
+ DPRINTF1("trace:Key=%s", rgtch);
+
+ l=RegOpenKeyEx(
+ HKEY_LOCAL_MACHINE, // handle of open key
+ rgtch, // address of name of subkey to open
+ 0, // reserved
+ KEY_READ, // desired security access
+ &hKey // address of buffer for opened handle
+ );
+ if (l!=ERROR_SUCCESS) {hKey=0; goto end;}
+
+ DPRINTF("trace:RegOpen succeeded");
+
+ l=RegQueryValueEx(
+ hKey,
+ TEXT("TraceFlags"),
+ NULL,
+ &dwType,
+ (VOID *)&dwFlags,
+ &dwSize
+ );
+ if (l != ERROR_SUCCESS || dwType != REG_DWORD ||
+ dwSize != sizeof(dwFlags))
+ {
+ goto end;
+ }
+
+ DPRINTF1("RegQueryValue succeeds. Value=0x%lx", dwFlags);
+
+ fRet = !!dwFlags;
+
+end:
+ if (hKey) RegCloseKey(hKey);
+
+
+ DPRINTF1("Tracing %s", (fRet)?TEXT("ENABLED"):TEXT("DISABLED"));
+ return fRet;
+}
+
+
+//****************************************************************************
+// Function: Tries to bind to the external modem diagnostics dll.
+// History:
+// 3/31/96 JosephJ Created
+//****************************************************************************/
+BOOL itraceBindToExternalDll(void)
+{
+ BOOL fRet=FALSE;
+ DWORD dwNegVer=0;
+
+ ASSERT(!EXTDLLBOUND());
+
+ FillMemory(&gTracing.ext, sizeof(gTracing.ext), 0);
+
+ gTracing.ext.hDll = LoadLibrary(TEXT("mdmdbg.dll"));
+ if (gTracing.ext.hDll)
+ {
+
+ (FARPROC) gTracing.ext.pfnInit =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgInit");
+ (FARPROC) gTracing.ext.pfnDeinit =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgDeinit");
+ (FARPROC) gTracing.ext.pfnNotify =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgNotify");
+ (FARPROC) gTracing.ext.pfnRegisterObject =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgRegisterObject");
+ (FARPROC) gTracing.ext.pfnUnRegisterObject =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgUnRegisterObject");
+ (FARPROC) gTracing.ext.pfnTrace1 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace1");
+ (FARPROC) gTracing.ext.pfnTrace2 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace2");
+ (FARPROC) gTracing.ext.pfnTrace3 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace3");
+ (FARPROC) gTracing.ext.pfnTrace4 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace4");
+ (FARPROC) gTracing.ext.pfnTrace5 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace5");
+ (FARPROC) gTracing.ext.pfnTrace8 =
+ GetProcAddress(gTracing.ext.hDll, "MdmDbgTrace8");
+
+ }
+
+ if ( gTracing.ext.pfnInit
+ && gTracing.ext.pfnDeinit
+ && gTracing.ext.pfnRegisterObject
+ && gTracing.ext.pfnUnRegisterObject
+ && gTracing.ext.pfnNotify
+ && gTracing.ext.pfnTrace1
+ && gTracing.ext.pfnTrace2
+ && gTracing.ext.pfnTrace3
+ && gTracing.ext.pfnTrace4
+ && gTracing.ext.pfnTrace5
+ && gTracing.ext.pfnTrace8)
+ {
+ fRet = gTracing.ext.pfnInit(dwMDMDBG_CURRENT_VERSION, &dwNegVer);
+
+ if (fRet && dwNegVer!=dwMDMDBG_CURRENT_VERSION)
+ {
+ fRet=FALSE;
+ gTracing.ext.pfnDeinit();
+ }
+
+ }
+
+ if (!fRet)
+ {
+ DPRINTF("trace: Did not bind to MDMDBG.DLL.\n");
+ if (gTracing.ext.hDll)
+ {
+ FreeLibrary(gTracing.ext.hDll);
+ }
+ FillMemory(&gTracing.ext, sizeof(gTracing.ext), 0);
+ }
+ else
+ {
+ DPRINTF("trace: BOUND TO MDMDBG.DLL.\n");
+ gTracing.dwFlags|=fTRACING_EXTDLLBOUND; // EXTDLLBOUND now returns TRUE
+ }
+
+ return fRet;
+}
+
+//****************************************************************************
+// Function: Unbinds from the external modem diagnostics dll.
+// History:
+// 3/31/96 JosephJ Created
+//****************************************************************************/
+void itraceUnbindFromExternalDll(void)
+{
+ ASSERT(EXTDLLBOUND());
+ ASSERT(gTracing.ext.hDll);
+ ASSERT(gTracing.ext.pfnDeinit);
+
+ gTracing.ext.pfnDeinit();
+
+ FreeLibrary(gTracing.ext.hDll);
+
+ FillMemory(&gTracing.ext, sizeof(gTracing.ext), 0);
+ gTracing.dwFlags&=~fTRACING_EXTDLLBOUND; // EXTDLLBOUND now returns FALSE
+}
+
+void CALLBACK itraceEventProc(HTAPILINE htLine,
+ HTAPICALL htCall,
+ DWORD dwMsg,
+ DWORD dwParam1,
+ DWORD dwParam2,
+ DWORD dwParam3)
+{
+ TRACE8(IDEVENT_TSPFN_EVENTPROC, htLine, htCall, dwMsg,
+ dwParam1, dwParam2, dwParam3, 0);
+
+ if (gTracing.lineEventProc)
+ {
+ gTracing.lineEventProc(htLine, htCall, dwMsg,
+ dwParam1, dwParam2, dwParam3);
+ }
+}
+
+
+void CALLBACK itraceTapiCompletionProc(
+ DRV_REQUESTID dwRequestID,
+ LONG lResult
+)
+{
+ TRACE3(IDEVENT_TSPFN_COMPLETIONPROC, dwRequestID, lResult);
+ //DPRINTF2("TapiCompletionProc: dwReq = 0x%lx, dwResult=0x%lx\n",
+ // (DWORD) dwRequestID, (DWORD) lResult);
+
+ if (gTracing.TapiCompletionProc)
+ {
+ gTracing.TapiCompletionProc(dwRequestID, lResult);
+ }
+}
+
diff --git a/private/unimodem/tapisp/tracing.h b/private/unimodem/tapisp/tracing.h
new file mode 100644
index 000000000..66f18092f
--- /dev/null
+++ b/private/unimodem/tapisp/tracing.h
@@ -0,0 +1,192 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: TRACING.H
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 3/29/96 JosephJ Created
+//
+//
+// Description: Tracing (retail-mode diagnostics) functions
+//
+//****************************************************************************
+#include <tspnotif.h>
+#include "traceids.h"
+
+// Trace-related flags, specified in the dwFlags field of TRACEINFO
+#define fTI_ERROR (0x1<<0)
+#define fTI_WARN (0x1<<1)
+#define fTI_LOGTO_MEM (0x1<<31)
+#define fTI_LOGTO_FILE (0x1<<31)
+#define fTI_LOGTO_TRACE (0x1<<31)
+
+// These IDs uniquely define the object type passed into traceRegisterObject.
+// These will eventually be guids. For now they are simply integer IDs.
+#define TSP_TIMER_LIST_GUID 0x1000
+#define TSP_OVER_LIST_GUID 0x1001
+#define TSP_MODEM_LIST_GUID 0x1002
+#define TSP_COMMON_LIST_GUID 0x1003
+
+// The corresponding implementation version of the objects above. Bump up
+// the version each time there is a change in that objects internal
+// structure.
+#define TSP_TIMER_LIST_VERSION 0
+#define TSP_OVER_LIST_VERSION 0
+#define TSP_MODEM_LIST_VERSION 0
+#define TSP_COMMON_LIST_VERSION 0
+
+// dwMDMDBG_CURRENT_VERSION is passed into the external tracing dll's
+// MdmDbgInit function to verify compatible versions.
+// 7/13/96 JosephJ INITIALVERSION+2 should be official NT4.0 version.
+#define dwMDMDBG_INITIAL_VERSION 0x12345678
+#define dwMDMDBG_CURRENT_VERSION (dwMDMDBG_INITIAL_VERSION+3)
+
+// This macro determines whether tracing is enabled for this session.
+// Tracing is enabled during ProviderInit, based on a registry setting.
+// If enabled, it is not disabled until provider shutdown.
+#define TRACINGENABLED() (gfTracingEnabled)
+
+#define TRACE1(_what) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace1(_what) \
+ : 0)
+
+#define TRACE2(_what, _dw0) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace2( \
+ _what, \
+ (DWORD)(_dw0) \
+ ) \
+ : 0)
+
+#define TRACE3(_what, _dw0, _dw1) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace3( \
+ _what, \
+ (DWORD)(_dw0), (DWORD)(_dw1) \
+ ) \
+ : 0)
+
+#define TRACE4(_what, _dw0, _dw1, _dw2) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace4( \
+ _what, \
+ (DWORD)(_dw0), (DWORD)(_dw1), (DWORD)(_dw2) \
+ ) \
+ : 0)
+
+#define TRACE5(_what, _dw0, _dw1, _dw2, _dw3) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace5( \
+ _what, \
+ (DWORD)(_dw0), (DWORD)(_dw1), (DWORD)(_dw2), (DWORD)(_dw3) \
+ ) \
+ : 0)
+
+#define TRACE8(_what, _dw0, _dw1, _dw2, _dw3, _dw4, _dw5, _dw6) \
+ (void)(TRACINGENABLED() \
+ ? traceTrace8( \
+ _what, \
+ (DWORD)(_dw0), (DWORD)(_dw1), (DWORD)(_dw2), (DWORD)(_dw3), \
+ (DWORD)(_dw4), (DWORD)(_dw5), (DWORD)(_dw6) \
+ ) \
+ : 0)
+
+// Tracing-related instance data tacked on to the trace-enabled version of
+// an object (see for example OVERNODE in unimdm.h).
+//
+typedef struct {
+ DWORD dw0;
+} TRACEINSTDATA;
+
+
+// This struct is passed in to most tracing output functions (tracePrintf, etc),
+// to provide some additional context.
+typedef struct
+{
+ DWORD dwID; // Device ID, if applicable
+ DWORD dwFlags; // One of the fTI_* flags defined above.
+ HANDLE hFile; // Handle to a file, if file logging is enabled.
+} TRACEINFO, *PTRACEINFO;
+
+void tracePrintf(
+ PTRACEINFO pti,
+ DWORD dwFlags,
+ LPCTSTR lpctszFormat,
+ ...
+);
+
+void traceOnProcessAttach(void);
+void traceOnProcessDetach(void);
+void traceInitialize(DWORD dwPermanentID);
+void traceDeinitialize(void);
+
+typedef DWORD PGUID;
+
+void traceRegisterObject(
+ PVOID pv,
+ PGUID pg,
+ DWORD dwVersion,
+ DWORD dwFlags,
+ DWORD dwParam
+);
+
+void traceUnRegisterObject(
+ PVOID pv,
+ DWORD dwFlags,
+ DWORD dwParam
+);
+
+void traceProcessNotification(
+ PNOTIFICATION_FRAME pnf
+);
+
+void traceTrace1(
+ DWORD dwWhat
+);
+
+void traceTrace2(
+ DWORD dwWhat,
+ DWORD dw0
+);
+
+void traceTrace3(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1
+);
+
+void traceTrace4(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2
+);
+
+void traceTrace5(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3
+);
+
+void traceTrace8(
+ DWORD dwWhat,
+ DWORD dw0,
+ DWORD dw1,
+ DWORD dw2,
+ DWORD dw3,
+ DWORD dw4,
+ DWORD dw5,
+ DWORD dw6
+);
+
+LINEEVENT traceSetEventProc(LINEEVENT lineEventProc);
+ASYNC_COMPLETION traceSetCompletionProc(ASYNC_COMPLETION cbCompletionProc);
+
+extern BOOL gfTracingEnabled;
diff --git a/private/unimodem/tapisp/umdminit.c b/private/unimodem/tapisp/umdminit.c
new file mode 100644
index 000000000..aa4ec1ad5
--- /dev/null
+++ b/private/unimodem/tapisp/umdminit.c
@@ -0,0 +1,2792 @@
+//****************************************************************************
+//
+// Module: Unimdm.tsp
+// File: umdminit.c
+// Content: This file contains the moudle initialization.
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Tue 23-Feb-1993 14:08:25 -by- Viroon Touranachun [viroont]
+// Ported from TAPI's atsp
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include <regstr.h>
+
+#include "common.h"
+
+#define _INC_OLE
+#include <ole2.h>
+
+#define INITGUID
+#include <initguid.h>
+#include <devguid.h>
+
+#include <setupapi.h>
+
+#include <rovdbg.h>
+
+//****************************************************************************
+// Modem enumeration request
+//****************************************************************************
+
+typedef struct CountInfo{
+ UINT cModem;
+} COUNTINFO, FAR* LPCOUNTINFO;
+
+typedef struct InitInfo{
+ DWORD dwBaseID;
+ UINT cModem;
+} INITINFO, FAR* LPINITINFO;
+
+typedef struct FindInfo{
+ LPTSTR lpszDeviceName;
+ BOOL fFound;
+ HKEY FAR* lphkey;
+ LPTSTR lpszID;
+ UINT cbID;
+} FINDINFO, FAR* LPFINDINFO;
+
+
+typedef DWORD APIENTRY
+PRIVATEGETDEFCOMMCONFIG(
+ HKEY hKey,
+ LPCOMMCONFIG pcc,
+ LPDWORD pdwSize
+ );
+
+
+//****************************************************************************
+// GLOBALS
+//****************************************************************************
+struct {
+
+ // Cache for hdevinfo, the handle returned by expensive function
+ // SetupDiGetClassDevsW.
+ HDEVINFO hdevinfo;
+ DWORD dwcRefHDevInfo;
+
+ // Cache for MODEMUI DLL and it's "PrivateDefCommConfig" export.
+ HINSTANCE hModemUIDLL;
+ DWORD dwcRefModemUI;
+ PRIVATEGETDEFCOMMCONFIG
+ *pfnPrivateDefCommConfig;
+
+ // Cache for whether current process has admin priveleges.
+ BOOL bAdminUser;
+
+ // Handle of thread that processes cpl notifications.
+ HANDLE hthrdCplNotif;
+
+ CRITICAL_SECTION crit;
+
+ CRITICAL_SECTION critCplNotif; // Critical section used ONLY to
+ //serialize launching the tepCplNotif thread.
+} gUmdm;
+
+
+// This is declared in unimdm.h, and is accessed by the MCX part as well.
+DWORD gRegistryFlags;
+
+#define USER_IS_ADMIN() (gUmdm.bAdminUser)
+
+//****************************************************************************
+// Constant Parameters
+//****************************************************************************
+
+LPGUID g_pguidModem = (LPGUID)&GUID_DEVCLASS_MODEM;
+
+TCHAR cszFriendlyName[] = TEXT("FriendlyName");
+TCHAR cszDeviceType[] = TEXT("DeviceType");
+#ifdef VOICEVIEW
+TCHAR cszVoiceView[] = TEXT("VoiceView");
+#endif // VOICEVIEW
+TCHAR cszID[] = TEXT("ID");
+TCHAR cszProperties[] = TEXT("Properties");
+TCHAR cszSettings[] = TEXT("Settings");
+TCHAR cszDialSuffix[] = TEXT("DialSuffix");
+TCHAR cszDevicePrefix[] = TEXT("\\\\.\\");
+
+#define HAYES_COMMAND_LENGTH 40 // max size for DialSuffix (from VxD)
+
+TCHAR cszHWNode[] = TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E96D-E325-11CE-BFC1-08002BE10318}");
+
+TCHAR gszTSPFilename[MAX_PATH];
+
+
+#ifdef WINNT
+extern CRITICAL_SECTION ServiceControlerCriticalSection;
+#endif // WINNT
+
+
+// Private function prototypes
+//
+
+LONG DevlineGetDefaultConfig(PLINEDEV pLineDev, HKEY hKey);
+
+BOOL _ProcessAttach(HINSTANCE hDll);
+BOOL _ProcessDetach(HINSTANCE hDll);
+LONG DevlineEnum(LPDWORD lpdwNumLines);
+LONG DevlineInitialize (DWORD dwBaseID, LPDWORD lpdwNumDevs);
+LONG DevlineShutdown ();
+void CleanupLineDev(PLINEDEV pLineDev);
+PLINEDEV CreateLineDev(HKEY hKeyHardware, DWORD dwID, BOOL fReCreate);
+BOOL PUBLIC IsAdminUser(void); // common code from ../rovcomm.lib
+
+
+typedef BOOL (*ENUMMDMCALLBACK)(HKEY, LPVOID);
+
+BOOL CountModemCallback (HKEY hkey, LPVOID lpData);
+BOOL InitModemCallback (HKEY hkey, LPVOID lpData);
+void FreeHDevInfo(HDEVINFO hdevinfo);
+HDEVINFO GetHDevInfo(DWORD dwDIGCF);
+BOOL LoadModemUI(void);
+void UnloadModemUI(void);
+void CplNotifComplete(BOOL fWait);
+LONG EnumerateModems (ENUMMDMCALLBACK pfnCallback, LPVOID lpData, BOOL fAll);
+
+typedef BOOL (*ENUMMDMKEYCALLBACK)(HKEY, LPTSTR, LPVOID);
+
+BOOL SearchModemCallback (HKEY hkey, LPTSTR szKey, LPVOID lpData);
+LONG EnumerateModemKeys (ENUMMDMKEYCALLBACK pfnCallback, LPVOID lpData);
+
+LONG PASCAL ProviderInstall(LPTSTR pszProviderName, BOOL bNoMultipleInstance);
+
+void tspInitGlobals(void);
+void tspDeInitGlobals(void);
+
+VOID WINAPI
+UI_ProcessAttach(
+ VOID
+ );
+
+VOID WINAPI
+UI_ProcessDetach(
+ VOID
+ );
+
+LONG WINAPI
+StopModemDriver(
+ VOID
+ );
+
+
+
+//****************************************************************************
+// BOOL _Processattach (HINSTANCE)
+//
+// Function: This function is called when a process is attached to the DLL
+//
+// History:
+// Mon 06-Sep-1993 09:20:10 -by- Viroon Touranachun [viroont]
+// Ported from Shell.
+//****************************************************************************
+
+BOOL _ProcessAttach(HINSTANCE hDll)
+{
+ BOOL fRet;
+
+#ifdef DEBUG
+ // We do this simply to load the debug .ini flags
+ //
+ RovComm_ProcessIniFile();
+
+ DEBUG_BREAK(BF_ONPROCESSATT);
+ TRACE_MSG(TF_GENERAL, "Process Attach (hDll = %lx)", hDll);
+#endif
+ InitializeCriticalSection(&gUmdm.crit);
+ InitializeCriticalSection(&gUmdm.critCplNotif);
+
+ traceOnProcessAttach();
+
+ UI_ProcessAttach();
+
+ // Initialize line device lists
+ //
+ fRet = InitCBList(hDll);
+ if (fRet)
+ {
+ // Remember our instance and module name
+ //
+ ghInstance = hDll;
+ GetModuleFileName(hDll,
+ gszTSPFilename,
+ sizeof(gszTSPFilename)/sizeof(TCHAR));
+
+ fRet = OverPoolInit();
+
+ if (!fRet)
+ {
+ DeinitCBList(hDll);
+ }
+
+ };
+
+ if (!fRet)
+ {
+ traceOnProcessDetach();
+ DeleteCriticalSection(&gUmdm.crit);
+ DeleteCriticalSection(&gUmdm.critCplNotif);
+ }
+
+ return fRet;
+}
+
+//****************************************************************************
+// BOOL _ProcessDetach (HINSTANCE)
+//
+// Function: This function is called when a process is detached from the DLL
+//
+// History:
+// Mon 06-Sep-1993 09:20:10 -by- Viroon Touranachun [viroont]
+// Ported from Shell.
+//****************************************************************************
+
+BOOL _ProcessDetach(HINSTANCE hDll)
+{
+ DEBUG_CODE( TRACE_MSG(TF_GENERAL, "Process Detach (hDll = %lx)", hDll); )
+ DEBUG_CODE( DEBUG_BREAK(BF_ONPROCESSDET); )
+
+ // Clean up the allocated resources
+ //
+ DeinitCBList(hDll);
+ OverPoolDeinit();
+ UI_ProcessDetach();
+ ghInstance = NULL;
+ traceOnProcessDetach();
+ DeleteCriticalSection(&gUmdm.crit);
+ DeleteCriticalSection(&gUmdm.critCplNotif);
+ return TRUE;
+}
+
+//****************************************************************************
+// BOOL APIENTRY LibMain (HINSTANCE, DWORD, LPVOID)
+//
+// Function: This function is called when the DLL is loaded
+//
+// History:
+// Mon 06-Sep-1993 09:20:10 -by- Viroon Touranachun [viroont]
+// Ported from Shell.
+//****************************************************************************
+
+BOOL APIENTRY DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
+{
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ _ProcessAttach(hDll);
+ break;
+ case DLL_PROCESS_DETACH:
+ _ProcessDetach(hDll);
+ break;
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ default:
+ break;
+ } // end switch()
+
+ return TRUE;
+
+}
+
+//****************************************************************************
+//************************** The Initialization Calls*************************
+//****************************************************************************
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerInstall(
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: Let's telephony CPL know the Remove function is supported.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerInstall(
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ //
+ // Although this func is never called by TAPI v2.0, we export
+ // it so that the Telephony Control Panel Applet knows that it
+ // can add this provider via lineAddProvider(), otherwise
+ // Telephon.cpl will not consider it installable
+ //
+ //
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerRemove(
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: Let's telephony CPL know the Install function is supported.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerRemove(
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ //
+ // Although this func is never called by TAPI v2.0, we export
+ // it so that the Telephony Control Panel Applet knows that it
+ // can remove this provider via lineRemoveProvider(), otherwise
+ // Telephon.cpl will not consider it removable
+ //
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerConfig(
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: Let's telephony CPL know the Config function is supported.
+//
+// History:
+// Thu 21-Dec-1995 18:24:53 -by- Chris Caputo [ccaputo]
+// Ported from Win95.
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerConfig(
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ //
+ // Although this func is never called by TAPI v2.0, we export
+ // it so that the Telephony Control Panel Applet knows that it
+ // can configure this provider via lineConfigProvider(),
+ // otherwise Telephon.cpl will not consider it configurable
+ //
+
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TUISPI_providerInstall(
+// TUISPIDLLCALLBACK lpfnUIDLLCallback,
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: TSPI installation
+//
+// History:
+// Thu 21-Dec-1995 18:24:53 -by- Chris Caputo [ccaputo]
+// Ported from TAPI's atsp
+//****************************************************************************
+
+LONG
+TSPIAPI
+TUISPI_providerInstall(
+ TUISPIDLLCALLBACK lpfnUIDLLCallback,
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ return ProviderInstall (TEXT("unimdm.tsp"), TRUE);
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TUISPI_providerRemove(
+// TUISPIDLLCALLBACK lpfnUIDLLCallback,
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: TSPI removal
+//
+// History:
+// Thu 21-Dec-1995 18:24:53 -by- Chris Caputo [ccaputo]
+// Ported from Win95.
+//****************************************************************************
+
+LONG
+TSPIAPI
+TUISPI_providerRemove(
+ TUISPIDLLCALLBACK lpfnUIDLLCallback,
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TUISPI_providerConfig(
+// TUISPIDLLCALLBACK lpfnUIDLLCallback,
+// HWND hwndOwner,
+// DWORD dwPermanentProviderID
+// )
+//
+// Function: TUISPI configuration
+//
+// History:
+// Thu 21-Dec-1995 18:24:53 -by- Chris Caputo [ccaputo]
+// Ported from Win95.
+//****************************************************************************
+
+LONG
+TSPIAPI
+TUISPI_providerConfig(
+ TUISPIDLLCALLBACK lpfnUIDLLCallback,
+ HWND hwndOwner,
+ DWORD dwPermanentProviderID
+ )
+{
+ WinExec("control.exe modem.cpl", SW_SHOW);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_providerEnumDevices()
+//
+// Function: TSPI device enumeration entry
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_providerEnumDevices(DWORD dwPermanentProviderID,
+ LPDWORD lpdwNumLines,
+ LPDWORD lpdwNumPhones,
+ HPROVIDER hProvider,
+ LINEEVENT lpfnLineCreateProc,
+ PHONEEVENT lpfnPhoneCreateProc)
+
+{
+ DBG_ENTER_UL("TSPI_providerEnumDevices", dwPermanentProviderID);
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_providerEnumDevices,
+ &dwPermanentProviderID
+ );
+
+ // Enumerate the number of device
+ //
+ DevlineEnum(lpdwNumLines);
+ *lpdwNumPhones = 0;
+
+ // Initialize the global parameters
+ //
+ gfnLineCreateProc = lpfnLineCreateProc;
+ gdwProviderID = dwPermanentProviderID;
+ ghProvider = hProvider;
+
+ TRACE4(IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_providerEnumDevices,
+ &dwPermanentProviderID,
+ ERROR_SUCCESS);
+
+ DBG_EXIT_UL("TSPI_providerEnumDevices", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_providerInit(DWORD dwTSPIVersion, DWORD ppid)
+//
+// Function: Initializes the global data strucutres.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_providerInit(DWORD dwTSPIVersion,
+ DWORD dwPermanentProviderID,
+ DWORD dwLineDeviceIDBase,
+ DWORD dwPhoneDeviceIDBase,
+ DWORD dwNumLines,
+ DWORD dwNumPhones,
+ ASYNC_COMPLETION cbCompletionProc,
+ LPDWORD lpdwTSPIOptions)
+{
+ DWORD dwDevicePorts = 0; // Number of modem devices
+ DWORD retcode ;
+ BOOL fModemUILoaded=FALSE;
+ HDEVINFO hdevinfo=NULL;
+
+ DBG_ENTER_UL("TSPI_providerInit", dwPermanentProviderID);
+
+ // Initialize tracing facilities
+ //
+ traceInitialize(dwPermanentProviderID);
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_providerInit,
+ &dwTSPIVersion
+ );
+
+ ASSERT(gdwProviderID == dwPermanentProviderID);
+
+
+
+ // Initialize the global parameters
+ //
+ tspInitGlobals();
+
+ // Load MODEMUI.DLL (for private entry points)
+ fModemUILoaded=TRUE;
+ if (!LoadModemUI())
+ {
+ fModemUILoaded=FALSE;
+ goto CleanUp;
+ }
+
+
+ // For the modem device, get the device information
+ hdevinfo = GetHDevInfo(DIGCF_PRESENT);
+ if (!hdevinfo)
+ {
+ goto CleanUp;
+ }
+
+
+ if (TRACINGENABLED())
+ {
+ cbCompletionProc = traceSetCompletionProc(cbCompletionProc);
+ }
+
+ gfnCompletionCallback = cbCompletionProc;
+
+ //
+ // init common modem info list
+ //
+ InitializeModemCommonList(
+ &gCommonList
+ );
+
+ InitializeCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+
+
+ // Initialize the line structures
+ //
+ retcode = DevlineInitialize(dwLineDeviceIDBase, &dwDevicePorts);
+
+ if (retcode != ERROR_SUCCESS) {
+
+ //
+ // cleanup common modem info
+ //
+ RemoveCommonList(
+ &gCommonList
+ );
+
+ DeleteCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ }
+
+CleanUp:
+
+ if (hdevinfo != NULL) {
+
+ FreeHDevInfo(hdevinfo);
+ }
+
+ if(fModemUILoaded)
+ {
+ UnloadModemUI();
+ }
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_providerInit,
+ &dwTSPIVersion,
+ retcode
+ );
+
+ if (retcode != ERROR_SUCCESS)
+ {
+ // Deinit tracing
+ //
+ traceDeinitialize();
+ }
+
+ DBG_EXIT_UL("TSPI_providerInit", retcode);
+ return retcode;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_providerShutdown(DWORD dwTSPIVersion)
+//
+// Function: Cleans up all the global data structures.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_providerShutdown(DWORD dwTSPIVersion,
+ DWORD dwPermanentProviderID)
+{
+ DBG_ENTER_UL("TSPI_providerShutdown", dwTSPIVersion);
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_providerShutdown,
+ &dwTSPIVersion
+ );
+
+#ifdef DYNA_ADDREMOVE
+ // Complete any re-enumeration that may be in progress..
+ //
+ CplNotifComplete(TRUE);
+#endif // DYNA_ADDREMOVE
+
+ // Clean up modem lines
+ //
+ DevlineShutdown();
+
+
+ //
+ // cleanup common modem info
+ //
+ RemoveCommonList(
+ &gCommonList
+ );
+
+ // Clean up the global parameters
+ //
+ gfnCompletionCallback = NULL; // The async completion callback
+ gfnLineCreateProc = NULL;
+
+ StopModemDriver();
+
+ DeleteCriticalSection(
+ &ServiceControlerCriticalSection
+ );
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_providerShutdown,
+ &dwTSPIVersion,
+ ERROR_SUCCESS
+ );
+
+ // DeInit TSP Globals
+ tspDeInitGlobals();
+
+ // Deinit tracing
+ //
+ traceDeinitialize();
+
+ DBG_EXIT_UL("TSPI_providerShutdown", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineNegotiateTSPIVersion()
+//
+// Function: Negotiates the service provider version.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineNegotiateTSPIVersion(DWORD dwDeviceID,
+ DWORD dwLowVersion,
+ DWORD dwHighVersion,
+ LPDWORD lpdwTSPIVersion)
+{
+ PLINEDEV pLineDev = NULL;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineNegotiateTSPIVersion");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineNegotiateTSPIVersion,
+ &dwDeviceID
+ );
+ // Check the range of the device ID
+ //
+ if((dwDeviceID == INITIALIZE_NEGOTIATION) ||
+ ((pLineDev = GetCBfromID(dwDeviceID)) != NULL))
+ {
+ // Do not use the line device
+ //
+ if (pLineDev)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ }
+
+ // Check the version range
+ //
+ if((dwLowVersion > MDMSPI_VERSION) || (dwHighVersion < MDMSPI_VERSION))
+ {
+ *lpdwTSPIVersion = 0;
+ lRet= LINEERR_INCOMPATIBLEAPIVERSION;
+ goto end;
+ }
+ else
+ {
+ *lpdwTSPIVersion = MDMSPI_VERSION;
+ lRet= ERROR_SUCCESS;
+ goto end;
+ };
+ };
+
+ // The requested device doesn't exist.
+ lRet = LINEERR_NODEVICE;
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineNegotiateTSPIVersion,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineNegotiateTSPIVersion", lRet);
+
+ return lRet;
+
+}
+
+//****************************************************************************
+// LONG DevlineEnum()
+//
+// Function: enumerates the current number of modems
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG DevlineEnum(LPDWORD lpdwNumLines)
+{
+ COUNTINFO ci;
+ DWORD dwRet;
+
+ ci.cModem = 0;
+
+ if ((dwRet = EnumerateModems(CountModemCallback, (LPVOID)&ci, FALSE)) == ERROR_SUCCESS)
+ *lpdwNumLines = ci.cModem;
+ else
+ *lpdwNumLines = 0;
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineInitialize()
+//
+// Function: initializes the modem device list
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG DevlineInitialize (DWORD dwBaseID,
+ LPDWORD lpdwNumDevs)
+{
+ INITINFO initi;
+ DWORD dwRet;
+
+ initi.dwBaseID = dwBaseID;
+ initi.cModem = 0;
+
+
+ MdmInitTracing();
+
+ dwRet = EnumerateModems(InitModemCallback, (LPVOID)&initi, FALSE);
+ if (dwRet == ERROR_SUCCESS)
+ {
+ *lpdwNumDevs = initi.cModem;
+ // Initialize Timer services
+ //
+ if ((dwRet = InitializeMdmTimer()) == ERROR_SUCCESS)
+ {
+ // Initialize the asynchronous thread
+ //
+ if ((dwRet = InitializeMdmThreads()) != ERROR_SUCCESS)
+ {
+ DeinitializeMdmTimer();
+ };
+ };
+ }
+ else
+ *lpdwNumDevs = 0;
+
+ if (dwRet!=ERROR_SUCCESS)
+ {
+ MdmDeinitTracing();
+ }
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG DevlineShutdown()
+//
+// Function: destroys the modem device list and resources
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//****************************************************************************
+
+LONG DevlineShutdown ()
+{
+ PLINEDEV pLineDev;
+
+ // Deinitialize the modem thread
+ //
+ DeinitializeMdmThreads();
+ DeinitializeMdmTimer();
+
+ // Destroy the modem line device one at a time.
+ //
+ do
+ {
+ // If there is another modem to clean up
+ //
+ if ((pLineDev = GetFirstCB()) != NULL)
+ {
+ // Clean up the allocated resources
+ //
+ CleanupLineDev(pLineDev);
+ RELEASE_LINEDEV(pLineDev);
+
+ // Now delete the modem device
+ //
+ DeleteCB(pLineDev);
+ };
+ }
+ while (pLineDev != NULL);
+
+ MdmDeinitTracing();
+
+ return ERROR_SUCCESS ;
+}
+
+//****************************************************************************
+// void CleanupLineDev(PLINEDEV)
+//
+// Function: Frees the resources owned by the modem line device.
+//
+// Returns: None.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//
+//****************************************************************************
+
+void CleanupLineDev(PLINEDEV pLineDev)
+{
+ int i;
+
+ if (pLineDev->DroppingEvent != NULL) {
+
+ CloseHandle(pLineDev->DroppingEvent);
+
+ pLineDev->DroppingEvent=NULL;
+ }
+
+ // Clean up the allocated resources
+ //
+ if (pLineDev->hIcon != NULL)
+ {
+ DestroyIcon(pLineDev->hIcon);
+ };
+
+ if (pLineDev->pDevCfg != NULL) {
+
+ LocalFree((HLOCAL)pLineDev->pDevCfg);
+
+ pLineDev->pDevCfg=NULL;
+ }
+
+}
+
+//****************************************************************************
+// PLINEDEV CreateLineDev(HKEY hKey, DWORD dwID, BOOL fReCreate)
+//
+// Function: Create a new LINEDEV structure and initilaizes it.
+// If fReCreate is TRUE, the following happens:
+// -- if it exists, it will return NULL, but will set the
+// LINEDEVFLAGS_REINIT flag of pLineDev->fdwResources of
+// the existing device.
+// -- if it does not exist, it will create it, and also set
+// the above flag.
+// If fReCreate is FALSE, it will not check if the device exists
+// and will NOT set the LINEDEVFAGS_REINIT bit.
+//
+// Returns: a pointer to the new line device CB on success or
+// NULL on failure.
+//
+// History:
+// Mon 17-Apr-1995 11:49:53 -by- Viroon Touranachun [viroont]
+// Ported from Win95.
+//
+//****************************************************************************
+
+PLINEDEV CreateLineDev(HKEY hKey, DWORD dwID, BOOL fReCreate)
+{
+ PLINEDEV pLineDev=NULL;
+ TCHAR rgtchDeviceName[sizeof(pLineDev->szDeviceName)/sizeof(TCHAR)];
+ DWORD dwRegSize = sizeof(rgtchDeviceName);
+ DWORD dwRegType;
+ DWORD dwRet;
+ BYTE bDeviceType;
+ REGDEVCAPS regdevcaps;
+ HKEY hKeySettings;
+ int i;
+ FINDINFO fi;
+ TCHAR pszTemp[HAYES_COMMAND_LENGTH+1];
+
+
+ // Get the Friendly Name
+ ASSERT(dwRegSize == sizeof(pLineDev->szDeviceName));
+ dwRet = RegQueryValueEx(
+ hKey,
+ cszFriendlyName,
+ NULL,
+ &dwRegType,
+ (VOID *) rgtchDeviceName,
+ &dwRegSize
+ );
+
+ if (dwRet != ERROR_SUCCESS || dwRegType != REG_SZ)
+ {
+ goto end;
+ }
+
+#ifdef DYNA_ADDREMOVE
+ if (fReCreate)
+ {
+ // determine if we've already got this device in our list...
+ pLineDev = GetCBfromName (rgtchDeviceName);
+ if (pLineDev)
+ {
+ DPRINTF1("ReCreate: Modem exists: %s", rgtchDeviceName);
+ pLineDev->fdwResources |= LINEDEVFLAGS_REINIT;
+ pLineDev->fdwResources &= ~LINEDEVFLAGS_OUTOFSERVICE;
+ RELEASE_LINEDEV(pLineDev);
+ pLineDev=NULL;
+ goto end;
+ }
+ }
+#endif //DYNA_ADDREMOVE
+
+ // New modem!
+
+ if ((pLineDev = AllocateCB(sizeof(LINEDEV))) == NULL)
+ {
+ goto end;
+ }
+
+ pLineDev->DroppingEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+ if (pLineDev->DroppingEvent == NULL) {
+
+ goto FailedExit;
+ }
+
+ // Initialize its control block
+ //
+ // pLineDev->hIcon = NULL;
+ // pLineDev->pDevCfg = NULL;
+ //
+ pLineDev->dwVersion = UMDM_VERSION;
+ pLineDev->dwID = dwID;
+ lstrcpy(pLineDev->szDeviceName, rgtchDeviceName);
+
+ // Get the Driver Key
+ fi.lpszDeviceName = pLineDev->szDeviceName;
+ fi.fFound = FALSE;
+ fi.lphkey = NULL;
+ fi.lpszID = pszTemp;
+ fi.cbID = sizeof(pszTemp);
+ EnumerateModemKeys(SearchModemCallback, (LPVOID)&fi);
+ if (!fi.fFound)
+ {
+ goto FailedExit;
+ }
+
+ lstrcpyn(pLineDev->szDriverKey, cszHWNode, sizeof(pLineDev->szDriverKey));
+ lstrcat(pLineDev->szDriverKey, TEXT("\\"));
+ lstrcat(pLineDev->szDriverKey, pszTemp);
+
+ // Read in the permanent ID
+ dwRegSize = sizeof(pLineDev->dwPermanentLineID);
+ if (RegQueryValueEx(hKey, cszID, NULL, &dwRegType,
+ (VOID *)&pLineDev->dwPermanentLineID,
+ &dwRegSize) != ERROR_SUCCESS ||
+ dwRegType != REG_BINARY)
+ {
+ goto FailedExit;
+ }
+
+ // Read in the REGDEVCAPS
+ dwRegSize = sizeof(regdevcaps);
+ if (RegQueryValueEx(hKey, cszProperties, NULL, &dwRegType,
+ (VOID *)&regdevcaps,
+ &dwRegSize) != ERROR_SUCCESS ||
+ dwRegType != REG_BINARY)
+ {
+ goto FailedExit;
+ }
+ else
+ {
+ //
+ // We want to make sure the following flags are identical
+ //
+ #if (LINEDEVCAPFLAGS_DIALBILLING != DIALOPTION_BILLING)
+ #error LINEDEVCAPFLAGS_DIALBILLING != DIALOPTION_BILLING (check tapi.h vs. mcx16.h)
+ #endif
+ #if (LINEDEVCAPFLAGS_DIALQUIET != DIALOPTION_QUIET)
+ #error LINEDEVCAPFLAGS_DIALQUIET != DIALOPTION_QUIET (check tapi.h vs. mcx16.h)
+ #endif
+ #if (LINEDEVCAPFLAGS_DIALDIALTONE != DIALOPTION_DIALTONE)
+ #error LINEDEVCAPFLAGS_DIALDIALTONE != DIALOPTION_DIALTONE (check tapi.h vs. mcx16.h)
+ #endif
+ //
+
+ // Make sure this is the dwDialOptions DWORD we want.
+ ASSERT(!(regdevcaps.dwDialOptions & ~(LINEDEVCAPFLAGS_DIALBILLING |
+ LINEDEVCAPFLAGS_DIALQUIET |
+ LINEDEVCAPFLAGS_DIALDIALTONE)));
+ pLineDev->dwDevCapFlags = regdevcaps.dwDialOptions;
+
+ pLineDev->dwMaxDCERate = regdevcaps.dwMaxDCERate;
+
+ pLineDev->dwModemOptions = regdevcaps.dwModemOptions;
+ }
+
+ // Analyze device type and set mediamodes appropriately
+ dwRegSize = sizeof(BYTE);
+ if (RegQueryValueEx(hKey, cszDeviceType, NULL, &dwRegType,
+ &bDeviceType, &dwRegSize) != ERROR_SUCCESS ||
+ dwRegType != REG_BINARY ||
+ dwRegSize != sizeof(BYTE))
+ {
+ goto FailedExit;
+ }
+ else
+ {
+ // Remember the type
+ //
+ pLineDev->bDeviceType = bDeviceType;
+
+ switch (bDeviceType)
+ {
+ case DT_PARALLEL_PORT:
+ pLineDev->bDeviceType = DT_NULL_MODEM; // Map back to null modem
+ // FALLTHROUGH
+
+ case DT_NULL_MODEM:
+ pLineDev->dwDefaultMediaModes = LINEMEDIAMODE_DATAMODEM;
+ pLineDev->dwBearerModes = LINEBEARERMODE_DATA | LINEBEARERMODE_PASSTHROUGH;
+ pLineDev->fPartialDialing = FALSE;
+ break;
+
+ case DT_PARALLEL_MODEM:
+ pLineDev->bDeviceType = DT_EXTERNAL_MODEM; // Map back to external modem
+ // FALLTHROUGH
+
+ case DT_EXTERNAL_MODEM:
+ case DT_INTERNAL_MODEM:
+ case DT_PCMCIA_MODEM:
+ pLineDev->dwDefaultMediaModes = LINEMEDIAMODE_DATAMODEM |
+ LINEMEDIAMODE_INTERACTIVEVOICE;
+#ifdef VOICEVIEW
+ {
+ BYTE bVoiceView;
+
+ dwRegSize = 1;
+ if ((RegQueryValueEx(hKeySoftware, cszVoiceView, 0, &dwRegType, &bVoiceView, &dwRegSize) == ERROR_SUCCESS) &&
+ (bVoiceView == 1))
+ {
+ pLineDev->dwDefaultMediaModes |= LINEMEDIAMODE_VOICEVIEW;
+ }
+ }
+#endif // VOICEVIEW
+ pLineDev->dwBearerModes = LINEBEARERMODE_VOICE | LINEBEARERMODE_PASSTHROUGH;
+
+ // read in Settings\DialSuffix to check whether we can partial dial
+ pLineDev->fPartialDialing = FALSE; // assume false
+ if (RegOpenKey(hKey, cszSettings, &hKeySettings) == ERROR_SUCCESS)
+ {
+ dwRegSize = HAYES_COMMAND_LENGTH;
+ if (RegQueryValueEx(hKeySettings, cszDialSuffix, NULL, &dwRegType, (VOID *)pszTemp, &dwRegSize) == ERROR_SUCCESS &&
+ dwRegSize > sizeof(TCHAR))
+ {
+ pLineDev->fPartialDialing = TRUE;
+ }
+ RegCloseKey(hKeySettings);
+ }
+ break;
+
+ default:
+ goto FailedExit;
+ }
+ }
+
+ // Init line.
+ NullifyLineDevice(pLineDev);
+
+ //
+ // get the default commconfig
+ //
+ dwRet = DevlineGetDefaultConfig(pLineDev,hKey);
+
+ if (dwRet != ERROR_SUCCESS) {
+
+ goto FailedExit;
+ }
+
+
+
+#ifdef UNDER_CONSTRUCTION
+
+ // Check the devnode status
+ // If it does not exist or has a problem, mark it as out of service
+ //
+ if (!IsDeviceInService(szID))
+ {
+ pLineDev->fdwResources |= LINEDEVFLAGS_OUTOFSERVICE;
+ };
+
+#endif // UNDER_CONSTRUCTION
+
+ if (fReCreate)
+ {
+ pLineDev->fdwResources |= LINEDEVFLAGS_REINIT;
+ }
+
+ // We made it this far, we're GOLDEN!
+ goto end;
+
+FailedExit:
+ DPRINTF("Modem unusable because of corrupt registry entry.");
+
+ // Cleanup the allocated resource
+ //
+ CleanupLineDev(pLineDev);
+
+ // Free the modem CB and its resources
+ //
+ DeleteCB(pLineDev);
+ pLineDev = NULL;
+ // Fall through...
+
+end:
+
+ return pLineDev;
+}
+
+
+//****************************************************************************
+// LONG DevlineGetDefaultConfig(PLINEDEV)
+//
+// Function: Get modem default configuratio
+//
+// Returns: ERROR_SUCCESS if success
+// LINEERR_NOMEM if out of memory
+//
+// Fri 14-Apr-1995 12:47:26 -by- Viroon Touranachun [viroont]
+// created
+//****************************************************************************
+
+LONG DevlineGetDefaultConfig(PLINEDEV pLineDev, HKEY hKey)
+{
+ PDEVCFG pDevCfg;
+ COMMCONFIG * pcommconfig;
+ DWORD dwCCSize;
+ LONG lResult;
+
+ dwCCSize = sizeof(MODEMSETTINGS)+FIELDOFFSET(COMMCONFIG, wcProviderData);
+
+ pDevCfg = (PDEVCFG)LocalAlloc(LPTR, sizeof(DEVCFGHDR)+(UINT)dwCCSize);
+
+ if (pDevCfg == NULL) {
+
+ return LINEERR_NOMEM;
+ }
+
+ pcommconfig = (COMMCONFIG *)&(pDevCfg->commconfig);
+
+ // Default setting
+ //
+ pDevCfg->dfgHdr.dwSize = sizeof(DEVCFGHDR) + dwCCSize;
+ pDevCfg->dfgHdr.dwVersion = MDMCFG_VERSION;
+ SETWAITBONG(pDevCfg, DEF_WAIT_BONG);
+ SETOPTIONS(pDevCfg, (IS_NULL_MODEM(pLineDev) ?
+ TERMINAL_NONE : TERMINAL_NONE | LAUNCH_LIGHTS));
+ pcommconfig->dwProviderSubType = PST_MODEM;
+
+ ASSERT(gUmdm.pfnPrivateDefCommConfig != NULL);
+
+ lResult=(*gUmdm.pfnPrivateDefCommConfig)(hKey, pcommconfig, &dwCCSize);
+
+ if (ERROR_SUCCESS == lResult) {
+
+ pLineDev->pDevCfg = pDevCfg;
+
+ } else {
+
+ LocalFree(
+ pDevCfg
+ );
+ }
+
+
+ return lResult;
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+//****************************************************************************
+// BOOL CountModemCallback (HKEY hkey, LPVOID lpData)
+//
+// Function: Count the enumerated modems.
+//
+// Returns: TRUE always to continue
+//
+//****************************************************************************
+
+BOOL CountModemCallback (HKEY hkey, LPVOID lpData)
+{
+ LPCOUNTINFO lpCntInfo = (LPCOUNTINFO)lpData;
+
+ (lpCntInfo->cModem)++;
+ return TRUE;
+}
+
+//****************************************************************************
+// BOOL InitModemCallback (HKEY hkey, LPVOID lpData)
+//
+// Function: Initialize the enumerated modems.
+//
+// Returns: TRUE always to continue
+//
+//****************************************************************************
+
+BOOL InitModemCallback (HKEY hkey, LPVOID lpData)
+{
+ PLINEDEV pMdmDev;
+ LPINITINFO lpInitInfo = (LPINITINFO)lpData;
+
+ if ((pMdmDev = CreateLineDev(hkey,
+ lpInitInfo->dwBaseID +
+ lpInitInfo->cModem,
+ FALSE)) != NULL)
+ {
+ // Insert into the LINEDEV list
+ //
+ AddCBToList(pMdmDev);
+ (lpInitInfo->cModem)++;
+ };
+ return TRUE;
+}
+
+//****************************************************************************
+// EnumerateModems()
+//
+// Function: Enumerate the modem.
+//
+//****************************************************************************
+
+LONG NEAR PASCAL EnumerateModems (ENUMMDMCALLBACK pfnCallback,
+ LPVOID lpData,
+ BOOL fAll)
+{
+ HDEVINFO hdevinfo;
+ SP_DEVINFO_DATA diData;
+ DWORD iEnum;
+ BOOL fContinue;
+ HKEY hkey;
+ DWORD dwRW = KEY_READ;
+ // DWORD dwDIGCF = (fAll) ? DIGCF_PROFILE : DIGCF_PRESENT;
+ BOOL fFreeDevInfo=FALSE;
+ DWORD dwDIGCF = DIGCF_PRESENT;
+ if (USER_IS_ADMIN()) dwRW |= KEY_WRITE;
+
+ // Get the device info set
+ //
+ hdevinfo = GetHDevInfo(dwDIGCF);
+
+ if (hdevinfo != NULL)
+ {
+ // Enumerate each modem
+ //
+ fFreeDevInfo=TRUE;
+ fContinue = TRUE;
+ iEnum = 0;
+ diData.cbSize = sizeof(diData);
+ while(fContinue && SetupDiEnumDeviceInfo(hdevinfo, iEnum, &diData))
+ {
+ // Get the driver key
+ //
+ hkey = SetupDiOpenDevRegKey(hdevinfo, &diData, DICS_FLAG_GLOBAL, 0,
+ DIREG_DRV, dwRW);
+ if (hkey == INVALID_HANDLE_VALUE)
+ {
+ DPRINTF1(
+ "SetupDiOpenDevRegKeyfailed, err=0x%lx",
+ GetLastError()
+ );
+ }
+ else
+ {
+ fContinue = (*pfnCallback)(hkey, lpData);
+
+ RegCloseKey(hkey);
+ };
+
+ // Find next modem
+ //
+ iEnum++;
+ };
+ FreeHDevInfo(hdevinfo);
+ };
+
+
+ return ERROR_SUCCESS;
+
+}
+
+//****************************************************************************
+// BOOL SearchModemCallback (HKEY hkey, LPTSTR szKey, LPVOID lpData)
+//
+// Function: Search the enumerated modems for a matching modem.
+//
+// Returns: TRUE if not match and continue searching
+//
+//****************************************************************************
+
+BOOL SearchModemCallback (HKEY hkey, LPTSTR szKey, LPVOID lpData)
+{
+ LPFINDINFO lpFindInfo = (LPFINDINFO)lpData;
+ TCHAR szDevice[MAXDEVICENAME+1];
+ DWORD dwRegType, dwRegSize;
+ BOOL fContinue = TRUE;
+
+ // Get the Friendly Name
+ //
+ dwRegSize = sizeof(szDevice);
+ if ((RegQueryValueEx(hkey, cszFriendlyName, NULL,
+ &dwRegType, (VOID *)szDevice, &dwRegSize)
+ == ERROR_SUCCESS) && (dwRegType == REG_SZ))
+ {
+ // Is this the device?
+ //
+ if (!lstrcmpi(lpFindInfo->lpszDeviceName, szDevice))
+ {
+ // BUG! BUG! the key will be closed
+ //
+ if (lpFindInfo->lphkey != NULL)
+ {
+ *lpFindInfo->lphkey = hkey;
+ };
+
+ // Do we need the Instance ID?
+ //
+ if ((lpFindInfo->lpszID != NULL) &&
+ (lpFindInfo->cbID > 0))
+ {
+ // Return the instance ID
+ //
+ lstrcpyn(lpFindInfo->lpszID, szKey,
+ lpFindInfo->cbID);
+ };
+
+ // Mark that we found it
+ lpFindInfo->fFound = TRUE;
+ fContinue = FALSE;
+ };
+ };
+ return fContinue;
+}
+
+//****************************************************************************
+// EnumerateModemKeys()
+//
+// Function: Enumerate the modem driver key.
+//
+//****************************************************************************
+
+LONG NEAR PASCAL EnumerateModemKeys (ENUMMDMKEYCALLBACK pfnCallback,
+ LPVOID lpData)
+{
+ HKEY hkey, hkeyEnumNode;
+ UINT iEnum;
+ TCHAR szEnumNode[REGSTR_MAX_VALUE_LENGTH+1];
+ BOOL fTerminate;
+ DWORD dwRegType, dwRegSize;
+
+ // Initialize the global enumeration parameters
+ //
+ fTerminate = FALSE;
+
+ // Get the key to the modem hardware node
+ if (RegOpenKey(HKEY_LOCAL_MACHINE, cszHWNode, &hkey) == ERROR_SUCCESS)
+ {
+ // Enumerate the enumerator
+ iEnum = 0;
+ while ((!fTerminate) &&
+ (RegEnumKey(hkey, iEnum, szEnumNode,
+ sizeof(szEnumNode)) == ERROR_SUCCESS ))
+ {
+ // Open the modem node for this enumerator
+ if (RegOpenKey(hkey, szEnumNode, &hkeyEnumNode) == ERROR_SUCCESS)
+ {
+ // Allow the callback function to do their stuff
+ fTerminate = !(*pfnCallback)(hkeyEnumNode, szEnumNode, lpData);
+
+ RegCloseKey(hkeyEnumNode);
+ };
+ iEnum++;
+ };
+ RegCloseKey(hkey);
+ };
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG
+// PASCAL
+// ProviderInstall(
+// LPTSTR pszProviderName,
+// BOOL bNoMultipleInstance
+// )
+//
+// Function: Check to see if a service provider is already installed. Returns
+// appropriate TSPI error code to be passed back from
+// TUISPI_providerInstall.
+//
+// History:
+// Thu 21-Dec-1995 18:24:53 -by- Chris Caputo [ccaputo]
+// Ported from TAPI's atsp32. Periodically, make sure it is in sync to catch
+// any bugs fixed in that code.
+//****************************************************************************
+
+LONG
+PASCAL
+ProviderInstall(
+ LPTSTR pszProviderName,
+ BOOL bNoMultipleInstance
+ )
+{
+ LONG lResult;
+
+
+ //
+ // If only one installation instance of this provider is
+ // allowed then we want to check the provider list to see
+ // if the provider is already installed
+ //
+
+ if (bNoMultipleInstance)
+ {
+ LONG (WINAPI *pfnGetProviderList)();
+ DWORD dwTotalSize, i;
+ HINSTANCE hTapi32;
+ LPLINEPROVIDERLIST pProviderList;
+ LPLINEPROVIDERENTRY pProviderEntry;
+
+
+ lResult = LINEERR_OPERATIONFAILED; // assume failure
+
+
+ //
+ // Load Tapi32.dll & get a pointer to the lineGetProviderList
+ // func. We could just statically link with Tapi32.lib and
+ // avoid the hassle (and this wouldn't have any adverse
+ // performance effects because of the fact that this
+ // implementation has a separate ui dll that runs only on the
+ // client context), but a provider who implemented these funcs
+ // in it's TSP module would want to do an explicit load like
+ // we do here to prevent the perf hit of Tapi32.dll always
+ // getting loaded in Tapisrv.exe's context.
+ //
+
+ if (!(hTapi32 = LoadLibrary (TEXT("tapi32.dll"))))
+ {
+ DPRINTF1(
+ "LoadLibrary(tapi32.dll) failed, err=%d",
+ GetLastError()
+ );
+
+ goto ProviderInstall_return;
+ }
+
+ if (!((FARPROC) pfnGetProviderList = GetProcAddress(
+ hTapi32,
+#ifdef UNICODE
+ (LPCSTR) "lineGetProviderListW"
+#else // UNICODE
+ (LPCSTR) "lineGetProviderList"
+#endif // UNICODE
+ )))
+ {
+ DPRINTF1(
+ "GetProcAddr(lineGetProviderList) failed, err=%d",
+ GetLastError()
+ );
+
+ goto ProviderInstall_unloadTapi32;
+ }
+
+
+ //
+ // Loop until we get the full provider list
+ //
+
+ dwTotalSize = sizeof (LINEPROVIDERLIST);
+
+ goto ProviderInstall_allocProviderList;
+
+ProviderInstall_getProviderList:
+
+ if ((*pfnGetProviderList)(0x00020000, pProviderList) != 0)
+ {
+ goto ProviderInstall_freeProviderList;
+ }
+
+ if (pProviderList->dwNeededSize > pProviderList->dwTotalSize)
+ {
+ dwTotalSize = pProviderList->dwNeededSize;
+
+ LocalFree (pProviderList);
+
+ProviderInstall_allocProviderList:
+
+ if (!(pProviderList = LocalAlloc (LPTR, dwTotalSize)))
+ {
+ lResult = LINEERR_NOMEM;
+ goto ProviderInstall_unloadTapi32;
+ }
+
+ pProviderList->dwTotalSize = dwTotalSize;
+
+ goto ProviderInstall_getProviderList;
+ }
+
+
+ //
+ // Inspect the provider list entries to see if this provider
+ // is already installed
+ //
+
+ pProviderEntry = (LPLINEPROVIDERENTRY) (((LPBYTE) pProviderList) +
+ pProviderList->dwProviderListOffset);
+
+ for (i = 0; i < pProviderList->dwNumProviders; i++)
+ {
+ LPTSTR pszInstalledProviderName =
+ (LPTSTR) ((LPBYTE) pProviderList
+ + pProviderEntry->dwProviderFilenameOffset);
+ LPTSTR psz;
+
+
+#ifdef DONT_WANT_C_RUNTIME
+ if ((psz = strrchr (pszInstalledProviderName, '\\')))
+ {
+ pszInstalledProviderName = psz + 1;
+ }
+#else // DONT_WANT_C_RUNTIME
+ // The above code was trying to handle the case where a directory
+ // path gets returned. We need to do this in a way that doesn't
+ // load the C runtime code. Ie. search for the last '\\'.
+ {
+ LPTSTR pchLastWack;
+
+ pchLastWack = NULL;
+ psz = pszInstalledProviderName;
+
+ // Find the last '\\'.
+ while (*psz)
+ {
+ if (*psz == TEXT('\\'))
+ {
+ pchLastWack = psz;
+ }
+ psz++;
+ }
+
+ if (pchLastWack)
+ {
+ pszInstalledProviderName = pchLastWack + 1;
+ }
+ }
+#endif // DONT_WANT_C_RUNTIME
+
+ if (lstrcmpi (pszInstalledProviderName, pszProviderName) == 0)
+ {
+ lResult = LINEERR_NOMULTIPLEINSTANCE;
+ goto ProviderInstall_freeProviderList;
+ }
+
+ pProviderEntry++;
+ }
+
+
+ //
+ // If here then the provider isn't currently installed,
+ // so do whatever configuration stuff is necessary and
+ // indicate SUCCESS
+ //
+
+ lResult = 0;
+
+
+ProviderInstall_freeProviderList:
+
+ LocalFree (pProviderList);
+
+ProviderInstall_unloadTapi32:
+
+ FreeLibrary (hTapi32);
+ }
+ else
+ {
+ //
+ // Do whatever configuration stuff is necessary and return SUCCESS
+ //
+
+ lResult = 0;
+ }
+
+
+
+ProviderInstall_return:
+
+ return lResult;
+}
+
+
+
+#ifdef UNDER_CONSTRUCT
+
+TCHAR gszModem[]="Modem";
+
+LONG WINAPI
+AddModemDependency(
+ VOID
+ )
+
+{
+
+ schSCManager=OpenSCManager(
+ NULL,
+ NULL,
+ SC_MANAGER_ALL_ACCESS
+ );
+
+ if (schSCManager != NULL) {
+ //
+ // now on service
+ //
+ schModemSys=OpenService(
+ schSCManager,
+ TEXT("tapisrv"),
+ SERVICE_ALL_ACCESS
+ );
+
+ if (schModemSys != NULL) {
+
+
+ ServiceConfig=LocalAlloc(lptr, 4096);
+
+ if (ServiceConfig == NULL) {
+
+ goto Fail;
+ }
+
+ lResult=QueryServiceConfig(
+ schModemSys,
+ ServiceConfig,
+ 4096,
+ &BytesNeeded
+ );
+
+ if (ERROR_SUCCESS != lResult) {
+
+ got Fail;
+ }
+
+ Length=RemoveModemSys(
+ ServiceConfig.lpDependencies
+ );
+
+
+ NewDependList=LocalAlloc(LPTR,Length+sizeof(gszModem)+2);
+
+ if (NewDependList == NULL) {
+
+ goto Fail;;
+ }
+
+
+ AddModemToDepend(
+ ServiceConfig.lpDependencies,
+ NewDependList
+ );
+
+ ServiceConfig.lpDependencies=NewDependList;
+
+ lResult=ChangeServiceConfig(
+ schModemSys,
+ ServiceConfig.dwServiceType,
+ ServiceConfig.dwStartType,
+ ServiceConfig.dwErrorControl,
+ ServiceConfig.lpBinaryPathName,
+ &TagValue,
+ ServiceConfig.dwTagId,
+ NewDependList,
+ ServiceConfig.lpServiceStartName,
+ NULL,
+ ServiceConfig.lpDisplayName
+ );
+
+
+
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_providerCreateLineDevice()
+//
+// Dynamically creates a new device.
+//
+//****************************************************************************
+
+LONG TSPIAPI TSPI_providerCreateLineDevice(DWORD dwTempID,
+ DWORD dwDeviceID)
+{
+
+ LONG lResult = LINEERR_OPERATIONFAILED; // assume failure
+ DBG_DDI_ENTER("TSPI_providerCreateLineDevice");
+
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_providerCreateLineDevice,
+ &dwTempID
+ );
+
+ // Let the device level handle it
+ //
+ lResult = DevlineNewDevice(dwTempID, dwDeviceID);
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_providerCreateLineDevice,
+ &dwTempID,
+ lResult
+ );
+
+ DBG_DDI_EXIT("TSPI_providerCreateLineDevice", lResult);
+ return lResult;
+}
+
+//****************************************************************************
+// IsDeviceInService()
+//
+// Function: Finds the specified modem in the current modem list
+//
+//****************************************************************************
+
+BOOL NEAR PASCAL IsDeviceInService(LPSTR szID)
+{
+ DEVNODE dn;
+ DWORD dwStatus, dwProblem;
+ BOOL fRet = FALSE;
+
+ // Locate the devnode
+ //
+ if (CM_Locate_DevNode(&dn, szID, 0) == ERROR_SUCCESS)
+ {
+ // The devnode exists, check the devnode status
+ //
+ if (CM_Get_DevNode_Status(&dwStatus, &dwProblem, dn, 0) == ERROR_SUCCESS)
+ {
+ // If the device is in service only when it has no problem
+ //
+ fRet = ((dwStatus & DN_STARTED) != 0);
+ };
+ };
+
+ return fRet;
+}
+
+//****************************************************************************
+// FindModemHWKey()
+//
+// Function: Finds the specified modem's hardware registry key
+//
+//****************************************************************************
+
+DWORD NEAR PASCAL FindModemHWKey (LPSTR pszDeviceName, HKEY FAR* lphkey,
+ LPSTR pszID, UINT cbID)
+{
+ FINDINFO fi;
+
+ // Package the enumeration data
+ //
+ fi.lpszDeviceName = (LPSTR)pszDeviceName;
+ fi.fFound = FALSE;
+ fi.lphkey = lphkey;
+ fi.lpszID = (LPSTR)pszID;
+ fi.cbID = cbID;
+
+ // Find the modem
+ //
+ return ((EnumerateModemKeys(SearchModemCallback, (LPVOID)&fi) == ERROR_SUCCESS) &&
+ (fi.fFound)) ? ERROR_SUCCESS : ERROR_BAD_DEVICE;
+}
+
+//****************************************************************************
+// lineNewDevice()
+//
+// Function: Emulate the TAPI lineInitialize call.
+//
+//****************************************************************************
+
+LONG NEAR PASCAL DevlineNewDevice (DWORD dwTempID,
+ DWORD dwPermID)
+{
+ HLOCAL hDeviceName;
+ PSTR pDeviceName;
+ HKEY hkeyModem;
+ DWORD dwRet;
+ char szID[MAXDEVICENAME+1];
+
+ // Get the name of the device
+ //
+ hDeviceName = (HLOCAL)LOWORD(dwTempID);
+ if ((pDeviceName = (PSTR)LocalLock(hDeviceName)) == NULL)
+ return LINEERR_BADDEVICEID;
+
+ // Assume failure
+ //
+ dwRet = LINEERR_OPERATIONFAILED;
+
+ // if we found the device, create the LINEDEV struct for it
+ //
+ if (FindModemHWKey(pDeviceName, &hkeyModem, szID, sizeof(szID))
+ == ERROR_SUCCESS)
+ {
+ PLINEDEV pLineDev;
+
+ if ((pLineDev = CreateLineDev(hkeyModem, dwPermID, szID)) != NULL)
+ {
+ // Insert into the LINEDEV list
+ //
+ pLineDev->pNext = gMdmDev;
+ gMdmDev = pLineDev;
+ dwRet = SUCCESS;
+ };
+
+ RegCloseKey(hkeyModem);
+ };
+
+ LocalUnlock(hDeviceName);
+ LocalFree(hDeviceName);
+
+ return dwRet;
+}
+
+//****************************************************************************
+// lineDisabled()
+//
+// Function: Remove the LineDev structure.
+//
+//****************************************************************************
+
+LONG NEAR PASCAL DevlineDisabled (PLINEDEV pLineDev)
+{
+ PLINEDEV pCur, pPrevious;
+
+ // Notify TAPI for device out of service
+ //
+ if (pLineDev->lpfnEvent != NULL)
+ {
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_LINEDEVSTATE,
+ (pLineDev->fdwResources & LINEDEVFLAGS_REMOVING ?
+ LINEDEVSTATE_REMOVED : LINEDEVSTATE_OUTOFSERVICE),
+ 0L, 0L);
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_CLOSE,
+ 0L, 0L, 0L);
+ };
+
+ // If removal, free the resources for this modem
+ //
+ if (pLineDev->fdwResources & LINEDEVFLAGS_REMOVING)
+ {
+ // Walk the modem list
+ //
+ pPrevious = NULL;
+ pCur = gMdmDev;
+ while (pCur)
+ {
+ if (pCur == pLineDev)
+ break;
+
+ pPrevious = pCur;
+ pCur = pCur->pNext;
+ };
+
+ // Remove it from the list
+ //
+ if (pPrevious != NULL)
+ pPrevious->pNext = pLineDev->pNext;
+ else
+ gMdmDev = pLineDev->pNext;
+
+ // Free linedev's resources
+ //
+ CleanupLineDev(pLineDev);
+
+ if (pLineDev->pDevCfg != NULL)
+ LocalFree((HLOCAL)pLineDev->pDevCfg);
+
+ // Deallocate the port
+ //
+ LocalFree((HLOCAL)pLineDev);
+ };
+
+ return SUCCESS;
+}
+
+//****************************************************************************
+// MdmDeviceChangeNotify()
+//
+// Function: Notify a change in modem list.
+//
+// Returns: SUCCESS
+//
+//****************************************************************************
+
+DWORD NEAR PASCAL MdmDeviceChangeNotify (UINT uEvent, LPSTR szDevice)
+{
+ HLOCAL hDeviceName;
+ PSTR pDeviceName;
+
+ // Allocate a local buffer for the device name
+ //
+ if ((hDeviceName = LocalAlloc(LMEM_MOVEABLE,
+ sizeof(TCHAR) * (MAXDEVICENAME+1))) != NULL)
+ {
+ if ((pDeviceName = (PSTR)LocalLock(hDeviceName)) != NULL)
+ {
+ // Remember the new device name
+ //
+ lstrcpyn((LPSTR)pDeviceName, szDevice, MAXDEVICENAME+1);
+ LocalUnlock(hDeviceName);
+
+ // Signal ourselves to start adding at a better time
+ //
+ PostMessage(ghwndMdm, WM_MDMCHANGE, (WPARAM)uEvent,
+ (LPARAM)MAKELONG(hDeviceName, 0));
+ }
+ else
+ {
+ LocalFree(hDeviceName);
+ };
+ };
+ return SUCCESS;
+}
+
+//****************************************************************************
+// MdmDeviceChanged()
+//
+// Function: Handle a device change notification.
+//
+// Returns: SUCCESS
+//
+//****************************************************************************
+
+DWORD NEAR PASCAL MdmDeviceChanged (UINT uEvent, LPARAM lParam)
+{
+ HLOCAL hDeviceName;
+ PSTR pDeviceName;
+ PLINEDEV pLineDev;
+
+ // Get the name of the modem that is changed
+ //
+ hDeviceName = (HLOCAL)LOWORD(lParam);
+ if ((pDeviceName = (PSTR)LocalLock(hDeviceName)) == NULL)
+ {
+ // Excuse me! something is terribly wrong here.
+ //
+ ASSERT(0);
+ return ERROR_INVALID_HANDLE;
+ };
+
+ // Search for an existing device
+ //
+ pLineDev = GetCBfromName(pDeviceName);
+ LocalUnlock(hDeviceName);
+
+ // Determine the type of change
+ //
+ switch (uEvent)
+ {
+ //************************************************************************
+ // Notify TAPI of the new device
+ //************************************************************************
+
+ case UMDM_ADD:
+ {
+ // If not found, it is a new device
+ //
+ if (pLineDev == NULL)
+ {
+ (*gfnLineCreateProc)(NULL, NULL, LINE_CREATE, (DWORD)ghProvider,
+ (DWORD)lParam, 0L);
+
+ // Return here so that the device name token is not freed.
+ //
+ return ERROR_SUCCESS;
+ };
+ break;
+ }
+
+ //************************************************************************
+ // Enable modem device, i.e. the modem devnode becomes enabled
+ //************************************************************************
+
+ case UMDM_ENABLE:
+
+ // If the device exists and is out of service, make it in service.
+ //
+ if (pLineDev != NULL)
+ {
+ if (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ pLineDev->fdwResources &= ~LINEDEVFLAGS_OUTOFSERVICE;
+ if (pLineDev->lpfnEvent != NULL)
+ {
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_LINEDEVSTATE,
+ LINEDEVSTATE_INSERVICE, 0L, 0L);
+ };
+ };
+ };
+ break;
+
+ //************************************************************************
+ // Disable modem device, i.e. the modem devnode becomes disabled, and
+ // probably remove the modem from the list
+ //************************************************************************
+
+ case UMDM_DISABLE:
+
+ // If we found the disabled device
+ //
+ if ((pLineDev != NULL) &&
+ (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE))
+ {
+ break;
+ }
+
+ //************************************************************************
+ // Fall through
+ //************************************************************************
+
+ case UMDM_REMOVE:
+
+ // If we found the disabled device
+ //
+ if (pLineDev != NULL)
+ {
+ pLineDev->fdwResources |= LINEDEVFLAGS_OUTOFSERVICE;
+ if (uEvent == UMDM_REMOVE)
+ {
+ pLineDev->fdwResources |= LINEDEVFLAGS_REMOVING;
+ };
+
+ // Is the modem active?
+ //
+ if ((pLineDev->dwCall & CALL_ALLOCATED) &&
+ (pLineDev->dwCallState != LINECALLSTATE_DISCONNECTED))
+ {
+ // We need to clean up the active connection first
+ //
+ MdmCompleteAsync (pLineDev, MDM_HANGUP, MDM_ID_NULL);
+ }
+ else
+ {
+ // The modem might be listening, just close the modem
+ //
+ if ((pLineDev->DevState == DEVST_PORTLISTENINIT) ||
+ (pLineDev->DevState == DEVST_PORTLISTENING))
+ {
+ // Notify the monitoring application
+ //
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_CLOSE,
+ 0L, 0L, 0L);
+ DevlineClose(pLineDev);
+ };
+
+ // disable or remove it immediately
+ //
+ DevlineDisabled(pLineDev);
+ };
+ };
+ break;
+
+ default:
+ break;
+ };
+
+ // We no longer need the device name token
+ //
+ LocalFree(hDeviceName);
+ return ERROR_SUCCESS;
+}
+
+#endif //UNDER_CONSTRUCT
+
+
+#ifndef DYNA_ADDREMOVE
+
+LONG TSPIAPI TSPI_providerCreateLineDevice(DWORD dwTempID,
+ DWORD dwDeviceID)
+{
+ ASSERT(FALSE);
+ return LINEERR_OPERATIONFAILED;
+}
+
+#else // DYNA_ADDREMOVE
+
+BOOL ReInitModemCallback (HKEY hkey, LPVOID lpData);
+LONG DevlineNewDevice (DWORD dwTempID, DWORD dwPermID);
+
+
+//****************************************************************************
+// LONG DevlineReInitialize()
+//
+// Function: Re-initializes the modem device list
+//
+// History:
+// 4/15/96 JosephJ Created
+//****************************************************************************
+
+LONG DevlineReInitialize (DWORD dwBaseID,
+ LPDWORD lpdwNumDevs)
+{
+ INITINFO initi;
+ DWORD dwRet = LINEERR_OPERATIONFAILED;
+ BOOL fModemUILoaded;
+ HDEVINFO hdevinfo=NULL;
+
+ // Load MODEMUI.DLL (for private entry points)
+ fModemUILoaded=TRUE;
+ if (!LoadModemUI())
+ {
+ fModemUILoaded=FALSE;
+ goto end;
+ }
+
+ // For the modem device, get the device information
+ hdevinfo = GetHDevInfo(DIGCF_PRESENT);
+ if (!hdevinfo)
+ {
+ goto end;
+ }
+
+ initi.dwBaseID = dwBaseID;
+ initi.cModem = 0;
+
+ // We do this enumeration inside the global critical section, because there
+ // Potentially could be more than one tepCplNotif threads active.
+ // It's almost impossible to do this manually -- one would have to add/remove
+ // modems real fast in succession so that the 2nd notification comes in when
+ // the 1st is still proceeding, but it's possible, and we definitely want to
+ // serialize the marking of all the modems with the REINIT flag and
+ // subsequently declaring all the unmarked ones out-of-service. Also there
+ // is the possibility of both threads deciding that a modem needs to be
+ // created and creating two instances of them.
+ EnterCriticalSection(&gUmdm.crit);
+ dwRet = EnumerateModems(ReInitModemCallback, (LPVOID)&initi, TRUE);
+ if (dwRet == ERROR_SUCCESS)
+ {
+ DisableStaleModems();
+ *lpdwNumDevs = initi.cModem;
+ }
+ else
+ *lpdwNumDevs = 0;
+ LeaveCriticalSection(&gUmdm.crit);
+
+end:
+
+ if (fModemUILoaded)
+ {
+ UnloadModemUI();
+ }
+ if (hdevinfo)
+ {
+ FreeHDevInfo(hdevinfo);
+ }
+
+ return dwRet;
+}
+
+//****************************************************************************
+// BOOL ReInitModemCallback (HKEY hkey, LPVOID lpData)
+//
+// Function: ReInitializes the enumerated modems.
+//
+// Returns: TRUE always to continue
+//
+//****************************************************************************
+
+BOOL ReInitModemCallback (HKEY hkey, LPVOID lpData)
+{
+ PLINEDEV pMdmDev;
+ LPINITINFO lpInitInfo = (LPINITINFO)lpData;
+
+ pMdmDev = CreateLineDev(hkey, MAXDWORD, TRUE);
+ if (pMdmDev)
+ {
+ // Insert into the LINEDEV list
+ //
+ AddCBToList(pMdmDev);
+ (lpInitInfo->cModem)++;
+
+ // Let's callback the LINE_CREATE function here, passing in pMdmDev
+ // as the handle.
+ // Note: we haven't claimed any crit-sections at this time.
+ if (gfnLineCreateProc)
+ {
+ (*gfnLineCreateProc)(NULL, NULL, LINE_CREATE, (DWORD)ghProvider,
+ (DWORD)pMdmDev, 0L);
+ }
+ };
+
+ return TRUE;
+}
+
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_providerCreateLineDevice()
+//
+// Dynamically creates a new device.
+//
+//****************************************************************************
+
+LONG TSPIAPI TSPI_providerCreateLineDevice(DWORD dwTempID,
+ DWORD dwDeviceID)
+{
+ LONG lResult;
+
+ DBG_DDI_ENTER("TSPI_providerCreateLineDevice");
+ TRACE3(IDEVENT_TSPFN_ENTER, IDFROM_TSPI_providerCreateLineDevice, &dwTempID);
+
+ // Let the device level handle it
+ //
+ lResult = DevlineNewDevice(dwTempID, dwDeviceID);
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_providerCreateLineDevice,
+ &dwTempID,
+ lResult
+ );
+ DBG_DDI_EXIT("TSPI_providerCreateLineDevice", lResult);
+ return lResult;
+}
+
+
+
+//****************************************************************************
+// lineNewDevice()
+//
+// Function: Emulate the TAPI lineInitialize call.
+//
+//****************************************************************************
+
+LONG DevlineNewDevice (DWORD dwTempID,
+ DWORD dwPermID)
+{
+ LPSTR lpDeviceName;
+ HKEY hkeyModem;
+ DWORD dwRet;
+ char szID[MAXDEVICENAME+1];
+ PLINEDEV pLineDev;
+
+ DPRINTF2("DevlineNewDevice(%lu,%lu)", dwTempID, dwPermID);
+
+ // Retrieve the device
+ //
+ pLineDev = GetCBfromHandle (dwTempID);
+ if (!pLineDev)
+ {
+ dwRet=LINEERR_BADDEVICEID;
+ goto end;
+ }
+
+ // Assume failure
+ //
+ dwRet = LINEERR_OPERATIONFAILED;
+
+ // if we found the device, we finish initializing it -- specify
+ // the proper dwPermID, etc...
+ //
+ ASSERT(pLineDev->dwID == MAXDWORD);
+ pLineDev->dwID=dwPermID;
+ RELEASE_LINEDEV(pLineDev);
+ dwRet = ERROR_SUCCESS;
+
+end:
+ return dwRet;
+}
+#endif // DYNA_ADDREMOVE
+
+//
+// Thread Entry Point for the thread that processes cpl notifications.
+//
+DWORD APIENTRY tepCplNotif(DWORD dwParam)
+{
+ DWORD dwcbNew;
+ PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) dwParam;
+
+ ASSERT(pnf && TSP_CPL_FRAME(pnf));
+
+ if (pnf->dwFlags&fTSPNOTIF_FLAG_CPL_REENUM)
+ {
+ DevlineReInitialize (0, &dwcbNew);
+ }
+ else if (pnf->dwFlags&fTSPNOTIF_FLAG_CPL_DEFAULT_COMMCONFIG_CHANGE)
+ {
+ if (!(pnf->dwFlags&fTSPNOTIF_FLAG_UNICODE))
+ {
+ ASSERT(FALSE);
+ }
+ else
+ {
+ // Get friendly name and refresh comm config.
+ LPCTSTR lpctszFriendlyName = (LPCTSTR) pnf->rgb;
+ UINT uMaxSize = pnf->dwSize - sizeof(NOTIFICATION_FRAME);
+ UINT u;
+
+ ASSERT(pnf->dwSize > sizeof(NOTIFICATION_FRAME));
+
+ // verify string is null-terminated.
+ for(u=0;u<uMaxSize;u++)
+ {
+ if (!lpctszFriendlyName[u]) break;
+ }
+
+ ASSERT(u<uMaxSize);
+
+ if (u<uMaxSize)
+ {
+ PLINEDEV pLineDev = GetCBfromName (
+ (LPTSTR) lpctszFriendlyName
+ );
+
+ if (pLineDev)
+ {
+ DPRINTF1(
+ "CPLNOTIF: Marking device [%s] for refresh",
+ lpctszFriendlyName
+ );
+ pLineDev->fUpdateDefaultCommConfig=TRUE;
+ RELEASE_LINEDEV(pLineDev); pLineDev=NULL;
+ }
+ }
+ }
+ }
+
+ // Our job to free this.
+ LocalFree(pnf);
+
+ CplNotifComplete(FALSE);
+
+ return ERROR_SUCCESS;
+}
+
+
+void cplProcessNotification(PNOTIFICATION_FRAME pnf)
+{
+
+ ASSERT(TSP_CPL_FRAME(pnf));
+ {
+ HANDLE hThread;
+ DWORD dwTID;
+ DPRINTF("Processing CPL Notification");
+
+#ifdef DYNA_ADDREMOVE
+ EnterCriticalSection(&gUmdm.critCplNotif);
+ if (gUmdm.hthrdCplNotif)
+ {
+ DPRINTF("cplProcessNotification: Previous CplNotif thread exists. Skipping.");
+ }
+ else
+ {
+ PNOTIFICATION_FRAME pnfAlloc =
+ (PNOTIFICATION_FRAME) LocalAlloc
+ (
+ LPTR,
+ pnf->dwSize
+ );
+ if (pnfAlloc)
+ {
+
+ CopyMemory(pnfAlloc, pnf, pnf->dwSize);
+
+ // Start the thread to process the notification
+ //
+ gUmdm.hthrdCplNotif = CreateThread(
+ NULL, // default security
+ 0, // default stack size
+ (LPTHREAD_START_ROUTINE)tepCplNotif, // thread entry point
+ pnfAlloc, // parameter
+ 0, // Start immediately
+ &dwTID); // thread id
+
+ if (gUmdm.hthrdCplNotif)
+ {
+
+ DPRINTF2("cplNotification: Created Thread @%lu; TID=0x%lx\n",
+ GetTickCount(),
+ dwTID);
+ }
+ else
+ {
+ DPRINTF1("cplNotification: Created Thread FAILED. Err=%lu\n",
+ GetLastError());
+ LocalFree(pnfAlloc);
+ pnfAlloc=NULL;
+ }
+ }
+ }
+ LeaveCriticalSection(&gUmdm.critCplNotif);
+#endif // DYNA_ADDREMOVE
+ }
+}
+
+
+#ifdef DYNA_ADDREMOVE
+HDEVINFO GetHDevInfo(DWORD dwDIGCF)
+{
+ HDEVINFO hdevinfo=NULL;
+
+ EnterCriticalSection(&gUmdm.crit);
+
+ if (!gUmdm.dwcRefHDevInfo)
+ {
+ gUmdm.hdevinfo = SetupDiGetClassDevsW(
+ g_pguidModem,
+ NULL,
+ NULL,
+ dwDIGCF);
+ }
+
+ hdevinfo=gUmdm.hdevinfo;
+
+ if (hdevinfo)
+ {
+ gUmdm.dwcRefHDevInfo++;
+ }
+
+ ASSERT( ( hdevinfo && gUmdm.dwcRefHDevInfo)
+ ||(!hdevinfo && !gUmdm.dwcRefHDevInfo) );
+
+ LeaveCriticalSection(&gUmdm.crit);
+
+ return hdevinfo;
+}
+#endif // DYNA_ADDREMOVE
+
+
+
+#ifdef DYNA_ADDREMOVE
+void FreeHDevInfo(HDEVINFO hdevinfo)
+{
+
+ EnterCriticalSection(&gUmdm.crit);
+
+ ASSERT(hdevinfo==gUmdm.hdevinfo);
+
+ if (!gUmdm.dwcRefHDevInfo)
+ {
+ ASSERT(FALSE);
+ goto end;
+ }
+ if (!--gUmdm.dwcRefHDevInfo)
+ {
+ SetupDiDestroyDeviceInfoList(gUmdm.hdevinfo);
+ gUmdm.hdevinfo=NULL;
+ }
+
+end:
+
+ LeaveCriticalSection(&gUmdm.crit);
+
+}
+#endif // DYNA_ADDREMOVE
+
+
+#ifdef DYNA_ADDREMOVE
+BOOL LoadModemUI(void)
+{
+ BOOL fRet=FALSE;
+
+ EnterCriticalSection(&gUmdm.crit);
+
+ if (!gUmdm.dwcRefModemUI)
+ {
+ HINSTANCE hlib = LoadLibrary(TEXT("modemui.dll"));
+
+ ASSERT(!gUmdm.hModemUIDLL);
+ ASSERT(!gUmdm.pfnPrivateDefCommConfig);
+
+ if (hlib)
+ {
+
+ gUmdm.pfnPrivateDefCommConfig=
+ (PVOID)GetProcAddress(hlib,"UnimodemGetDefaultCommConfig");
+
+ if (!gUmdm.pfnPrivateDefCommConfig)
+ {
+ FreeLibrary(hlib);
+ hlib=NULL;
+ }
+ }
+
+ gUmdm.hModemUIDLL = hlib;
+ }
+
+ if (gUmdm.hModemUIDLL)
+ {
+ gUmdm.dwcRefModemUI++;
+ fRet=TRUE;
+ }
+
+ ASSERT( ( gUmdm.hModemUIDLL && gUmdm.dwcRefModemUI)
+ ||(!gUmdm.hModemUIDLL && !gUmdm.dwcRefModemUI) );
+
+ LeaveCriticalSection(&gUmdm.crit);
+
+ return fRet;
+}
+#endif // DYNA_ADDREMOVE
+
+
+#ifdef DYNA_ADDREMOVE
+void UnloadModemUI(void)
+{
+
+ EnterCriticalSection(&gUmdm.crit);
+
+ if (!gUmdm.dwcRefModemUI)
+ {
+ ASSERT(FALSE);
+ goto end;
+ }
+
+ if (!--gUmdm.dwcRefModemUI)
+ {
+ ASSERT(gUmdm.hModemUIDLL && gUmdm.pfnPrivateDefCommConfig);
+ FreeLibrary(gUmdm.hModemUIDLL);
+ gUmdm.hModemUIDLL=NULL;
+ gUmdm.pfnPrivateDefCommConfig=NULL;
+ }
+
+end:
+
+ LeaveCriticalSection(&gUmdm.crit);
+
+}
+#endif // DYNA_ADDREMOVE
+
+
+#ifdef DYNA_ADDREMOVE
+void CplNotifComplete(BOOL fWait)
+{
+ HANDLE hthrd;
+
+ EnterCriticalSection(&gUmdm.critCplNotif);
+ hthrd=gUmdm.hthrdCplNotif;
+ gUmdm.hthrdCplNotif=0;
+ LeaveCriticalSection(&gUmdm.critCplNotif);
+
+ if (hthrd)
+ {
+ if (fWait)
+ {
+ DPRINTF("CplNotifComplete: WARNING -- waiting for re-enum thread to complete");
+ WaitForSingleObject(hthrd, INFINITE);
+ }
+ CloseHandle(hthrd);
+ }
+}
+#endif // DYNA_ADDREMOVE
+
+//
+// Reset the cached CommConfig structure by calling GetDefaultCommConfig.
+//
+void RefreshDefaultCommConfig(PLINEDEV pLineDev)
+{
+
+ COMMCONFIG * pccCurrent = NULL, * pccNew = NULL;
+ LPCTSTR lpctszDeviceName = NULL;
+
+ if (pLineDev && pLineDev->pDevCfg)
+ {
+ pccCurrent = (COMMCONFIG *)&(pLineDev->pDevCfg->commconfig);
+ lpctszDeviceName = pLineDev->szDeviceName;
+ }
+
+ if (!pccCurrent || !lpctszDeviceName) goto end;
+
+
+ // Get default comm config.
+ {
+ DWORD dwSize = pccCurrent->dwSize;
+
+ DPRINTF1("RefreshDefaultCommConfig: [%s]", lpctszDeviceName);
+
+ pccNew = (COMMCONFIG *)LocalAlloc(LPTR, (UINT)dwSize);
+ if (pccNew)
+ {
+ pccNew->dwProviderSubType = PST_MODEM;
+ if (!GetDefaultCommConfig(lpctszDeviceName, pccNew, &dwSize))
+ {
+ DPRINTF2
+ (
+ "RefreshCommComfig: GetDefaultCommConfig(\"%s\"): ERR %08lu",
+ lpctszDeviceName,
+ GetLastError()
+ );
+ LocalFree(pccNew); pccNew = NULL;
+ }
+ }
+ }
+
+ if (pccNew)
+ {
+ // Similar to what is done by TSPI_lineSetDevConfig.
+
+ ASSERT(pccCurrent->dwSize == pccNew->dwSize);
+ ASSERT(pccCurrent->wVersion == pccNew->wVersion);
+ ASSERT(pccCurrent->dwProviderSubType == pccNew->dwProviderSubType);
+ ASSERT(pccCurrent->dwProviderSize == pccNew->dwProviderSize);
+ if
+ ( (pccCurrent->dwSize == pccNew->dwSize)
+ && (pccCurrent->wVersion == pccNew->wVersion)
+ && (pccCurrent->dwProviderSubType == pccNew->dwProviderSubType)
+ && (pccCurrent->dwProviderSize == pccNew->dwProviderSize)
+ )
+ {
+
+ pccCurrent->dcb = pccNew->dcb;
+ CopyMemory(((LPBYTE)pccCurrent)+pccCurrent->dwProviderOffset,
+ ((LPBYTE)pccNew)+pccNew->dwProviderOffset,
+ pccCurrent->dwProviderSize);
+
+ pLineDev->InitStringsAreValid=FALSE;
+ }
+ else
+ {
+ DPRINTF("RefreshDefaultCommSettings:size/version/prov. mismatch");
+ ASSERT(FALSE);
+ }
+ }
+
+
+end:
+
+ if (pccNew) {LocalFree(pccNew); pccNew = NULL;}
+
+}
+
+// Initialize the global parameters
+//
+void tspInitGlobals(void)
+{
+ // Determine if User is Admin
+ gUmdm.bAdminUser = IsAdminUser();
+
+ // Determine global registry state flags.
+ {
+ TCHAR rgtch[] = szUNIMODEM_REG_PATH TEXT("\\PortSpecific");
+ HKEY hKey=NULL;
+ LONG l;
+
+ gRegistryFlags = 0;
+
+ l=RegOpenKeyEx(
+ HKEY_LOCAL_MACHINE, // handle of open key
+ rgtch, // address of name of subkey to open
+ 0, // reserved
+ KEY_READ, // desired security access
+ &hKey // address of buffer for opened handle
+ );
+
+ if (l==ERROR_SUCCESS)
+ {
+ gRegistryFlags = fGRF_PORTLATENCY;
+ RegCloseKey(hKey);
+ }
+ }
+}
+
+// DeInitialize the global parameters
+//
+void tspDeInitGlobals(void)
+{
+ gRegistryFlags = 0;
+ gUmdm.bAdminUser = FALSE;
+}
diff --git a/private/unimodem/tapisp/umdmspi.h b/private/unimodem/tapisp/umdmspi.h
new file mode 100644
index 000000000..8014a1af8
--- /dev/null
+++ b/private/unimodem/tapisp/umdmspi.h
@@ -0,0 +1,425 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: umdmspi.h
+// Content: This file contains the declaration for Unimodem TSP
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Mon 27-Jun-1994 10:10:00 -by- Nick Manson [t-nickm]
+// Wed 15-Jun-1994 10:41:00 -by- Nick Manson [t-nickm]
+// Fri 30-Jul-1993 10:30:39 -by- Viroon Touranachun [viroont]
+//
+//****************************************************************************
+
+#ifndef _MDMSPI_H_
+#define _MDMSPI_H_
+
+//****************************************************************************
+// Constant Definitions
+//****************************************************************************
+
+#define MDMSPI_VERSION 0x00020000
+
+#define MAX_CLASS_NAME_LEN 128
+#define UNIMODEM_WNDCLASS TEXT("MdmWndClass")
+
+#define MAXDEVICENAME 128 // BUGBUG: should match cpl\modem.h MAX_REG_KEY_LEN
+#define MAXADDRESSLEN TAPIMAXDESTADDRESSSIZE
+
+#define MAX_CLASS_REGISTRY_PATH 100 // BUGBUG: sizeof(REGSTR_PATH_CLASS) + MAX_CLASS_NAME_LEN + 10 + breathing room
+
+#define INVALID_DEVICE ((HANDLE)0xFFFFFFFF)
+#define INVALID_PENDINGID 0xFFFFFFFF
+
+// 7/12/96 JosephJ. This was 8 seconds in Win95, OSR1, OSR2 and NT4.0 beta 1&2
+// Changed to 12 seconds because problems in Denmark where inter-ring delay
+// can be upto 9 seconds. NT bug
+#define TO_MS_RING_SEPARATION 12000 // 12 seconds space in between rings indicates a different call
+
+//****************************************************************************
+// Macros
+//****************************************************************************
+
+// Check for an error code
+//
+#define IS_TAPI_ERROR(err) (BOOL)(HIWORD(err) & 0x8000)
+
+// Validate Modem Service Provider's version
+//
+#define VALIDATE_VERSION(version) {if (version != MDMSPI_VERSION) \
+ return LINEERR_OPERATIONFAILED;}
+
+// Check the device type
+#define IS_NULL_MODEM(pLineDev) (pLineDev->bDeviceType == DT_NULL_MODEM)
+
+// Notify new call state, pass in pLineDev, dwCallState, and dwCallStateMode
+// Can only do when an htCall is valid!!!
+#define NEW_CALLSTATE(pLineDev,S,M) {pLineDev->dwCallState = S; \
+ pLineDev->dwCallStateMode = M; \
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, \
+ pLineDev->htCall, \
+ LINE_CALLSTATE, \
+ S, M, \
+ pLineDev->dwCurMediaModes);}
+
+#define INITCRITICALSECTION(x) InitializeCriticalSection(&x)
+#define ENTERCRITICALSECTION(x) EnterCriticalSection(&x)
+#define LEAVECRITICALSECTION(x) LeaveCriticalSection(&x)
+#define DELETECRITICALSECTION(x) DeleteCriticalSection(&x)
+
+//****************************************************************************
+// Private type definitions
+//****************************************************************************
+
+// Enumerated States of the line device
+//
+typedef enum DevStates {
+ DEVST_DISCONNECTED = 0,
+
+ DEVST_PORTLISTENINIT,
+ DEVST_PORTLISTENING,
+ DEVST_PORTLISTENOFFER,
+ DEVST_PORTLISTENANSWER,
+
+ DEVST_PORTSTARTPRETERMINAL,
+ DEVST_PORTPRETERMINAL,
+ DEVST_PORTCONNECTINIT,
+ DEVST_PORTCONNECTWAITFORLINEDIAL, // this is a resting state. ie. we sit here waiting for a lineDial.
+ DEVST_PORTCONNECTDIALTONEDETECT,
+ DEVST_PORTCONNECTDIAL,
+ DEVST_PORTCONNECTING,
+ DEVST_PORTPOSTTERMINAL,
+
+ DEVST_TALKDROPDIALING,
+ DEVST_MANUALDIALING,
+
+ DEVST_CONNECTED,
+ DEVST_DISCONNECTING
+} DEVSTATES;
+
+// Flags for the call attributes
+//
+#define CALL_ALLOCATED 0x00000001
+#define CALL_ACTIVE 0x00000002
+#define CALL_INBOUND 0x00000004
+
+// Unimodem Service provider settings
+//
+#define TERMINAL_NONE 0x00000000
+#define TERMINAL_PRE 0x00000001
+#define TERMINAL_POST 0x00000002
+#define MANUAL_DIAL 0x00000004
+#define LAUNCH_LIGHTS 0x00000008
+
+#define MIN_WAIT_BONG 0
+#define MAX_WAIT_BONG 60
+#define DEF_WAIT_BONG 8
+#define INC_WAIT_BONG 2
+
+// Device Setting Information
+//
+typedef struct tagDEVCFGHDR {
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD fdwSettings;
+} DEVCFGHDR;
+
+#define GETOPTIONS(pDevCfg) (pDevCfg->dfgHdr.fdwSettings & 0x0000FFFF)
+#define GETWAITBONG(pDevCfg) ((pDevCfg->dfgHdr.fdwSettings >> 16) & 0x0000FFFF)
+#define SETOPTIONS(pDevCfg, options) {pDevCfg->dfgHdr.fdwSettings = \
+ (pDevCfg->dfgHdr.fdwSettings&0xFFFF0000) | \
+ (options & 0x0000FFFF);}
+#define SETWAITBONG(pDevCfg, wait) {pDevCfg->dfgHdr.fdwSettings = \
+ (pDevCfg->dfgHdr.fdwSettings&0x0000FFFF) | \
+ ((wait << 16) & 0xFFFF0000);}
+
+#define MDMCFG_VERSION 0x00010003
+
+typedef struct tagDEVCFG {
+ DEVCFGHDR dfgHdr;
+ COMMCONFIG commconfig;
+} DEVCFG, *PDEVCFG, FAR* LPDEVCFG;
+
+// Device Class and Information
+//
+#define TAPILINE 0
+#define COMM 1
+#define COMMMODEM 2
+#define COMMMODEMPORTNAME 3
+#define NDIS 4
+#define MAX_SUPPORT_CLASS 5
+
+typedef struct tagGETIDINFO {
+ LPTSTR szClassName;
+ DWORD dwFormat;
+} GETIDINFO;
+
+extern GETIDINFO aGetID[MAX_SUPPORT_CLASS];
+
+// Pending operation type
+//
+typedef enum PendingOp {
+ INVALID_PENDINGOP = 0,
+
+ PENDING_LINEMAKECALL,
+ PENDING_LINEANSWER,
+ PENDING_LINEDROP,
+ PENDING_LINEDIAL
+} PENDINGOP;
+
+// Flags for resources
+//
+#define LINEDEVFLAGS_OUTOFSERVICE 0x00000001
+#define LINEDEVFLAGS_REMOVING 0x00000002
+#define LINEDEVFLAGS_REINIT 0x00000004
+
+// Line device data structure
+//
+typedef struct tagLineDev {
+ DWORD dwVersion; // Version stamp
+ struct tagLineDev *pNext; // pointer to next CB
+ CRITICAL_SECTION hSem; // critical section for this line
+
+ DWORD dwID; // Local device ID
+ DWORD dwPermanentLineID; // Permanent ID for this device
+ TCHAR szDeviceName[MAXDEVICENAME+1]; // device name
+ BYTE bDeviceType; // the modem type
+ HICON hIcon; // Device icon
+
+ PDEVCFG pDevCfg; // Device configuration
+ DWORD fdwResources; // Flags for various resources
+ DWORD dwDevCapFlags; // LINEDEVCAPSFLAGS (ie. DIALBILLING, DIALQUIET, DIALDIALTONE)
+ DWORD dwMaxDCERate; // Max DCE as stored in the Properties line of the registry
+ DWORD dwModemOptions; // dwModemOptions as stored in the Properties line of the registry
+ BOOL fPartialDialing; // TRUE if partial dialing using ";" is supported
+
+ BOOL InitStringsAreValid; // if LineSetDevConfig called, need to build new init string
+
+
+
+ DWORD dwBearerModes; // supported bearer modes
+ DWORD dwCurBearerModes; // The current media bearer modes. Plural because
+ // we keep track of PASSTHROUGH _and_ the real b-mode
+ // at the same time.
+
+ DWORD dwDefaultMediaModes; // Default supported media modes
+ DWORD dwMediaModes; // Current supported media modes
+ DWORD dwCurMediaModes; // The current media modes
+ DWORD dwDetMediaModes; // The current detection media modes
+
+ HANDLE hDevice; // Device handle
+ HTAPILINE htLine; // Tapi line handle
+ LINEEVENT lpfnEvent; // Line event callback function
+ DEVSTATES DevState; // intermediate TAPI device state
+ DWORD dwPendingID; // async pending ID
+ PENDINGOP dwPendingType; // pending operation
+ CHAR szAddress[MAXADDRESSLEN+1];
+ BOOL fTakeoverMode; // True if unimodem is in takover mode
+ DWORD dwDialOptions; // Options set in a lineMakeCall
+
+ DWORD dwCall; // Call attributes
+ HTAPICALL htCall; // TAPI call handle
+ DWORD dwCallState; // Current call state
+ DWORD dwCallStateMode; // Current call state mode
+ DWORD dwRingCount; // Count of the number of rings for an incoming call
+ DWORD dwRingTick; // TickCount for when the last ring occured on an incoming call
+
+ DWORD dwNegotiatedRate; // Negotiated BPS speed returned from VxD
+ DWORD dwAppSpecific; // Application specific
+
+ HANDLE hLights; // Lights thread handle
+
+ HTAPIDIALOGINSTANCE hDlgInst; // Dialog thread instance
+ DWORD fUIDlg; // current dialogs
+
+ TCHAR szDriverKey[MAX_CLASS_NAME_LEN+10]; // ex. "Modem\0000"
+
+ DWORD dwVxdPendingID; // async pending ID for VxD operations
+
+ //
+ // Mcx operations
+ //
+ HANDLE hModem; // Mcx modem handle
+ MCX_OUT McxOut; // Mcx operation request output info
+
+ HANDLE hSynchronizeEvent; // Event for synchronization between
+ // MdmAsyncThread and something else.
+ HANDLE DroppingEvent;
+
+ BOOL fUpdateDefaultCommConfig; // If set, update the default comm
+ // config the next time
+ // this line is opened, and
+ // clear this flag.
+
+ BOOL LineClosed;
+
+} LINEDEV, *PLINEDEV, FAR* LPLINEDEV;
+
+#define UMDM_VERSION 0x4D444D55
+#define ISLINEDEV(pLineDev) (pLineDev->dwVersion == UMDM_VERSION)
+
+#define UI_DLG_TALKDROP 0x00000001
+#define UI_DLG_MANUAL 0x00000002
+#define UI_DLG_TERMINAL 0x00000004
+#define START_UI_DLG(pLineDev, type) (pLineDev->fUIDlg |= type)
+#define STOP_UI_DLG(pLineDev, type) (pLineDev->fUIDlg &= (~type))
+#define IS_UI_DLG_UP(pLineDev, type) (pLineDev->fUIDlg & type)
+
+// Line device list
+//
+typedef struct tagMdmList {
+ PLINEDEV pList;
+ DWORD cModems;
+ CRITICAL_SECTION hSem;
+} MDMLIST, *PMDMLIST;
+
+// Default mask to MDM_ options
+//
+#define MDM_MASK (MDM_TONE_DIAL | MDM_BLIND_DIAL)
+
+typedef struct tagDevCfgDlgInfo {
+ DWORD dwType;
+ DWORD dwDevCaps;
+ DWORD dwOptions;
+ LPDEVCFG lpDevCfg;
+} DCDI, *PDCDI, FAR* LPDCDI;
+
+//****************************************************************************
+// General Utilities
+//****************************************************************************
+
+BOOL InitCBList (HINSTANCE hInstance);
+void DeinitCBList (HINSTANCE hInstance);
+PLINEDEV AllocateCB (UINT cbSize);
+DWORD AddCBToList (PLINEDEV pLineDev);
+DWORD DeleteCB (PLINEDEV pLineDev);
+PLINEDEV GetFirstCB ();
+PLINEDEV GetCBfromHandle (DWORD handle);
+PLINEDEV GetCBfromID (DWORD dwDeviceID);
+PLINEDEV GetCBfromDeviceHandle(DWORD hDevice);
+PLINEDEV GetCBfromName (LPTSTR pszName);
+void MdmInitTracing (void);
+void MdmDeinitTracing (void);
+void DisableStaleModems (void);
+
+#define CLAIM_LINEDEV(p) (ENTERCRITICALSECTION(p->hSem))
+#define RELEASE_LINEDEV(p) (LEAVECRITICALSECTION(p->hSem))
+
+DWORD NullifyLineDevice (PLINEDEV pLineDev);
+BOOL ValidateDevCfgClass (LPCTSTR lpszDeviceClass);
+LONG ValidateAddress (PLINEDEV pLineDev,
+ LPCTSTR lpszInAddress,
+ LPSTR lpszOutAddress);
+
+BOOL IsOriginateAddress (LPCSTR lpszAddress);
+
+DWORD APIENTRY MdmAsyncThread (HANDLE hStopEvent);
+DWORD MdmAsyncContinue(PLINEDEV pLineDev, DWORD dwStatus);
+
+DWORD InitializeMdmThreads();
+DWORD DeinitializeMdmThreads();
+
+DWORD InitializeMdmTimer();
+DWORD DeinitializeMdmTimer();
+DWORD APIENTRY MdmTimerThread(DWORD dwParam);
+
+DWORD LaunchModemLight (LPTSTR szModemName, HANDLE hModem,
+ LPHANDLE lphLight);
+DWORD TerminateModemLight (HANDLE hLight);
+void RefreshDefaultCommConfig (PLINEDEV pLineDev);
+
+//****************************************************************************
+// Modem SPI prototypes
+//****************************************************************************
+
+DWORD OpenModem(PLINEDEV pLineDev, LPBYTE lpComConfig, DWORD dwSize);
+DWORD CloseModem (PLINEDEV pLineDev);
+
+
+LONG DevlineOpen (PLINEDEV pLineDev);
+
+LONG DevlineDetectCall(PLINEDEV pLineDev);
+LONG DevlineMakeCall (PLINEDEV pLineDev);
+LONG DevlineDial (PLINEDEV pLineDev);
+LONG DevlineAnswer (PLINEDEV pLineDev);
+LONG DevlineDrop (PLINEDEV pLineDev, BOOL fWait);
+
+LONG DevlineClose (PLINEDEV pLineDev);
+
+
+
+
+#ifdef UNDER_CONSTRUCTION
+
+LONG NEAR PASCAL DevlineDisabled (PLINEDEV pLineDev);
+
+DWORD NEAR PASCAL MdmDeviceServiceChanged (UINT uEvent, LPARAM lParam);
+DWORD NEAR PASCAL MdmDeviceChangeNotify (UINT uEvent, LPSTR szDevice);
+DWORD NEAR PASCAL MdmDeviceChanged (UINT uEvent, LPARAM lParam);
+
+#endif // UNDER_CONSTRUCTION
+
+//****************************************************************************
+// User Interface thread
+//****************************************************************************
+
+DWORD CreateMdmDlgInstance (PLINEDEV pLineDev);
+DWORD DestroyMdmDlgInstance (PLINEDEV pLineDev);
+
+DWORD TalkDropDialog(PLINEDEV pLineDev);
+DWORD DestroyTalkDropDialog(PLINEDEV pLineDev);
+DWORD ManualDialog(PLINEDEV pLineDev);
+DWORD DestroyManualDialog(PLINEDEV pLineDev);
+DWORD TerminalDialog(PLINEDEV pLineDev);
+DWORD DestroyTerminalDialog(PLINEDEV pLineDev);
+
+//****************************************************************************
+// Interface to Unimodem VxD
+//****************************************************************************
+
+DWORD UnimodemInit(PLINEDEV);
+DWORD UnimodemMonitor(PLINEDEV, DWORD);
+DWORD UnimodemCancelMonitor (PLINEDEV, BOOL);
+DWORD UnimodemAnswer(PLINEDEV);
+DWORD UnimodemMonitorDisconnect (PLINEDEV);
+DWORD UnimodemCancelMonitorDisconnect (PLINEDEV);
+DWORD UnimodemHangup(PLINEDEV, BOOL);
+DWORD UnimodemGetCommConfig (PLINEDEV, LPCOMMCONFIG, LPDWORD);
+DWORD UnimodemSetCommConfig (PLINEDEV, LPCOMMCONFIG, DWORD);
+DWORD UnimodemSetPassthrough(PLINEDEV, DWORD);
+DWORD UnimodemGetNegotiatedRate(PLINEDEV, LPDWORD);
+
+DWORD
+UnimodemDial(
+ PLINEDEV pLineDev,
+ LPSTR szAddress,
+ DWORD DialOptions
+ );
+
+
+DWORD WINAPI
+UnimodemSetModemSettings(
+ PLINEDEV pLineDev,
+ LPMODEMSETTINGS lpModemSettings
+ );
+
+
+
+//****************************************************************************
+// Global Parameters
+//****************************************************************************
+
+extern DWORD gdwProviderID;
+extern HPROVIDER ghProvider;
+
+extern ASYNC_COMPLETION gfnCompletionCallback;
+extern LINEEVENT gfnLineCreateProc;
+
+extern TCHAR szNull[];
+extern CHAR szSemicolon[];
+extern TCHAR gszTSPFilename[];
+extern TCHAR cszDevicePrefix[];
+
+#endif //_MDMSPI_H_
diff --git a/private/unimodem/tapisp/unimdm.c b/private/unimodem/tapisp/unimdm.c
new file mode 100644
index 000000000..64a22fa08
--- /dev/null
+++ b/private/unimodem/tapisp/unimdm.c
@@ -0,0 +1,3399 @@
+//****************************************************************************
+//
+// Module: Unimdm.tsp
+// File: unimdm.c
+// Content: This file contains the moudle initialization.
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Tue 23-Feb-1993 14:08:25 -by- Viroon Touranachun [viroont]
+// Ported from TAPI's atsp
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include "rcids.h"
+
+//****************************************************************************
+// Global Variables
+//****************************************************************************
+
+HINSTANCE ghInstance = NULL; // The global module handle
+DWORD gdwProviderID;
+HPROVIDER ghProvider;
+
+// Asynchronous operation completion callback
+//
+ASYNC_COMPLETION gfnCompletionCallback = NULL;
+LINEEVENT gfnLineCreateProc = NULL;
+
+
+void SetPendingRequest(
+ PLINEDEV pLineDev,
+ DWORD dwRequestID,
+ DWORD dwRequestOp
+ );
+void ClearPendingRequest(
+ PLINEDEV pLineDev
+ );
+
+//****************************************************************************
+// Constant Parameters
+//****************************************************************************
+
+GETIDINFO aGetID[] = {{TEXT("tapi/line"), STRINGFORMAT_BINARY},
+ {TEXT("comm"), STRINGFORMAT_ASCII},
+ {TEXT("comm/datamodem"), STRINGFORMAT_BINARY},
+ {TEXT("comm/datamodem/portname"), STRINGFORMAT_ASCII},
+ {TEXT("ndis"), STRINGFORMAT_BINARY}};
+TCHAR g_szzClassList[] = {TEXT("tapi/line")TEXT("\0")
+ TEXT("comm")TEXT("\0")
+ TEXT("comm/datamodem")TEXT("\0")
+ TEXT("comm/datamodem/portname")TEXT("\0")
+ TEXT("ndis")TEXT("\0\0")};
+TCHAR g_szDeviceClass[] = TEXT("com");
+
+// Generic string
+//
+TCHAR szNull[] = TEXT("");
+CHAR szSemicolon[] = ";";
+CHAR szAttachedTo[] = "AttachedTo";
+
+//****************************************************************************
+//*********************** The Device ID Specific Calls************************
+//****************************************************************************
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetDevConfig(DWORD dwDeviceID,
+// LPVARSTRING lpDeviceConfig,
+// LPCSTR lpszDeviceClass)
+//
+// Functions: Get the modem configuration
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALDEVICECLASS if the device class in invalid
+// LINEERR_INVALPOINTER if the output buffer address is invalid
+// LINEERR_STRUCTURETOOSMALL if the buffer is too small
+// LINEERR_NODEVICE if the line ID is invalid
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetDevConfig(DWORD dwDeviceID,
+ LPVARSTRING lpDeviceConfig,
+ LPCTSTR lpszDeviceClass)
+{
+ PLINEDEV pLineDev=NULL;
+ LPBYTE lpCC;
+ DWORD cbSize;
+ DWORD dwRet;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineGetDevConfig");
+
+ TRACE3(IDEVENT_TSPFN_ENTER, IDFROM_TSPI_lineGetDevConfig, &dwDeviceID);
+
+ // Validate the requested device class
+ //
+ if (!ValidateDevCfgClass(lpszDeviceClass))
+ {
+ lRet = LINEERR_INVALDEVICECLASS;
+ goto end;
+ }
+
+ // Validate the buffer
+ //
+ if (lpDeviceConfig == NULL)
+ {
+ lRet = LINEERR_INVALPOINTER;
+ goto end;
+ }
+
+ if (lpDeviceConfig->dwTotalSize < sizeof(VARSTRING))
+ {
+ lRet = LINEERR_STRUCTURETOOSMALL;
+ goto end;
+ }
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ lRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+
+#ifdef DYNA_ADDREMOVE
+ // Fail if out-of-service
+ //
+ if (pLineDev->fdwResources&LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ lRet = LINEERR_RESOURCEUNAVAIL;
+ goto end;
+ }
+#endif // DYNA_ADDREMOVE
+
+ // Validate the buffer size
+ //
+ cbSize = pLineDev->pDevCfg->dfgHdr.dwSize;
+ lpDeviceConfig->dwUsedSize = sizeof(VARSTRING);
+ lpDeviceConfig->dwNeededSize = sizeof(VARSTRING) + cbSize;
+
+ if (lpDeviceConfig->dwTotalSize >= lpDeviceConfig->dwNeededSize)
+ {
+ // If the line is active, we need to get the current modem setting.
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ DWORD cb = pLineDev->pDevCfg->commconfig.dwSize;
+
+ // Set the modem configuration
+ //
+ UnimodemGetCommConfig(pLineDev,
+ &(pLineDev->pDevCfg->commconfig),
+ &cb);
+ };
+
+ // Fill with the default value
+ //
+ lpCC = (LPBYTE)(((LPBYTE)lpDeviceConfig) + sizeof(VARSTRING));
+ CopyMemory(lpCC, (LPBYTE)pLineDev->pDevCfg, cbSize);
+
+ lpDeviceConfig->dwStringFormat = STRINGFORMAT_BINARY;
+ lpDeviceConfig->dwStringSize = cbSize;
+ lpDeviceConfig->dwStringOffset = sizeof(VARSTRING);
+ lpDeviceConfig->dwUsedSize += cbSize;
+ };
+
+
+ lRet = ERROR_SUCCESS;
+
+
+end:
+
+ if (pLineDev) RELEASE_LINEDEV(pLineDev);
+
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetDevConfig,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineGetDevConfig", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetDevConfig(DWORD dwDeviceID,
+// LPVOID const lpDeviceConfig,
+// DWORD dwSize,
+// LPCSTR lpszDeviceClass)
+//
+// Functions: Set the modem configuration
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALDEVICECLASS if the device class in invalid
+// LINEERR_INVALPOINTER if the output buffer address is invalid
+// LINEERR_NODEVICE if the line ID is invalid
+// LINEERR_INVALPARAM if the buffer is invalid configuration
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineSetDevConfig(DWORD dwDeviceID,
+ LPVOID const lpDeviceConfig,
+ DWORD dwSize,
+ LPCTSTR lpszDeviceClass)
+{
+ PLINEDEV pLineDev;
+ PDEVCFG pDevCfg;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineSetDevConfig");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetDevConfig,
+ &dwDeviceID
+ );
+
+ // Validate the requested device class
+ //
+ if (!ValidateDevCfgClass(lpszDeviceClass))
+ {
+ lRet = LINEERR_INVALDEVICECLASS;
+ goto end;
+ }
+
+ // Validate the buffer, make sure it's dword aligned
+ //
+ if (lpDeviceConfig == NULL || ((DWORD)lpDeviceConfig & 3))
+ {
+ ASSERT(FALSE);
+ lRet = LINEERR_INVALPOINTER;
+ goto end;
+ }
+
+ if (dwSize < sizeof(DWORD)) {
+ lRet = LINEERR_INVALPARAM;
+ goto end;
+ }
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ lRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+
+ // Check the copied size
+ //
+ pDevCfg = pLineDev->pDevCfg;
+ if ((dwSize < pDevCfg->dfgHdr.dwSize) ||
+ (pDevCfg->dfgHdr.dwVersion != ((LPDEVCFG)lpDeviceConfig)->dfgHdr.dwVersion))
+ {
+ RELEASE_LINEDEV(pLineDev);
+ lRet = LINEERR_INVALPARAM;
+ goto end;
+ }
+
+ // Get the new settings
+ //
+ SETWAITBONG(pDevCfg, GETWAITBONG(((LPDEVCFG)lpDeviceConfig)));
+ SETOPTIONS(pDevCfg, GETOPTIONS(((LPDEVCFG)lpDeviceConfig)));
+
+ ASSERT(pDevCfg->commconfig.wVersion == ((LPDEVCFG)lpDeviceConfig)->commconfig.wVersion);
+ ASSERT(pDevCfg->commconfig.dwProviderSubType ==
+ ((LPDEVCFG)lpDeviceConfig)->commconfig.dwProviderSubType);
+ ASSERT(pDevCfg->commconfig.dwProviderSize ==
+ ((LPDEVCFG)lpDeviceConfig)->commconfig.dwProviderSize);
+
+ pDevCfg->commconfig.dcb = ((LPDEVCFG)lpDeviceConfig)->commconfig.dcb;
+ CopyMemory(((LPBYTE)&pDevCfg->commconfig)+pDevCfg->commconfig.dwProviderOffset,
+ ((LPBYTE)&((LPDEVCFG)lpDeviceConfig)->commconfig)+((LPDEVCFG)lpDeviceConfig)->commconfig.dwProviderOffset,
+ ((LPDEVCFG)lpDeviceConfig)->commconfig.dwProviderSize);
+
+ pLineDev->InitStringsAreValid=FALSE;
+
+#if 0 // ifdef'ed off because of bug win95b:21204. Don't pass down comm config when connected.
+ // If the line is active, we need to propagate the new setting to modem.
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ // Set the modem configuration
+ //
+ UnimodemSetCommConfig(pLineDev,
+ &(pDevCfg->commconfig),
+ pDevCfg->commconfig.dwSize);
+ };
+#endif // 0
+
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetDevConfig,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineSetDevConfig", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetDevCaps(DWORD dwDeviceID,
+// DWORD dwTSPIVersion,
+// DWORD dwExtVersion,
+// LPLINEDEVCAPS lpLineDevCaps)
+//
+// Functions: Get the line capibilities
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_NODEVICE if the device ID is invalid
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetDevCaps(DWORD dwDeviceID,
+ DWORD dwTSPIVersion,
+ DWORD dwExtVersion,
+ LPLINEDEVCAPS lpLineDevCaps)
+{
+ PLINEDEV pLineDev=NULL;
+ TCHAR lpszProviderInfo[80];
+ int cbProviderInfoLen,
+ cbLineNameLen,
+ cbDevSpecificLen,
+ cbDevClassLen,
+ cbAvailMem,
+#ifdef UNICODE
+ cbDeviceKeyLen,
+#endif // UNICODE
+ cbDWORDPad;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineGetDevCaps");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetDevCaps,
+ &dwDeviceID
+ );
+
+
+ // Check the version
+ //
+ VALIDATE_VERSION(dwTSPIVersion);
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ lRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+#ifdef DYNA_ADDREMOVE
+ // Fail if out-of-service
+ //
+ if (pLineDev->fdwResources&LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ lRet = LINEERR_RESOURCEUNAVAIL;
+ goto end;
+ }
+#endif // DYNA_ADDREMOVE
+
+
+ // Check to see how much memory we'll need.
+ //
+ cbProviderInfoLen = sizeof(TCHAR) * (LoadString(ghInstance,
+ ID_PROVIDER_INFO,
+ lpszProviderInfo,
+ sizeof(lpszProviderInfo)/sizeof(TCHAR))
+ + 1);
+ cbLineNameLen = sizeof(TCHAR) * (lstrlen(pLineDev->szDeviceName) + 1);
+
+ lpLineDevCaps->dwUsedSize = sizeof(LINEDEVCAPS);
+
+ cbAvailMem = (int) (lpLineDevCaps->dwTotalSize - lpLineDevCaps->dwUsedSize);
+
+ // Enter the size we ideally need.
+ lpLineDevCaps->dwNeededSize = cbProviderInfoLen + cbLineNameLen +
+ lpLineDevCaps->dwUsedSize;
+
+ // Copy in the provider info if it fits
+ if (cbAvailMem >= cbProviderInfoLen)
+ {
+ lstrcpy((LPTSTR)((LPBYTE)lpLineDevCaps + lpLineDevCaps->dwUsedSize),
+ lpszProviderInfo);
+ lpLineDevCaps->dwProviderInfoSize = cbProviderInfoLen;
+ lpLineDevCaps->dwProviderInfoOffset = lpLineDevCaps->dwUsedSize;
+ lpLineDevCaps->dwUsedSize += cbProviderInfoLen;
+ cbAvailMem -= cbProviderInfoLen;
+ }
+
+ // Copy the name if it fits
+ if (cbAvailMem >= cbLineNameLen)
+ {
+ lstrcpy((LPTSTR)((LPBYTE)lpLineDevCaps + lpLineDevCaps->dwUsedSize),
+ pLineDev->szDeviceName);
+ lpLineDevCaps->dwLineNameSize = cbLineNameLen;
+ lpLineDevCaps->dwLineNameOffset = lpLineDevCaps->dwUsedSize;
+ lpLineDevCaps->dwUsedSize += cbLineNameLen;
+ cbAvailMem -= cbLineNameLen;
+ }
+
+ lpLineDevCaps->dwPermanentLineID = MAKELONG(LOWORD(pLineDev->dwPermanentLineID),
+ LOWORD(gdwProviderID));
+ lpLineDevCaps->dwStringFormat = STRINGFORMAT_ASCII;
+
+ // Line address information
+ //
+ lpLineDevCaps->dwAddressModes = LINEADDRESSMODE_ADDRESSID;
+ lpLineDevCaps->dwNumAddresses = 1;
+
+ // Bearer mode & information
+ //
+ lpLineDevCaps->dwMaxRate = pLineDev->dwMaxDCERate;
+ //
+ lpLineDevCaps->dwBearerModes = pLineDev->dwBearerModes;
+
+ // Media mode
+ //
+ lpLineDevCaps->dwMediaModes = pLineDev->dwMediaModes;
+
+ // Tones & Digits
+ //
+ //lpLineDevCaps->dwGenerateToneModes = 0;
+ //lpLineDevCaps->dwGenerateToneMaxNumFreq = 0;
+ //lpLineDevCaps->dwGenerateDigitModes = 0;
+ //lpLineDevCaps->dwMonitorToneMaxNumFreq = 0;
+ //lpLineDevCaps->dwMonitorToneMaxNumEntries = 0;
+ //lpLineDevCaps->dwMonitorDigitModes = 0;
+ //lpLineDevCaps->dwGatherDigitsMinTimeout = 0;
+ //lpLineDevCaps->dwGatherDigitsMaxTimeout = 0;
+ //lpLineDevCaps->dwMedCtlDigitMaxListSize = 0;
+ //lpLineDevCaps->dwMedCtlMediaMaxListSize = 0;
+ //lpLineDevCaps->dwMedCtlToneMaxListSize = 0;
+ //lpLineDevCaps->dwMedCtlCallStateMaxListSize = 0;
+
+ // Line capabilities
+ //
+ // We can simulate wait-for-bong.
+ lpLineDevCaps->dwDevCapFlags = pLineDev->dwDevCapFlags |
+ LINEDEVCAPFLAGS_DIALBILLING |
+ LINEDEVCAPFLAGS_CLOSEDROP;
+ //lpLineDevCaps->dwAnswerMode = 0;
+ lpLineDevCaps->dwRingModes = 1;
+ //
+ lpLineDevCaps->dwMaxNumActiveCalls = 1;
+
+ // Line device state to be notified
+ //
+ lpLineDevCaps->dwLineStates = LINEDEVSTATE_CONNECTED |
+ LINEDEVSTATE_DISCONNECTED |
+ LINEDEVSTATE_OPEN |
+ LINEDEVSTATE_CLOSE |
+ LINEDEVSTATE_INSERVICE |
+ LINEDEVSTATE_OUTOFSERVICE |
+ LINEDEVSTATE_REMOVED |
+ LINEDEVSTATE_RINGING |
+ LINEDEVSTATE_REINIT;
+
+ // We do not support user-to-user information
+ //
+ //lpLineDevCaps->dwUUIAcceptSize = 0;
+ //lpLineDevCaps->dwUUIAnswerSize = 0;
+ //lpLineDevCaps->dwUUIMakeCallSize = 0;
+ //lpLineDevCaps->dwUUIDropSize = 0;
+ //lpLineDevCaps->dwUUISendUserUserInfoSize = 0;
+ //lpLineDevCaps->dwUUICallInfoSize = 0;
+
+ // We do not support dial parameters setting
+ //
+ //lpLineDevCaps->MinDialParams.dwDialPause = 0;
+ //lpLineDevCaps->MinDialParams.dwDialSpeed = 0;
+ //lpLineDevCaps->MinDialParams.dwDigitDuration = 0;
+ //lpLineDevCaps->MinDialParams.dwWaitForDialtone = 0;
+ //lpLineDevCaps->MaxDialParams.dwDialPause = 0;
+ //lpLineDevCaps->MaxDialParams.dwDialSpeed = 0;
+ //lpLineDevCaps->MaxDialParams.dwDigitDuration = 0;
+ //lpLineDevCaps->MaxDialParams.dwWaitForDialtone = 0;
+ //lpLineDevCaps->DefaultDialParams.dwDialPause = 0;
+ //lpLineDevCaps->DefaultDialParams.dwDialSpeed = 0;
+ //lpLineDevCaps->DefaultDialParams.dwDigitDuration = 0;
+ //lpLineDevCaps->DefaultDialParams.dwWaitForDialtone = 0;
+
+ // We do not support terminal settings
+ //
+ //lpLineDevCaps->dwNumTerminals = 0;
+ //lpLineDevCaps->dwTerminalCapsSize = 0;
+ //lpLineDevCaps->dwTerminalCapsOffset = 0;
+ //lpLineDevCaps->dwTerminalTextEntrySize = 0;
+ //lpLineDevCaps->dwTerminalTextSize = 0;
+ //lpLineDevCaps->dwTerminalTextOffset = 0;
+
+ lpLineDevCaps->dwLineFeatures = LINEFEATURE_MAKECALL;
+
+ // We will return this in the dev specific section:
+ // struct {
+ // DWORD dwContents; Set to 1 (indicates containing key)
+ // DWORD dwKeyOffset; Offset to key from start of this structure (8)
+ // BYTE rgby[...]; place containing null-terminated registry key.
+ // }
+
+ // Since we need to store a DWORD, we need to calculate how much padding we need
+ // to add so that we are DWORD aligned. Only add padding if necessary.
+ cbDWORDPad = lpLineDevCaps->dwUsedSize % sizeof(DWORD);
+ if (cbDWORDPad >= 0)
+ {
+ cbDWORDPad = sizeof(DWORD) - cbDWORDPad;
+ }
+
+#ifdef UNICODE
+ cbDeviceKeyLen = WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDriverKey,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL);
+
+ if (cbDeviceKeyLen == 0)
+ {
+ TSPPRINTF1("TSPI_lineGetDevCaps: WideCharToMultiByte() returned %d",
+ GetLastError());
+ }
+ else
+ {
+ cbDeviceKeyLen++;
+
+ cbDevSpecificLen = sizeof(DWORD) +
+ sizeof(DWORD) +
+ cbDeviceKeyLen;
+#else // UNICODE
+ cbDevSpecificLen = sizeof(DWORD) +
+ sizeof(DWORD) +
+ lstrlen(pLineDev->szDriverKey) + 1;
+#endif // UNICODE
+
+ lpLineDevCaps->dwNeededSize += cbDevSpecificLen + cbDWORDPad;
+
+ // Copy path if it fits
+ if (cbAvailMem >= cbDevSpecificLen + cbDWORDPad)
+ {
+ lpLineDevCaps->dwUsedSize += cbDWORDPad;
+ *(LPDWORD)((LPBYTE)lpLineDevCaps + lpLineDevCaps->dwUsedSize) = 1;
+ *(LPDWORD)((LPBYTE)lpLineDevCaps + lpLineDevCaps->dwUsedSize + sizeof(DWORD)) = 8;
+
+#ifdef UNICODE
+ WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDriverKey,
+ -1,
+ (LPSTR)((LPBYTE)lpLineDevCaps
+ + lpLineDevCaps->dwUsedSize
+ + sizeof(DWORD)
+ + sizeof(DWORD)),
+ cbDeviceKeyLen,
+ NULL,
+ NULL);
+#else // UNICODE
+ lstrcpy((LPSTR)lpLineDevCaps
+ + lpLineDevCaps->dwUsedSize
+ + sizeof(DWORD)
+ + sizeof(DWORD),
+ pLineDev->szDriverKey);
+#endif // UNICODE
+
+ lpLineDevCaps->dwDevSpecificSize = cbDevSpecificLen;
+ lpLineDevCaps->dwDevSpecificOffset = lpLineDevCaps->dwUsedSize;
+ lpLineDevCaps->dwUsedSize += cbDevSpecificLen;
+ cbAvailMem -= cbDevSpecificLen + cbDWORDPad;
+ }
+#ifdef UNICODE
+ }
+#endif // UNICODE
+
+ cbDevClassLen = sizeof(g_szzClassList);
+ lpLineDevCaps->dwNeededSize += cbDevClassLen;
+
+ // Copy device classes if it fits
+ if (cbAvailMem >= cbDevClassLen)
+ {
+ hmemcpy((LPBYTE)lpLineDevCaps + lpLineDevCaps->dwUsedSize,
+ g_szzClassList, cbDevClassLen);
+ lpLineDevCaps->dwDeviceClassesSize = cbDevClassLen;
+ lpLineDevCaps->dwDeviceClassesOffset= lpLineDevCaps->dwUsedSize;
+ lpLineDevCaps->dwUsedSize += cbDevClassLen;
+ cbAvailMem -= cbDevClassLen;
+ }
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ if (pLineDev) RELEASE_LINEDEV(pLineDev);
+
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetDevCaps,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineGetDevCaps", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetIcon(DWORD dwDeviceID,
+// LPCSTR lpszDeviceClass,
+// LPHICON lphIcon)
+//
+// Functions: Get the icon handle for the specific line
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_NODEVICE if the line ID is invalid
+// LINEERR_OPERATIONFAILED if the parameter is invalid
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetIcon(DWORD dwDeviceID,
+ LPCTSTR lpszDeviceClass,
+ LPHICON lphIcon)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineGetIcon");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetIcon,
+ &dwDeviceID
+ );
+
+ // Validate the buffer pointer
+ //
+ if (lphIcon == NULL)
+ {
+ goto end;
+ }
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ lRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+ // Have we loaded this icon?
+ //
+ if (pLineDev->hIcon == NULL)
+ {
+ int iIcon;
+
+ switch (pLineDev->bDeviceType)
+ {
+ case DT_NULL_MODEM: iIcon = IDI_NULL; break;
+ case DT_EXTERNAL_MODEM: iIcon = IDI_EXT_MDM; break;
+ case DT_INTERNAL_MODEM: iIcon = IDI_INT_MDM; break;
+ case DT_PCMCIA_MODEM: iIcon = IDI_PCM_MDM; break;
+ default: iIcon = -1; break;
+ };
+
+ // Nope! load one and save it
+ //
+ if (iIcon != -1)
+ {
+ pLineDev->hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(iIcon));
+ };
+ };
+
+ // Return this icon (even if NULL, return SUCCESS. tapi will provide
+ // a default icon if necessary)
+ //
+ *lphIcon = pLineDev->hIcon;
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetIcon,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineGetIcon", lRet);
+
+ return lRet;
+}
+
+
+
+//****************************************************************************
+//************************** The Line Specific Calls**************************
+//****************************************************************************
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineOpen(DWORD dwDeviceID,
+// HTAPILINE htLine,
+// LPHDRVLINE lphdLine,
+// DWORD dwTSPIVersion,
+// LINEEVENT lineEventProc)
+//
+// Functions: Associates the modem CB with the TAPI handle.
+//
+// Returns: ERROR_SUCCESS if a modem CB can be associated
+// LINEERR_NODEVICE if the device ID cannot be found
+//
+// History:
+// Mon 17-Apr-1995 14:45:00 -by- Viroon Touranachun [viroont]
+// Created.
+//
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineOpen(DWORD dwDeviceID,
+ HTAPILINE htLine,
+ LPHDRVLINE lphdLine,
+ DWORD dwTSPIVersion,
+ LINEEVENT lineEventProc)
+{
+ PLINEDEV pLineDev=NULL;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+
+ DBG_DDI_ENTER("TSPI_lineOpen");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineOpen,
+ &dwDeviceID
+ );
+
+
+ // Check the version
+ //
+ VALIDATE_VERSION(dwTSPIVersion);
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ lRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+
+#ifdef DYNA_ADDREMOVE
+ // Fail if out-of-service
+ //
+ if (pLineDev->fdwResources&LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ lRet = LINEERR_RESOURCEUNAVAIL;
+ goto end;
+ }
+#endif // DYNA_ADDREMOVE
+
+
+ // Update the line device
+ //
+ *lphdLine = (HDRVLINE)pLineDev;
+
+ if (TRACINGENABLED())
+ {
+ lineEventProc = traceSetEventProc(lineEventProc);
+ }
+
+#ifdef DEBUG
+ DebugSetEventProc(lineEventProc);
+ pLineDev->lpfnEvent = DebugEventProc;
+#else // DEBUG
+ pLineDev->lpfnEvent = lineEventProc;
+#endif // DEBUG
+
+ pLineDev->htLine = htLine;
+
+ // If we need to re-read the default comm config, we do this here.
+ if (pLineDev->fUpdateDefaultCommConfig)
+ {
+
+ DPRINTF("Updating DefaultCommConfig");
+ RefreshDefaultCommConfig(pLineDev);
+ pLineDev->fUpdateDefaultCommConfig = FALSE; // We set it to false
+ // regardless of whether
+ // the refresh succeeded
+ // or not.
+ }
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ if (pLineDev) {RELEASE_LINEDEV(pLineDev);}
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineOpen,
+ &dwDeviceID,
+ lRet
+ );
+ DBG_DDI_EXIT("TSPI_lineOpen", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetDefaultMediaDetection(HDRVLINE hdLine,
+// DWORD dwMediaModes)
+//
+// Functions: Enables the opened line to detect an inbound call.
+//
+// Returns: ERROR_SUCCESS if a modem CB can be associated
+// LINEERR_INVALIDHANDLE if the line handle is invalid
+// LINEERR_INVALMEDIAMODE if requested media modes not supported
+//
+// History:
+// Mon 17-Apr-1995 14:45:00 -by- Viroon Touranachun [viroont]
+// Created.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineSetDefaultMediaDetection(HDRVLINE hdLine,
+ DWORD dwMediaModes)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDL_ENTER("TSPI_lineSetDefaultMediaDetection");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetDefaultMediaDetection,
+ &hdLine
+ );
+
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ dwRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ // Check the requested modes. There must be only our media modes.
+ // In addition, don't allow INTERACTIVEVOICE to be used for listening.
+ //
+ if (dwMediaModes & ~(pLineDev->dwMediaModes & ~LINEMEDIAMODE_INTERACTIVEVOICE))
+ {
+ dwRet = LINEERR_INVALMEDIAMODE;
+ }
+ else
+ {
+ // If no detection and a detection is requested
+ //
+ if ((pLineDev->dwDetMediaModes == 0) && (dwMediaModes))
+ {
+ // Open the modem
+ //
+ if ((dwRet = DevlineOpen(pLineDev)) == ERROR_SUCCESS)
+ {
+ // Start listening to the port
+ //
+ if ((dwRet = DevlineDetectCall(pLineDev)) == ERROR_SUCCESS)
+ {
+ // The modem is now monitoring the call.
+ // Remember the media mode we are monitoring
+ //
+ pLineDev->dwDetMediaModes = dwMediaModes;
+ }
+ else
+ {
+ // We cannot monitor the call, close the modem
+ //
+ DevlineClose(pLineDev);
+ }
+ }
+ else
+ {
+ // Handle the case of LINEERR_ALLOCATED being returned from DevlineOpen,
+ // indicating there is an already open port.
+ //
+ if (LINEERR_ALLOCATED == dwRet)
+ {
+ // Just remember the detection media modes.
+ // return ERROR_SUCCESS because we will comeback to monitor the call
+ // when this call is deallocated.
+ //
+ pLineDev->dwDetMediaModes = dwMediaModes;
+ dwRet = ERROR_SUCCESS;
+ }
+ }
+ }
+ else
+ {
+ // we are stopping detection OR adjusting the detection media modes
+ //
+ pLineDev->dwDetMediaModes = dwMediaModes;
+
+ // If we are detecting and requested not to,
+ // just close the line if it isn't in use
+ //
+ if (pLineDev->dwDetMediaModes &&
+ dwMediaModes == 0 &&
+ (DEVST_PORTLISTENING == pLineDev->DevState ||
+ DEVST_PORTLISTENINIT == pLineDev->DevState))
+ {
+ // Close the modem
+ //
+ DevlineClose(pLineDev);
+
+#ifdef UNDER_CONSTRUCTION
+ // If we are out of service
+ //
+ if (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ // Clean up the control block
+ //
+ DevlineDisabled (pLineDev);
+ };
+#endif // UNDER_CONSTRUCTION
+ };
+
+ dwRet = ERROR_SUCCESS;
+ };
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetDefaultMediaDetection,
+ &hdLine,
+ dwRet
+ );
+ DBG_HDL_EXIT("TSPI_lineSetDefaultMediaDetection", dwRet);
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineConditionalMediaDetection(HDRVLINE hdLine,
+// DWORD dwMediaModes,
+// LPLINECALLPARAMS const lpCallParams)
+//
+// Functions: Determines whether the line supports the specified media modes
+// and call parameters.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALLINEHANDLE the line handle is invalid
+// LINEERR_INVALMEDIAMODE the media mode or the call parameter is
+// not supported
+// LINEERR_RESOURCEUNAVAIL the outbound call cannot be made
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineConditionalMediaDetection(HDRVLINE hdLine,
+ DWORD dwMediaModes,
+ LPLINECALLPARAMS const lpCallParams)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = ERROR_SUCCESS;
+
+ DBG_HDL_ENTER("TSPI_lineConditionalMediaDetection");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineConditionalMediaDetection,
+ &hdLine
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ dwRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ // Check the requested modes. There must be only our media modes.
+ //
+ if (dwMediaModes & ~pLineDev->dwMediaModes)
+ {
+ dwRet = LINEERR_INVALMEDIAMODE;
+ }
+ else
+ {
+ // Check the call paramaters
+ //
+ if ((lpCallParams->dwBearerMode & (~pLineDev->dwBearerModes)) ||
+ (lpCallParams->dwMediaMode & (~pLineDev->dwMediaModes)) ||
+ (lpCallParams->dwAddressMode & (~LINEADDRESSMODE_ADDRESSID)))
+ {
+ dwRet = LINEERR_INVALMEDIAMODE;
+ };
+ };
+
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // Check whether we can make an outbound call
+ //
+ if (pLineDev->dwCall & (CALL_ACTIVE | CALL_ALLOCATED))
+ {
+ dwRet = LINEERR_RESOURCEUNAVAIL;
+ };
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineConditionalMediaDetection,
+ &hdLine,
+ dwRet
+ );
+ DBG_HDL_EXIT("TSPI_lineConditionalMediaDetection", dwRet);
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetID(HDRVLINE hdLine,
+// DWORD dwAddressID,
+// HDRVCALL hdCall,
+// DWORD dwSelect,
+// LPVARSTRING lpDeviceID,
+// LPCSTR lpszDeviceClass,
+// HANDLE hTargetProcess)
+//
+// Functions: Get the line information based on the requested class
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALADDRESSID the address ID is invalid
+// LINEERR_INVALLINEHANDLE the line handle is invalid
+// LINEERR_INVALCALLHANDLE the call handle is invalid
+// LINEERR_OPERATIONFAILED the device class is not supported
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetID(HDRVLINE hdLine,
+ DWORD dwAddressID,
+ HDRVCALL hdCall,
+ DWORD dwSelect,
+ LPVARSTRING lpDeviceID,
+ LPCTSTR lpszDeviceClass,
+ HANDLE hTargetProcess)
+{
+ PLINEDEV pLineDev;
+ UINT cbPort;
+ UINT idClass;
+ DWORD dwRet = ERROR_SUCCESS;
+
+#ifdef DEBUG
+ if (dwSelect == LINECALLSELECT_LINE)
+ {
+ DBG_HDL_ENTER("TSPI_lineGetID");
+ }
+ else
+ {
+ if (dwSelect == LINECALLSELECT_CALL)
+ {
+ DBG_HDC_ENTER("TSPI_lineGetID");
+ }
+ else
+ {
+ DBG_ENTER("TSPI_lineGetID");
+ }
+ }
+#endif // DEBUG
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetID,
+ &hdLine
+ );
+
+
+ switch (dwSelect)
+ {
+ case LINECALLSELECT_ADDRESS:
+ if (dwAddressID != 0)
+ {
+ dwRet = LINEERR_INVALADDRESSID;
+ goto end;
+ }
+ // FALLTHROUGH
+
+ case LINECALLSELECT_LINE:
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ dwRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+ break;
+
+ case LINECALLSELECT_CALL:
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+ break;
+
+ default:
+ dwRet = LINEERR_OPERATIONFAILED;
+ goto end;
+ }
+
+
+#ifdef DYNA_ADDREMOVE
+ // Fail if out-of-service
+ //
+ if (pLineDev->fdwResources&LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ dwRet = LINEERR_RESOURCEUNAVAIL;
+ goto end;
+ }
+#endif // DYNA_ADDREMOVE
+
+
+ // Determine the device class
+ //
+ for (idClass = 0; idClass < MAX_SUPPORT_CLASS; idClass++)
+ {
+ if (lstrcmpi(lpszDeviceClass, aGetID[idClass].szClassName) == 0)
+ break;
+ };
+
+
+ // Determine the required size
+ //
+ switch (idClass)
+ {
+ case TAPILINE:
+ cbPort = sizeof(DWORD);
+ break;
+
+ case COMM:
+#ifdef UNICODE
+ cbPort = WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDeviceName,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL);
+ if (cbPort == 0)
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ cbPort = lstrlen(pLineDev->szDeviceName) + 1;
+#endif // UNICODE
+ break;
+
+ case COMMMODEM:
+#ifdef UNICODE
+ cbPort = WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDeviceName,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL) + sizeof(DWORD);
+ if (cbPort == 0)
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ cbPort = lstrlen(pLineDev->szDeviceName) + 1 + sizeof(DWORD);
+#endif // UNICODE
+ break;
+
+ case COMMMODEMPORTNAME:
+ {
+ HKEY hKey;
+ DWORD dwSize, dwType;
+
+ if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE,
+ pLineDev->szDriverKey,
+ &hKey))
+ {
+ // Check on the length of an ANSI return string.
+ if (ERROR_SUCCESS == RegQueryValueExA(hKey,
+ szAttachedTo,
+ NULL,
+ &dwType,
+ NULL,
+ &dwSize))
+ {
+ cbPort = dwSize;
+ }
+ else
+ {
+ // If we aren't attached to anything return a null string.
+ cbPort = 1;
+ }
+
+ RegCloseKey(hKey);
+ }
+ }
+ break;
+
+ case NDIS:
+#ifdef UNICODE
+ cbPort = WideCharToMultiByte(CP_ACP,
+ 0,
+ g_szDeviceClass,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL) + sizeof(DWORD);
+ if (cbPort == 0)
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ cbPort = sizeof(g_szDeviceClass) + sizeof(DWORD);
+#endif // UNICODE
+ break;
+
+ default:
+ dwRet = LINEERR_OPERATIONFAILED;
+ break;
+ };
+
+ // Calculate the require size
+ //
+ // lpDeviceID->dwUsedSize = sizeof(VARSTRING); // TAPI fills it in.
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // BUG! BUG! Do we need to check dwTotalSize?
+ // Tue 03-Oct-1995 09:23:01 -by- Viroon Touranachun [viroont]
+ //
+
+ // Return the structure information
+ //
+ lpDeviceID->dwNeededSize = sizeof(VARSTRING) + cbPort;
+ lpDeviceID->dwStringFormat = aGetID[idClass].dwFormat;
+ ASSERT(lpDeviceID->dwUsedSize == sizeof(VARSTRING));
+
+ // Check for the extra space for more information
+ //
+ if ((lpDeviceID->dwTotalSize - lpDeviceID->dwUsedSize) >=
+ cbPort)
+ {
+ // We have enough space to return valid information
+ //
+ lpDeviceID->dwStringSize = cbPort;
+ lpDeviceID->dwStringOffset = sizeof(VARSTRING);
+ lpDeviceID->dwUsedSize += cbPort;
+
+ // Return the useful information
+ //
+ switch (idClass)
+ {
+ // "tapi/line" returns the line device ID
+ //
+ case TAPILINE:
+ {
+ LPDWORD lpdwDeviceID;
+
+ lpdwDeviceID = (LPDWORD)(((LPBYTE)lpDeviceID) + sizeof(VARSTRING));
+ *lpdwDeviceID = pLineDev->dwID;
+ break;
+ }
+
+ // "comm" returns the modem name
+ //
+ case COMM:
+ {
+#ifdef UNICODE
+ if (0 ==
+ WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDeviceName,
+ -1,
+ (LPSTR)((LPBYTE)lpDeviceID + sizeof(VARSTRING)),
+ cbPort,
+ NULL,
+ NULL))
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ lstrcpyn(((LPSTR)lpDeviceID) + sizeof(VARSTRING),
+ pLineDev->szDeviceName, cbPort);
+#endif // UNICODE
+ break;
+ }
+
+ // "comm/datamodem" returns the Win32 comm handle (if any) and
+ // the modem name
+ //
+ case COMMMODEM:
+ {
+ LPHANDLE lphClientDevice;
+
+ // Duplicate a Win32 comm handle (for the caller process)
+ //
+ lphClientDevice = (LPHANDLE)
+ (((LPBYTE)lpDeviceID) + sizeof(VARSTRING));
+
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ HANDLE hDevice;
+ TCHAR szPort[MAXDEVICENAME+1];
+
+ // Initialize szPort to be "\\.\"
+ lstrcpy(szPort, cszDevicePrefix);
+
+ // Concatenate FriendlyName onto szPort to form "\\.\Modem Name"
+ lstrcat(szPort, pLineDev->szDeviceName);
+
+ hDevice = CreateFile(szPort,
+ GENERIC_WRITE | GENERIC_READ,
+ FILE_SHARE_WRITE | FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_FLAG_OVERLAPPED,
+ NULL);
+
+ if (hDevice != INVALID_HANDLE_VALUE)
+ {
+ if (!DuplicateHandle(GetCurrentProcess(),
+ hDevice,
+ hTargetProcess,
+ lphClientDevice,
+ 0L, FALSE,
+ DUPLICATE_SAME_ACCESS))
+ {
+ DPRINTF1("lineGetID DuplicateHandle() failed! (%d)",
+ GetLastError);
+ *lphClientDevice = NULL;
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+
+ CloseHandle(hDevice);
+ }
+ else
+ {
+ DPRINTF1("lineGetID CreateFile() failed! (%d)", GetLastError);
+ *lphClientDevice = NULL;
+ }
+ }
+ else
+ {
+ *lphClientDevice = NULL;
+ };
+
+ // Also return the modem name
+ //
+#ifdef UNICODE
+ if (ERROR_SUCCESS == dwRet &&
+ 0 == WideCharToMultiByte(CP_ACP,
+ 0,
+ pLineDev->szDeviceName,
+ -1,
+ (LPSTR)(lphClientDevice + 1),
+ cbPort - sizeof(DWORD),
+ NULL,
+ NULL))
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ lstrcpy((LPSTR)(lphClientDevice+1), pLineDev->szDeviceName);
+#endif // UNICODE
+ break;
+ }
+
+ // "comm/datamodem/portname" returns the name of the port the modem
+ // is attached to or the modem name itself if not attached to anything.
+ //
+ case COMMMODEMPORTNAME:
+ {
+ HKEY hKey;
+ DWORD dwSize, dwType;
+
+ if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE,
+ pLineDev->szDriverKey,
+ &hKey))
+ {
+ dwSize = cbPort;
+ // Check on the length of an ANSI return string.
+ if (ERROR_SUCCESS != RegQueryValueExA(
+ hKey,
+ szAttachedTo,
+ NULL,
+ &dwType,
+ (LPBYTE)lpDeviceID
+ + sizeof(VARSTRING),
+ &dwSize))
+ {
+ // If we aren't attached to anything return a null
+ // string.
+ *(LPSTR)((LPBYTE)lpDeviceID + sizeof(VARSTRING)) = 0;
+ }
+
+ RegCloseKey(hKey);
+ }
+ }
+ break;
+
+ // "ndis" returns the device class and handle which can be used by
+ // the NDIS device driver
+ //
+ case NDIS:
+ {
+ LPDWORD lpdwDeviceID;
+
+ // The NDIS device handle is ring_0 comm handle
+ //
+ lpdwDeviceID = (LPDWORD)(((LPBYTE)lpDeviceID) + sizeof(VARSTRING));
+
+ DPRINTF ("Someone wants NDIS class info. Return ring-3 comm handle.");
+
+ *lpdwDeviceID = (DWORD)(pLineDev->hDevice != INVALID_DEVICE ?
+ pLineDev->hDevice : NULL);
+
+ // Also returns the device class
+ //
+#ifdef UNICODE
+ if (0 == WideCharToMultiByte(CP_ACP,
+ 0,
+ g_szDeviceClass,
+ -1,
+ (LPSTR)(lpdwDeviceID + 1),
+ cbPort,
+ NULL,
+ NULL))
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+#else // UNICODE
+ lstrcpy((LPSTR)(lpdwDeviceID+1), g_szDeviceClass);
+#endif // UNICODE
+ break;
+ }
+ };
+ };
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetID,
+ &hdLine,
+ dwRet
+ );
+
+#ifdef DEBUG
+ if (dwSelect == LINECALLSELECT_LINE)
+ {
+ DBG_HDL_EXIT("TSPI_lineGetID", dwRet);
+ }
+ else
+ {
+ if (dwSelect == LINECALLSELECT_CALL)
+ {
+ DBG_HDC_EXIT("TSPI_lineGetID", dwRet);
+ }
+ else
+ {
+ DBG_EXIT_UL("TSPI_lineGetID", dwRet);
+ }
+ }
+#endif // DEBUG
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetLineDevStatus(HDRVLINE hdLine,
+// LPLINEDEVSTATUS lpLineDevStatus)
+//
+// Functions: Get the current state of the line device
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALLINEHANDLE if invalid line handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetLineDevStatus(HDRVLINE hdLine,
+ LPLINEDEVSTATUS lpLineDevStatus)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetLineDevStatus,
+ &hdLine
+ );
+
+ DBG_HDL_ENTER("TSPI_lineGetLineDevStatus");
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ lRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ // No device specifc portion
+ //
+ lpLineDevStatus->dwUsedSize = sizeof(LINEDEVSTATUS);
+ lpLineDevStatus->dwNeededSize = sizeof(LINEDEVSTATUS);
+
+ // Call information
+ //
+ //lpLineDevStatus->dwNumOnHoldCalls = 0;
+ //lpLineDevStatus->dwNumOnHoldPendCalls = 0;
+ //lpLineDevStatus->dwNumCallCompletions = 0;
+ //lpLineDevStatus->dwRingMode = 0;
+ //
+ if (pLineDev->dwCall & CALL_ACTIVE)
+ {
+ lpLineDevStatus->dwNumActiveCalls = 1;
+ lpLineDevStatus->dwLineFeatures = 0;
+ lpLineDevStatus->dwAvailableMediaModes = 0;
+ }
+ else
+ {
+ lpLineDevStatus->dwNumActiveCalls = 0;
+
+ if (pLineDev->dwCall & CALL_ALLOCATED)
+ {
+ lpLineDevStatus->dwLineFeatures = 0;
+ lpLineDevStatus->dwAvailableMediaModes = 0;
+ }
+ else
+ {
+ lpLineDevStatus->dwLineFeatures = LINEFEATURE_MAKECALL;
+ lpLineDevStatus->dwAvailableMediaModes = pLineDev->dwMediaModes;
+ };
+ };
+
+ // Line hardware information
+ //
+ lpLineDevStatus->dwSignalLevel = 0x0000FFFF;
+ lpLineDevStatus->dwBatteryLevel = 0x0000FFFF;
+ lpLineDevStatus->dwRoamMode = LINEROAMMODE_UNAVAIL;
+
+ // Always allow TAPI calls
+ //
+ lpLineDevStatus->dwDevStatusFlags = LINEDEVSTATUSFLAGS_CONNECTED;
+ if (!(pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE))
+ {
+ lpLineDevStatus->dwDevStatusFlags |= LINEDEVSTATUSFLAGS_INSERVICE;
+ };
+
+ // No terminal settings
+ //
+ //lpLineDevStatus->dwTerminalModesSize = 0;
+ //lpLineDevStatus->dwTerminalModesOffset = 0;
+
+ // No device specific
+ //
+ //lpLineDevStatus->dwDevSpecificSize = 0;
+ //lpLineDevStatus->dwDevSpecificOffset = 0;
+
+ //lpLineDevStatus->dwAppInfoSize = 0;
+ //lpLineDevStatus->dwAppInfoOffset = 0;
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetLineDevStatus,
+ &hdLine,
+ lRet
+ );
+
+ DBG_HDL_EXIT("TSPI_lineGetLineDevStatus", lRet);
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetNumAddressIDs(HDRVLINE hdLine,
+// LPDWORD lpNumAddressIDs)
+//
+// Functions: Get the number of addresses for the line handle
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALLINEHANDLE if invalid line handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetNumAddressIDs(HDRVLINE hdLine,
+ LPDWORD lpNumAddressIDs)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDL_ENTER("TSPI_lineGetNumAddressIDs");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetNumAddressIDs,
+ &hdLine
+ );
+
+ // Validate the line handle
+ //
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ lRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+ RELEASE_LINEDEV(pLineDev);
+
+ // We only support one address.
+ //
+ *lpNumAddressIDs = 1;
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetNumAddressIDs,
+ &hdLine,
+ lRet
+ );
+ DBG_HDL_EXIT("TSPI_lineGetNumAddressIDs", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetStatusMessages(HDRVLINE hdLine,
+// DWORD dwLineStates,
+// DWORD dwAddressStates)
+//
+// Functions: Sets the line notification mask
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALLINEHANDLE if invalid line handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineSetStatusMessages(HDRVLINE hdLine,
+ DWORD dwLineStates,
+ DWORD dwAddressStates)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDL_ENTER("TSPI_lineSetStatusMessages");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetStatusMessages,
+ &hdLine
+ );
+
+ // Validate the line handle
+ //
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ lRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ RELEASE_LINEDEV(pLineDev);
+
+ // BUG! BUG! we should record this settings and filter the notification
+ // based on this settings.
+ //
+ // Mon 14-Feb-1994 13:09:57 -by- Viroon Touranachun [viroont]
+ //
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ DBG_HDL_EXIT("TSPI_lineSetStatusMessages", lRet);
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetStatusMessages,
+ &hdLine,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineClose(HDRVLINE hdLine)
+//
+// Functions: Closes the line
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_OPERATIONFAILED if invalid line handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineClose(HDRVLINE hdLine)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED;
+
+ DBG_HDL_ENTER("TSPI_lineClose");
+
+ TRACE3(IDEVENT_TSPFN_ENTER, IDFROM_TSPI_lineClose, &hdLine);
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ goto end;
+ }
+
+ // Make sure that we do not leave anything open
+ //
+ DevlineClose(pLineDev);
+
+#ifdef UNDER_CONSTRUCTION
+ // If we are out of service, clean up and bail out
+ //
+ if (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ DevlineDisabled (pLineDev);
+ }
+ else
+#endif // UNDER_CONSTRUCTION
+ {
+ // Reinit the line device
+ //
+ NullifyLineDevice(pLineDev);
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet=ERROR_SUCCESS;
+
+end:
+
+ TRACE4(IDEVENT_TSPFN_EXIT, IDFROM_TSPI_lineClose, &hdLine, lRet);
+ DBG_HDL_EXIT("TSPI_lineClose", lRet);
+
+ return lRet;
+}
+
+//****************************************************************************
+//************************** The Call Specific Calls**************************
+//****************************************************************************
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineMakeCall(DRV_REQUESTID dwRequestID,
+// HDRVLINE hdLine,
+// HTAPICALL htCall,
+// LPHDRVCALL lphdCall,
+// LPCSTR lpszDestAddress,
+// DWORD dwCountryCode,
+// LPLINECALLPARAMS const lpCallParams)
+//
+// Functions: Sets up the outbound call and start dialing if the destination
+// number is provided
+//
+// Return: A positive pending ID number (dwRequestID) if successful
+// LINEERR_INVALLINEHANDLE An invalid line handle
+// LINEERR_CALLUNAVAIL No call is available for the line
+// LINEERR_INVALMEDIAMODE The requested mediamode is invalid
+// LINEERR_INVALBEARERMODE The requested bearer mode is invalid
+// LINEERR_OPERATIONFAILED The call cannot be made.
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineMakeCall(DRV_REQUESTID dwRequestID,
+ HDRVLINE hdLine,
+ HTAPICALL htCall,
+ LPHDRVCALL lphdCall,
+ LPCTSTR lpszDestAddress,
+ DWORD dwCountryCode,
+ LPLINECALLPARAMS const lpCallParams)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet=LINEERR_OPERATIONFAILED;
+ BOOL fDoTakeover = FALSE;
+
+ DBG_HDL_ENTER("TSPI_lineMakeCall");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineMakeCall,
+ &dwRequestID
+ );
+
+ // Validate the line handle
+ //
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ DBG_HDL_EXIT("TSPI_lineMakeCall", LINEERR_INVALLINEHANDLE);
+ dwRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ // See if we have a free call struct.
+ if (pLineDev->dwCall & CALL_ALLOCATED)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ DBG_HDL_EXIT("TSPI_lineMakeCall", LINEERR_CALLUNAVAIL);
+ dwRet = LINEERR_CALLUNAVAIL;
+ goto end;
+ };
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+
+ // If a line config is specified in the callparams struct,
+ // set it to the line
+ //
+ if (lpCallParams)
+ {
+ if (lpCallParams->dwDeviceConfigSize != 0)
+ {
+ // We will tolerate the failure if the line config in the callparams
+ // struct cannot be set.
+ //
+ TSPI_lineSetDevConfig(pLineDev->dwID,
+ (LPVOID)(((LPBYTE)lpCallParams)+lpCallParams->dwDeviceConfigOffset),
+ lpCallParams->dwDeviceConfigSize,
+ lpCallParams->dwDeviceClassSize == 0 ? szNull :
+ (LPTSTR)(((LPBYTE)lpCallParams)+lpCallParams->dwDeviceClassOffset));
+ };
+ };
+
+ // Set default dwDialOptions
+ pLineDev->dwDialOptions = pLineDev->dwModemOptions & MDM_MASK; // Get modem caps
+ pLineDev->dwDialOptions &= ((LPMODEMSETTINGS)&((LPCOMMCONFIG)&(pLineDev->pDevCfg
+ ->commconfig))->wcProviderData[0])->dwPreferredModemOptions;
+
+
+
+ // Examine LINECALLPARAMS, if present
+ if (lpCallParams)
+ {
+ // verify media mode
+#ifdef VOICEVIEW
+ if ((lpCallParams->dwMediaMode & ~pLineDev->dwMediaModes) ||
+ (lpCallParams->dwMediaMode == LINEMEDIAMODE_VOICEVIEW) )
+#else
+ if (lpCallParams->dwMediaMode & ~pLineDev->dwMediaModes)
+#endif // VOICEVIEW
+ {
+ RELEASE_LINEDEV(pLineDev);
+ DBG_HDL_EXIT("TSPI_lineMakeCall", LINEERR_INVALMEDIAMODE);
+ dwRet = LINEERR_INVALMEDIAMODE;
+ goto end;
+ }
+
+ // verify bearer mode
+ if ((~pLineDev->dwBearerModes) & lpCallParams->dwBearerMode)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ DBG_HDL_EXIT("TSPI_lineMakeCall", LINEERR_INVALBEARERMODE);
+ dwRet = LINEERR_INVALBEARERMODE;
+ goto end;
+ }
+ // Takeover via BEARERMODE_PASSTHROUGH?
+ if (lpCallParams->dwBearerMode & LINEBEARERMODE_PASSTHROUGH)
+ {
+ fDoTakeover = TRUE;
+ }
+ else
+ {
+ // We're not requested to do passthrough. Can we actually
+ // dial the media modes without passthrough? This is to
+ // prevent G3FAX from being used without passthrough...
+ // (We can only dial with DATAMODEM or INTERACTIVEVOICE)
+ if ((lpCallParams->dwMediaMode &
+ (LINEMEDIAMODE_DATAMODEM | LINEMEDIAMODE_INTERACTIVEVOICE)) == 0)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ DBG_HDL_EXIT("TSPI_lineMakeCall", LINEERR_INVALMEDIAMODE);
+ dwRet = LINEERR_INVALMEDIAMODE;
+ goto end;
+ }
+ }
+
+ pLineDev->dwCurBearerModes = lpCallParams->dwBearerMode;
+ pLineDev->dwCurMediaModes = lpCallParams->dwMediaMode;
+
+ if (!(lpCallParams->dwCallParamFlags & LINECALLPARAMFLAGS_IDLE))
+ {
+ // Turn on blind dialing
+ pLineDev->dwDialOptions |= MDM_BLIND_DIAL;
+ }
+
+ // BUGBUG: should preserve other fields of call params for call info
+ }
+ else
+ {
+ // set the standard defaults
+ // use INTERACTIVEVOICE if we can, else use DATAMODEM
+ if (pLineDev->dwMediaModes & LINEMEDIAMODE_INTERACTIVEVOICE)
+ {
+ pLineDev->dwCurMediaModes = LINEMEDIAMODE_INTERACTIVEVOICE;
+ }
+ else
+ {
+ ASSERT(pLineDev->dwMediaModes & LINEMEDIAMODE_DATAMODEM);
+ pLineDev->dwCurMediaModes = LINEMEDIAMODE_DATAMODEM;
+ }
+ pLineDev->dwCurBearerModes = pLineDev->dwBearerModes & ~LINEBEARERMODE_PASSTHROUGH;
+ }
+
+ // Do we have a phone number?
+ //
+ if (!fDoTakeover)
+ {
+ if (IS_NULL_MODEM(pLineDev) || (GETOPTIONS(pLineDev->pDevCfg) & MANUAL_DIAL))
+ {
+
+ if (IS_NULL_MODEM(pLineDev)) {
+
+ *pLineDev->szAddress = '\0';
+
+ } else {
+
+ dwRet = ValidateAddress(pLineDev, lpszDestAddress, pLineDev->szAddress);
+
+ if (ERROR_SUCCESS != dwRet) {
+
+ *pLineDev->szAddress = '\0';
+ }
+ }
+
+ // Turn on blind dialing if this is MANUAL_DIAL.
+ if (GETOPTIONS(pLineDev->pDevCfg) & MANUAL_DIAL)
+ {
+ pLineDev->dwDialOptions |= MDM_BLIND_DIAL;
+ }
+ }
+ else
+ {
+
+ if (lpszDestAddress != NULL) {
+ //
+ // Validate lpszDestAddress and get the processed form of it.
+ //
+ dwRet = ValidateAddress(pLineDev, lpszDestAddress, pLineDev->szAddress);
+
+ if (ERROR_SUCCESS != dwRet)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ DBG_HDL_EXIT("TSPI_lineMakeCall", dwRet);
+ goto end;
+ }
+
+ if (pLineDev->szAddress[0] == '\0') {
+ //
+ // If it is an empty string, I don't think we would expect dial tone
+ //
+ pLineDev->dwDialOptions |= MDM_BLIND_DIAL;
+ }
+
+ } else {
+ //
+ // if the lpszDestAddress was NULL then we just want to do a
+ // dialtone detection. We expect that lineDial will be called.
+ // Setting the szAddress to ";" will do this.
+ //
+ lstrcpyA(pLineDev->szAddress, szSemicolon);
+ }
+ }
+ }
+
+ // Record the call attributes
+ pLineDev->htCall = htCall;
+ pLineDev->dwCall = CALL_ALLOCATED;
+ pLineDev->dwCallState = LINECALLSTATE_UNKNOWN;
+ pLineDev->dwCallStateMode = 0;
+
+ *lphdCall = (HDRVCALL)pLineDev;
+
+ // We allow to make call to an already-opened line if the line is monitoring
+ // a call. Therefore, if the line is in use, try making a call. The make-call
+ // routine will return error if the state is not appropriate.
+ //
+ if (((dwRet = DevlineOpen(pLineDev)) == ERROR_SUCCESS) ||
+ (dwRet == LINEERR_ALLOCATED))
+ {
+ if (fDoTakeover)
+ {
+ if (pLineDev->DevState == DEVST_PORTLISTENING ||
+ pLineDev->DevState == DEVST_PORTLISTENINIT ||
+ pLineDev->DevState == DEVST_DISCONNECTED)
+ {
+ // do we go into passthrough now or later?
+ if (pLineDev->DevState == DEVST_PORTLISTENINIT)
+ {
+ // later
+ // 7/96 JosephJ: BUGBUG: why is dwPendingType not changed???
+ SetPendingRequest(
+ pLineDev,
+ dwRequestID,
+ pLineDev->dwPendingType
+ );
+ }
+ else
+ {
+ // now
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_ON);
+ pLineDev->DevState = DEVST_CONNECTED;
+ (*gfnCompletionCallback)(dwRequestID, 0L);
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_CONNECTED, 0);
+ }
+ pLineDev->fTakeoverMode = TRUE;
+ dwRet = dwRequestID;
+ }
+ else
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ }
+ }
+ else
+ {
+ // We can make a call here
+ SetPendingRequest(pLineDev, dwRequestID, PENDING_LINEMAKECALL);
+
+ if (((dwRet = DevlineMakeCall(pLineDev)) != ERROR_SUCCESS) &&
+ (IS_TAPI_ERROR(dwRet)))
+ {
+ DevlineClose(pLineDev);
+ }
+ }
+ };
+
+ // Check if an error occurs
+ //
+ if (IS_TAPI_ERROR(dwRet))
+ {
+ ClearPendingRequest(pLineDev);
+
+ // Deallocate the call from this line
+ //
+ pLineDev->htCall = NULL;
+ pLineDev->dwCall = 0;
+ *lphdCall = NULL;
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineMakeCall,
+ &dwRequestID,
+ dwRet
+ );
+
+
+ DBG_HDL_EXIT("TSPI_lineMakeCall", dwRet);
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineDial(DRV_REQUESTID dwRequestID,
+// HDRVCALL hdCall,
+// LPCSTR lpszDestAddress,
+// DWORD dwCountryCode)
+//
+// Functions: Dials numbers for the outbound call.
+//
+// Return: A positive pending ID number (dwRequestID) if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+// LINEERR_INVALCALLSTATE Cannot dial in the current call state
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineDial(DRV_REQUESTID dwRequestID,
+ HDRVCALL hdCall,
+ LPCTSTR lpszDestAddress,
+ DWORD dwCountryCode)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineDial");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineDial,
+ &dwRequestID
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // We can only be called when our devstate is DEVST_PORTCONNECTWAITFORLINEDIAL.
+ if (pLineDev->DevState != DEVST_PORTCONNECTWAITFORLINEDIAL)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ dwRet = LINEERR_INVALCALLSTATE;
+ goto end;
+ }
+
+ // Validate lpszDestAddress and get the processed form of it.
+ dwRet = ValidateAddress(pLineDev, lpszDestAddress, pLineDev->szAddress);
+ if (ERROR_SUCCESS != dwRet)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ goto end;
+ }
+
+ // Now we can dial the number
+ //
+ if ((dwRet = DevlineDial(pLineDev)) == ERROR_SUCCESS)
+ {
+ SetPendingRequest(pLineDev, dwRequestID, PENDING_LINEDIAL);
+ dwRet = dwRequestID;
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineDial", dwRet);
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineDial,
+ &dwRequestID,
+ dwRet
+ );
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineAccept(DRV_REQUESTID dwRequestID,
+// HDRVCALL hdCall,
+// LPCSTR lpsUserUserInfo,
+// DWORD dwSize)
+//
+// Functions: Accepts the offered inbound call
+//
+// Return: A positive pending ID number (dwRequestID) if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+// LINEERR_INVALCALLSTATE Cannot accept call in the current state
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineAccept(DRV_REQUESTID dwRequestID,
+ HDRVCALL hdCall,
+ LPCSTR lpsUserUserInfo,
+ DWORD dwSize)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineAccept");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineAccept,
+ &dwRequestID
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ if (LINECALLSTATE_OFFERING == pLineDev->dwCallState)
+ {
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_ACCEPTED, 0);
+ (*gfnCompletionCallback)(dwRequestID, 0L);
+ dwRet = dwRequestID;
+ }
+ else
+ {
+ dwRet = LINEERR_INVALCALLSTATE;
+ }
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineAccept", dwRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineAccept,
+ &dwRequestID,
+ dwRet
+ );
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineAnswer(HDRVCALL hdCall,
+// LPCSTR lpsUserUserInfo,
+// DWORD dwSize)
+//
+// Functions: Answers the offered/accepted inbound call.
+//
+// Return: A positive pending ID number (dwRequestID) if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+// LINEERR_INVALCALLSTATE Cannot answer call in the current state
+// LINEERR_OPERATIONUNAVAIL Invalid mediamode
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineAnswer(DRV_REQUESTID dwRequestID,
+ HDRVCALL hdCall,
+ LPCSTR lpsUserUserInfo,
+ DWORD dwSize)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = ERROR_SUCCESS;
+
+ DBG_HDC_ENTER("TSPI_lineAnswer");
+ //DPRINTF1("TSPI_lineAnswer(dwReq=0x%08lx)", dwRequestID);
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineAnswer,
+ &dwRequestID
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // Validate the line capabilties and call state
+ //
+ if (pLineDev->fTakeoverMode)
+ {
+ dwRet = LINEERR_OPERATIONUNAVAIL;
+ }
+ else
+ {
+ if (LINECALLSTATE_OFFERING != pLineDev->dwCallState &&
+ LINECALLSTATE_ACCEPTED != pLineDev->dwCallState)
+ {
+ dwRet = LINEERR_INVALCALLSTATE;
+ }
+ else
+ {
+ // We can only answer DATAMODEM calls
+ if ((pLineDev->dwCurMediaModes & LINEMEDIAMODE_DATAMODEM) == 0)
+ {
+ dwRet = LINEERR_OPERATIONUNAVAIL;
+ };
+ };
+ };
+
+ // If the call state and line capabilties are validated
+ //
+ if (dwRet == ERROR_SUCCESS)
+ {
+ // Answer the call
+ //
+ SetPendingRequest(pLineDev, dwRequestID, PENDING_LINEANSWER);
+
+ dwRet = DevlineAnswer(pLineDev);
+
+ // If we can answer the call
+ //
+ if (!IS_TAPI_ERROR(dwRet))
+ {
+ // Notify an async completion since we have grabbed the line
+ //
+ (*gfnCompletionCallback)(pLineDev->dwPendingID, 0L);
+
+ // if a lineAccept wasn't done, notify acceptance
+ if (LINECALLSTATE_OFFERING == pLineDev->dwCallState)
+ {
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_ACCEPTED, 0);
+ };
+ };
+ ClearPendingRequest(pLineDev);
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineAnswer", dwRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineAnswer,
+ &dwRequestID,
+ dwRet
+ );
+
+ //DPRINTF2("TSPI_lineAnswer(dwReq=0x%08lx, ret = 0x%08lx)", dwRequestID, dwRet);
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetCallStatus(HDRVCALL hdCall,
+// LPLINECALLSTATUS lpCallStatus)
+//
+// Functions: Get the current status of the call.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetCallStatus(HDRVCALL hdCall,
+ LPLINECALLSTATUS lpCallStatus)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineGetCallStatus");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetCallStatus,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // Current call information
+ //
+ lpCallStatus->dwCallState = pLineDev->dwCallState;
+ lpCallStatus->dwCallStateMode = pLineDev->dwCallStateMode;
+
+ // if we are in takeover mode, disallow all dwCallFeatures
+ //
+ if (!pLineDev->fTakeoverMode)
+ {
+ switch(lpCallStatus->dwCallState)
+ {
+ case LINECALLSTATE_OFFERING:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_ACCEPT |
+ LINECALLFEATURE_SETCALLPARAMS |
+ LINECALLFEATURE_DROP;
+ // We can only answer if a possible media mode is DATAMODEM.
+ if (pLineDev->dwCurMediaModes & LINEMEDIAMODE_DATAMODEM)
+ {
+ lpCallStatus->dwCallFeatures |= LINECALLFEATURE_ANSWER;
+ }
+ break;
+
+ case LINECALLSTATE_DIALTONE:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_DROP;
+ break;
+
+ case LINECALLSTATE_DIALING:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_DROP;
+ if (DEVST_PORTCONNECTWAITFORLINEDIAL == pLineDev->DevState)
+ {
+ lpCallStatus->dwCallFeatures |= LINECALLFEATURE_DIAL;
+ }
+ break;
+
+ case LINECALLSTATE_ACCEPTED:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_SETCALLPARAMS |
+ LINECALLFEATURE_DROP;
+ // We can only answer if a possible media mode is DATAMODEM.
+ if (pLineDev->dwCurMediaModes & LINEMEDIAMODE_DATAMODEM)
+ {
+ lpCallStatus->dwCallFeatures |= LINECALLFEATURE_ANSWER;
+ }
+ break;
+
+ case LINECALLSTATE_CONNECTED:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_SETCALLPARAMS |
+ LINECALLFEATURE_DROP;
+ break;
+
+ case LINECALLSTATE_UNKNOWN:
+ case LINECALLSTATE_PROCEEDING:
+ case LINECALLSTATE_DISCONNECTED:
+ lpCallStatus->dwCallFeatures = LINECALLFEATURE_DROP;
+ break;
+
+ case LINECALLSTATE_IDLE:
+ default:
+ lpCallStatus->dwCallFeatures = 0;
+ break;
+ };
+ }
+ else
+ {
+ // Make sure the call feature are all off
+ //
+ ASSERT(lpCallStatus->dwCallFeatures == 0);
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineGetCallStatus", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetCallStatus,
+ &hdCall,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetCallInfo(HDRVCALL hdCall,
+// LPLINECALLINFO lpCallInfo)
+//
+// Functions: Get the current call information
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetCallInfo(HDRVCALL hdCall,
+ LPLINECALLINFO lpCallInfo)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineGetCallInfo");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetCallInfo,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ //lpCallInfo->dwUsedSize = sizeof(LINECALLINFO);
+ //lpCallInfo->dwNeededSize = sizeof(LINECALLINFO);
+ ASSERT(lpCallInfo->dwNeededSize == sizeof(LINECALLINFO));
+
+ lpCallInfo->dwLineDeviceID = pLineDev->dwID;
+
+ lpCallInfo->dwAddressID = 0;
+ lpCallInfo->dwBearerMode = pLineDev->dwCurBearerModes;
+ lpCallInfo->dwRate = pLineDev->dwNegotiatedRate;
+ lpCallInfo->dwMediaMode = pLineDev->dwCurMediaModes;
+
+ lpCallInfo->dwAppSpecific = pLineDev->dwAppSpecific;
+
+ //lpCallInfo->dwCallID = 0;
+ //lpCallInfo->dwRelatedCallID = 0;
+ //lpCallInfo->dwCallParamFlags= 0;
+
+ lpCallInfo->dwCallStates = pLineDev->dwCall & CALL_INBOUND ?
+ (LINECALLSTATE_IDLE |
+ LINECALLSTATE_OFFERING |
+ LINECALLSTATE_ACCEPTED |
+ LINECALLSTATE_CONNECTED |
+ LINECALLSTATE_DISCONNECTED |
+ LINECALLSTATE_UNKNOWN) :
+ (LINECALLSTATE_IDLE |
+ LINECALLSTATE_DIALTONE |
+ LINECALLSTATE_DIALING |
+ LINECALLSTATE_PROCEEDING |
+ LINECALLSTATE_CONNECTED |
+ LINECALLSTATE_DISCONNECTED |
+ LINECALLSTATE_UNKNOWN);
+
+ //lpCallInfo->DialParams.dwDialPause = 0;
+ //lpCallInfo->DialParams.dwDialSpeed = 0;
+ //lpCallInfo->DialParams.dwDigitDuration = 0;
+ //lpCallInfo->DialParams.dwWaitForDialtone = 0;
+
+ lpCallInfo->dwOrigin = pLineDev->dwCall & CALL_INBOUND ?
+ LINECALLORIGIN_INBOUND :
+ LINECALLORIGIN_OUTBOUND;
+ lpCallInfo->dwReason = pLineDev->dwCall & CALL_INBOUND ?
+ LINECALLREASON_UNAVAIL :
+ LINECALLREASON_DIRECT;
+
+ //lpCallInfo->dwCompletionID = 0;
+ //lpCallInfo->dwCountryCode = 0;
+ //lpCallInfo->dwTrunk = 0;
+
+ lpCallInfo->dwCallerIDFlags = LINECALLPARTYID_UNAVAIL;
+ //lpCallInfo->dwCallerIDSize = 0;
+ //lpCallInfo->dwCallerIDOffset = 0;
+
+ //lpCallInfo->dwCallerIDNameSize = 0;
+ //lpCallInfo->dwCallerIDNameOffset = 0;
+
+ lpCallInfo->dwCalledIDFlags = LINECALLPARTYID_UNAVAIL;
+ //lpCallInfo->dwCalledIDSize = 0;
+ //lpCallInfo->dwCalledIDOffset = 0;
+ //lpCallInfo->dwCalledIDNameSize = 0;
+ //lpCallInfo->dwCalledIDNameOffset= 0;
+
+ lpCallInfo->dwConnectedIDFlags = LINECALLPARTYID_UNAVAIL;
+ //lpCallInfo->dwConnectedIDSize = 0;
+ //lpCallInfo->dwConnectedIDOffset = 0;
+ //lpCallInfo->dwConnectedIDNameSize = 0;
+ //lpCallInfo->dwConnectedIDNameOffset = 0;
+
+ lpCallInfo->dwRedirectionIDFlags = LINECALLPARTYID_UNAVAIL;
+ //lpCallInfo->dwRedirectionIDSize = 0;
+ //lpCallInfo->dwRedirectionIDOffset = 0;
+ //lpCallInfo->dwRedirectionIDNameSize = 0;
+ //lpCallInfo->dwRedirectionIDNameOffset = 0;
+
+ lpCallInfo->dwRedirectingIDFlags = LINECALLPARTYID_UNAVAIL;
+ //lpCallInfo->dwRedirectingIDSize = 0;
+ //lpCallInfo->dwRedirectingIDOffset = 0;
+ //lpCallInfo->dwRedirectingIDNameSize = 0;
+ //lpCallInfo->dwRedirectingIDNameOffset = 0;
+
+ //lpCallInfo->dwDisplaySize = 0;
+ //lpCallInfo->dwDisplayOffset = 0;
+
+ //lpCallInfo->dwUserUserInfoSize = 0;
+ //lpCallInfo->dwUserUserInfoOffset = 0;
+
+ //lpCallInfo->dwHighLevelCompSize = 0;
+ //lpCallInfo->dwHighLevelCompOffset = 0;
+
+ //lpCallInfo->dwLowLevelCompSize = 0;
+ //lpCallInfo->dwLowLevelCompOffset = 0;
+
+ //lpCallInfo->dwChargingInfoSize = 0;
+ //lpCallInfo->dwChargingInfoOffset = 0;
+
+ //lpCallInfo->dwTerminalModesSize = 0;
+ //lpCallInfo->dwTerminalModesOffset = 0;
+
+ //lpCallInfo->dwDevSpecificSize = 0;
+ //lpCallInfo->dwDevSpecificOffset = 0;
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineGetCallInfo", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetCallInfo,
+ &hdCall,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetCallAddressID(HDRVCALL hdCall,
+// LPDWORD lpdwAddressID)
+//
+// Functions: get the address ID for the call
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetCallAddressID(HDRVCALL hdCall,
+ LPDWORD lpdwAddressID)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineGetCallAddressID");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetCallAddressID,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // There is but a single address where a call may exist.
+ //
+ *lpdwAddressID = 0;
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineGetCallAddressID", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetCallAddressID,
+ &hdCall,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineDrop(DRV_REQUESTID dwRequestID,
+// HDRVCALL hdCall,
+// LPCSTR lpsUserUserInfo,
+// DWORD dwSize)
+//
+// Functions: Transition a call to the DISCONNECTED state.
+//
+// Return: A positive pending ID number (dwRequestID) if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineDrop(DRV_REQUESTID dwRequestID,
+ HDRVCALL hdCall,
+ LPCSTR lpsUserUserInfo,
+ DWORD dwSize)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet=LINEERR_OPERATIONFAILED;
+
+ DBG_HDC_ENTER("TSPI_lineDrop");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineDrop,
+ &dwRequestID
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet= LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ if (pLineDev->fTakeoverMode)
+ {
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_OFF);
+
+ pLineDev->fTakeoverMode = FALSE;
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+ (*gfnCompletionCallback)(dwRequestID, 0L);
+ dwRet = dwRequestID;
+ }
+ else
+ {
+ if (DEVST_DISCONNECTING == pLineDev->DevState) {
+
+ TSPPRINTF("LineDrop called more than once");
+
+ (*gfnCompletionCallback)(dwRequestID, 0L);
+ dwRet = dwRequestID;
+
+ } else {
+
+ // Disconnect the line
+ //
+ SetPendingRequest(pLineDev, dwRequestID, PENDING_LINEDROP);
+
+ if ((dwRet = DevlineDrop(pLineDev, FALSE)) != ERROR_SUCCESS)
+ {
+ ClearPendingRequest(pLineDev);
+ }
+ else
+ {
+ dwRet = dwRequestID;
+ }
+ }
+ }
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineDrop,
+ &dwRequestID,
+ dwRet
+ );
+ DBG_HDC_EXIT("TSPI_lineDrop", dwRet);
+
+ return dwRet;
+}
+
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineCloseCall(HDRVCALL hdCall)
+//
+// Functions: Terminates the call.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineCloseCall(HDRVCALL hdCall)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = ERROR_SUCCESS;
+
+ DBG_HDC_ENTER("TSPI_lineCloseCall");
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineCloseCall,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ dwRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // Turn off takeover mode
+ //
+ if (pLineDev->fTakeoverMode)
+ {
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_OFF);
+
+ pLineDev->fTakeoverMode = FALSE;
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ }
+ else
+ {
+ // If the line is not disconnected, drop the line synchronously
+ //
+ if (pLineDev->DevState != DEVST_DISCONNECTED)
+ {
+ DevlineDrop(pLineDev, TRUE);
+ pLineDev->DevState = DEVST_DISCONNECTED;
+ };
+ };
+
+ //
+ // kill lights if it is running
+ //
+ if (pLineDev->hLights != NULL) {
+
+ TerminateModemLight(pLineDev->hLights);
+ pLineDev->hLights = NULL;
+ }
+
+
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_IDLE, 0);
+
+ // At this point, the call has already been dropped,
+ // so we only need to deallocate it.
+ //
+ pLineDev->htCall = NULL;
+ pLineDev->dwCall = 0L;
+ pLineDev->dwNegotiatedRate = 0L;
+
+ // If we need to detect the line, reopen and listen to the line
+ if ((pLineDev->dwDetMediaModes) && !(pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE))
+ {
+ if ((dwRet = DevlineDetectCall(pLineDev)) != ERROR_SUCCESS) {
+
+ //
+ // init failed
+ //
+ //ASSERT(0);
+ DPRINTF("***ASSERTION FAILED**** (init failed)");
+
+ pLineDev->LineClosed=TRUE;
+
+ //
+ // tell the app
+ //
+ (*pLineDev->lpfnEvent)(pLineDev->htLine, NULL, LINE_CLOSE,
+ 0L, 0L, 0L);
+ }
+
+ }
+ else
+ {
+ // No need to detect the line, just close it.
+ //
+ DevlineClose(pLineDev);
+
+#ifdef UNDER_CONSTRUCTION
+ // If we are out of service, clean up and bail out
+ //
+ if (pLineDev->fdwResources & LINEDEVFLAGS_OUTOFSERVICE)
+ {
+ DevlineDisabled(pLineDev);
+ };
+#endif //UNDER_CONSTRUCTION
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineCloseCall", dwRet);
+
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineCloseCall,
+ &hdCall,
+ dwRet
+ );
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetMediaMode(HDRVCALL hdCall,
+// DWORD dwMediaMode)
+//
+// Functions: Set the mediamode for the call.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+// LINEERR_INVALMEDIAMODE An invalid media mode
+//****************************************************************************
+LONG TSPIAPI TSPI_lineSetMediaMode(HDRVCALL hdCall,
+ DWORD dwMediaMode)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineSetMediaMode");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetMediaMode,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ // Check the requested modes. There must be only our media modes
+ //
+ if (dwMediaMode & ~pLineDev->dwMediaModes)
+ {
+ lRet = LINEERR_INVALMEDIAMODE;
+ }
+ else
+ {
+ // If the specifed media mode is not equal to the current media mode
+ //
+ if (pLineDev->dwCurMediaModes != dwMediaMode)
+ {
+ // Set it and notify the media mode change
+ //
+ pLineDev->dwCurMediaModes = dwMediaMode;
+ (*(pLineDev->lpfnEvent))(pLineDev->htLine, pLineDev->htCall,
+ LINE_CALLINFO, LINECALLINFOSTATE_MEDIAMODE,
+ 0, 0);
+ };
+ lRet = ERROR_SUCCESS;
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineSetMediaMode", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetMediaMode,
+ &hdCall,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetAppSpecific()
+//
+// Functions: Set the application specific value for the call.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineSetAppSpecific(HDRVCALL hdCall,
+ DWORD dwAppSpecific)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineSetAppSpecific");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetAppSpecific,
+ &hdCall
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ pLineDev->dwAppSpecific = dwAppSpecific;
+ (*(pLineDev->lpfnEvent))(pLineDev->htLine, pLineDev->htCall,
+ LINE_CALLINFO, LINECALLINFOSTATE_APPSPECIFIC,
+ 0, 0);
+
+ RELEASE_LINEDEV(pLineDev);
+
+ lRet = ERROR_SUCCESS;
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineSetAppSpecific", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetAppSpecific,
+ &hdCall,
+ lRet
+ );
+ return lRet;
+}
+
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineSetCallParams()
+//
+// Functions: Set the call parameters.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALCALLHANDLE An invalid call handle
+// LINEERR_INVALMEDIAMODE An invalid media mode
+// LINEERR_INVALCALLSTATE Call params can't be set in this state
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineSetCallParams(DRV_REQUESTID dwRequestID,
+ HDRVCALL hdCall,
+ DWORD dwBearerMode,
+ DWORD dwMinRate,
+ DWORD dwMaxRate,
+ LPLINEDIALPARAMS const lpDialParams)
+{
+ PLINEDEV pLineDev;
+ LONG lRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDC_ENTER("TSPI_lineSetCallParams");
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineSetCallParams,
+ &dwRequestID
+ );
+
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdCall)) == NULL)
+ {
+ lRet = LINEERR_INVALCALLHANDLE;
+ goto end;
+ }
+
+ if (LINECALLSTATE_OFFERING != pLineDev->dwCallState &&
+ LINECALLSTATE_ACCEPTED != pLineDev->dwCallState &&
+ LINECALLSTATE_CONNECTED != pLineDev->dwCallState)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ lRet = LINEERR_INVALCALLSTATE;
+ goto end;
+ }
+
+ // verify bearer mode
+ if ((~pLineDev->dwBearerModes) & dwBearerMode)
+ {
+ RELEASE_LINEDEV(pLineDev);
+ lRet = LINEERR_INVALBEARERMODE;
+ goto end;
+ }
+
+
+ // Check bearermode for passthrough
+ if (dwBearerMode & LINEBEARERMODE_PASSTHROUGH)
+ {
+ // are we not already in passthrough?
+ if (!(pLineDev->dwCurBearerModes & LINEBEARERMODE_PASSTHROUGH))
+ {
+ // we need to switch into passthrough
+ pLineDev->dwCurBearerModes = LINEBEARERMODE_PASSTHROUGH;
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_ON);
+ pLineDev->fTakeoverMode = TRUE;
+ pLineDev->DevState = DEVST_CONNECTED;
+ if (LINECALLSTATE_CONNECTED != pLineDev->dwCallState)
+ {
+ NEW_CALLSTATE(pLineDev, LINECALLSTATE_CONNECTED, 0);
+ }
+ }
+ }
+ else
+ {
+ // are we already in passthrough?
+ if (pLineDev->dwCurBearerModes & LINEBEARERMODE_PASSTHROUGH)
+ {
+ // we need to switch out of passthrough
+
+ UnimodemSetPassthrough(pLineDev, PASSTHROUGH_OFF_BUT_CONNECTED);
+ pLineDev->fTakeoverMode = FALSE;
+
+ if (pLineDev->DevState == DEVST_CONNECTED) {
+
+ //
+ // Start monitoring the remote disconnection here
+ //
+ UnimodemMonitorDisconnect(pLineDev);
+ }
+
+
+ }
+
+ pLineDev->dwCurBearerModes = dwBearerMode;
+ }
+
+ RELEASE_LINEDEV(pLineDev);
+ (*gfnCompletionCallback)(dwRequestID, 0L);
+ lRet = dwRequestID;
+
+end:
+
+ DBG_HDC_EXIT("TSPI_lineSetCallParams", lRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineSetCallParams,
+ &dwRequestID,
+ lRet
+ );
+
+ return lRet;
+}
+
+//****************************************************************************
+//************************ The Address Specific Calls*************************
+//****************************************************************************
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetAddressCaps(DWORD dwDeviceID,
+// DWORD dwAddressID,
+// DWORD dwTSPIVersion,
+// DWORD dwExtVersion,
+// LPLINEADDRESSCAPS lpAddressCaps)
+//
+// Functions: Get the capabilities of the specified address.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_NODEVICE An invalid device id
+// LINEERR_INVALADDRESSID An invalid address id for the line
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetAddressCaps(DWORD dwDeviceID,
+ DWORD dwAddressID,
+ DWORD dwTSPIVersion,
+ DWORD dwExtVersion,
+ LPLINEADDRESSCAPS lpAddressCaps)
+
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_DDI_ENTER("TSPI_lineGetAddressCaps");
+
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetAddressCaps,
+ &dwDeviceID
+ );
+
+ // Validate the version number
+ //
+ VALIDATE_VERSION(dwTSPIVersion);
+
+ // Validate the device ID
+ //
+ if ((pLineDev = GetCBfromID(dwDeviceID)) == NULL)
+ {
+ dwRet = LINEERR_NODEVICE;
+ goto end;
+ }
+
+ // Validate the address ID
+ //
+ if(dwAddressID != 0)
+ {
+ dwRet = LINEERR_INVALADDRESSID;
+ }
+ else
+ {
+ // Check to see if we have enough memory in the structure.
+ //
+ //lpAddressCaps->dwAddressSize = 0;
+ //lpAddressCaps->dwAddressOffset = 0;
+
+ // Other device attributes
+ //
+ //lpAddressCaps->dwDevSpecificSize = 0;
+ //lpAddressCaps->dwDevSpecificOffset = 0;
+ //
+ lpAddressCaps->dwLineDeviceID = dwDeviceID;
+
+ lpAddressCaps->dwAddressSharing = LINEADDRESSSHARING_PRIVATE;
+ //lpAddressCaps->dwAddressStates = 0;
+ lpAddressCaps->dwCallInfoStates = LINECALLINFOSTATE_APPSPECIFIC | LINECALLINFOSTATE_MEDIAMODE;
+ lpAddressCaps->dwCallerIDFlags = LINECALLPARTYID_UNAVAIL;
+ lpAddressCaps->dwCalledIDFlags = LINECALLPARTYID_UNAVAIL;
+ lpAddressCaps->dwConnectedIDFlags = LINECALLPARTYID_UNAVAIL;
+ lpAddressCaps->dwRedirectionIDFlags = LINECALLPARTYID_UNAVAIL;
+ lpAddressCaps->dwRedirectingIDFlags = LINECALLPARTYID_UNAVAIL;
+
+ lpAddressCaps->dwCallStates = LINECALLSTATE_IDLE |
+ LINECALLSTATE_OFFERING |
+ LINECALLSTATE_ACCEPTED |
+ LINECALLSTATE_DIALTONE |
+ LINECALLSTATE_DIALING |
+ LINECALLSTATE_CONNECTED |
+ LINECALLSTATE_PROCEEDING |
+ LINECALLSTATE_DISCONNECTED |
+ LINECALLSTATE_UNKNOWN;
+
+ lpAddressCaps->dwDialToneModes = LINEDIALTONEMODE_UNAVAIL;
+ lpAddressCaps->dwBusyModes = LINEBUSYMODE_UNAVAIL;
+
+ lpAddressCaps->dwSpecialInfo = LINESPECIALINFO_UNAVAIL;
+
+ lpAddressCaps->dwDisconnectModes = LINEDISCONNECTMODE_UNAVAIL |
+ LINEDISCONNECTMODE_NORMAL |
+ LINEDISCONNECTMODE_BUSY |
+ LINEDISCONNECTMODE_NODIALTONE |
+ LINEDISCONNECTMODE_NOANSWER;
+
+ lpAddressCaps->dwMaxNumActiveCalls = 1;
+ //lpAddressCaps->dwMaxNumOnHoldCalls = 0;
+ //lpAddressCaps->dwMaxNumOnHoldPendingCalls = 0;
+ //lpAddressCaps->dwMaxNumConference = 0;
+ //lpAddressCaps->dwMaxNumTransConf = 0;
+
+ // dwAddrCapFlags
+ if (!IS_NULL_MODEM(pLineDev))
+ {
+ lpAddressCaps->dwAddrCapFlags = LINEADDRCAPFLAGS_DIALED;
+ }
+ if (pLineDev->fPartialDialing)
+ {
+ lpAddressCaps->dwAddrCapFlags |= LINEADDRCAPFLAGS_PARTIALDIAL;
+ }
+
+ lpAddressCaps->dwCallFeatures = LINECALLFEATURE_ANSWER |
+ LINECALLFEATURE_ACCEPT |
+ LINECALLFEATURE_SETCALLPARAMS |
+ LINECALLFEATURE_DIAL |
+ LINECALLFEATURE_DROP;
+
+ //lpAddressCaps->dwRemoveFromConfCaps = 0;
+ //lpAddressCaps->dwRemoveFromConfState = 0;
+ //lpAddressCaps->dwTransferModes = 0;
+ //lpAddressCaps->dwParkModes = 0;
+
+ //lpAddressCaps->dwForwardModes = 0;
+ //lpAddressCaps->dwMaxForwardEntries = 0;
+ //lpAddressCaps->dwMaxSpecificEntries = 0;
+ //lpAddressCaps->dwMinFwdNumRings = 0;
+ //lpAddressCaps->dwMaxFwdNumRings = 0;
+
+ //lpAddressCaps->dwMaxCallCompletions = 0;
+ //lpAddressCaps->dwCallCompletionConds = 0;
+ //lpAddressCaps->dwCallCompletionModes = 0;
+
+ //lpAddressCaps->dwNumCompletionMessages = 0;
+ //lpAddressCaps->dwCompletionMsgTextEntrySize = 0;
+ //lpAddressCaps->dwCompletionMsgTextSize = 0;
+ //lpAddressCaps->dwCompletionMsgTextOffset = 0;
+
+ lpAddressCaps->dwAddressFeatures = LINEADDRFEATURE_MAKECALL;
+
+ //lpAddressCaps->dwPredictiveAutoTransferStates = 0;
+ //lpAddressCaps->dwAgentStates = 0;
+ //lpAddressCaps->dwNextAgentStates = 0;
+ //lpAddressCaps->dwMaxNumAgentEntries = 0;
+
+ //lpAddressCaps->dwNumCallTreatments = 0;
+ //lpAddressCaps->dwCallTreatmentListSize = 0;
+ //lpAddressCaps->dwCallTreatmentListOffset = 0;
+
+ lpAddressCaps->dwUsedSize = sizeof(LINEADDRESSCAPS);
+ lpAddressCaps->dwNeededSize = lpAddressCaps->dwUsedSize +
+ sizeof(LINEADDRESSCAPS);
+
+ if (lpAddressCaps->dwTotalSize >= lpAddressCaps->dwNeededSize)
+ {
+ lpAddressCaps->dwUsedSize += sizeof(g_szzClassList);
+ lpAddressCaps->dwDeviceClassesSize = sizeof(g_szzClassList);
+ lpAddressCaps->dwDeviceClassesOffset= sizeof(LINEADDRESSCAPS);
+ hmemcpy((LPBYTE)(lpAddressCaps+1), g_szzClassList,
+ sizeof(g_szzClassList));
+ }
+ else
+ {
+ lpAddressCaps->dwDeviceClassesSize = 0;
+ lpAddressCaps->dwDeviceClassesOffset= 0;
+ };
+
+ //lpAddressCaps->dwMaxCallDataSize = 0;
+ //lpAddressCaps->dwCallFeatures2 = 0;
+ //lpAddressCaps->dwMaxNoAnswerTimeout= 0;
+ //lpAddressCaps->dwConnectedModes = 0;
+ //lpAddressCaps->dwOfferingModes = 0;
+
+ lpAddressCaps->dwAvailableMediaModes = pLineDev->dwMediaModes;
+
+ dwRet = ERROR_SUCCESS;
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_DDI_EXIT("TSPI_lineGetAddressCaps", dwRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetAddressCaps,
+ &dwDeviceID,
+ dwRet
+ );
+
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TSPI_lineGetAddressStatus(HDRVLINE hdLine,
+// DWORD dwAddressID,
+// LPLINEADDRESSSTATUS lpAddressStatus)
+//
+// Functions: Get the current status of the specified address for the line.
+//
+// Return: ERROR_SUCCESS if successful
+// LINEERR_INVALLINEHANDLE An invalid line handle
+// LINEERR_INVALADDRESSID An invalid address id for the line
+//****************************************************************************
+
+LONG TSPIAPI TSPI_lineGetAddressStatus(HDRVLINE hdLine,
+ DWORD dwAddressID,
+ LPLINEADDRESSSTATUS lpAddressStatus)
+{
+ PLINEDEV pLineDev;
+ DWORD dwRet = LINEERR_OPERATIONFAILED; // assume failure
+
+ DBG_HDL_ENTER("TSPI_lineGetAddressStatus");
+ TRACE3(
+ IDEVENT_TSPFN_ENTER,
+ IDFROM_TSPI_lineGetAddressStatus,
+ &hdLine
+ );
+
+ // Validate the line handle
+ //
+ if ((pLineDev = GetCBfromHandle ((DWORD)hdLine)) == NULL)
+ {
+ dwRet = LINEERR_INVALLINEHANDLE;
+ goto end;
+ }
+
+ // Validate the address ID
+ //
+ if (dwAddressID != 0)
+ {
+ dwRet = LINEERR_INVALADDRESSID;
+ }
+ else
+ {
+ //lpAddressStatus->dwUsedSize = sizeof(LINEADDRESSSTATUS);
+ //lpAddressStatus->dwNeededSize = sizeof(LINEADDRESSSTATUS);
+ ASSERT(lpAddressStatus->dwNeededSize == sizeof(LINEADDRESSSTATUS));
+
+ if (pLineDev->dwCall & CALL_ACTIVE)
+ {
+ lpAddressStatus->dwNumInUse = 1;
+ lpAddressStatus->dwNumActiveCalls = (pLineDev->dwCallState != LINECALLSTATE_IDLE) ?
+ 1 : 0;
+ }
+ else
+ {
+ lpAddressStatus->dwNumInUse = 0;
+ lpAddressStatus->dwNumActiveCalls = 0;
+ };
+
+ lpAddressStatus->dwAddressFeatures = (pLineDev->dwCall & CALL_ALLOCATED) ?
+ 0 : LINEADDRFEATURE_MAKECALL;
+
+ //lpAddressStatus->dwNumOnHoldCalls = 0;
+ //lpAddressStatus->dwNumOnHoldPendCalls = 0;
+ //lpAddressStatus->dwNumRingsNoAnswer = 0;
+
+ //lpAddressStatus->dwForwardNumEntries = 0;
+ //lpAddressStatus->dwForwardSize = 0;
+ //lpAddressStatus->dwForwardOffset = 0;
+
+ //lpAddressStatus->dwTerminalModesSize = 0;
+ //lpAddressStatus->dwTerminalModesOffset= 0;
+
+ //lpAddressStatus->dwDevSpecificSize = 0;
+ //lpAddressStatus->dwDevSpecificOffset = 0;
+
+ dwRet=ERROR_SUCCESS;
+ };
+
+ // Release the modem CB
+ //
+ RELEASE_LINEDEV(pLineDev);
+
+end:
+
+ DBG_HDL_EXIT("TSPI_lineGetAddressStatus", dwRet);
+ TRACE4(
+ IDEVENT_TSPFN_EXIT,
+ IDFROM_TSPI_lineGetAddressStatus,
+ &hdLine,
+ dwRet
+ );
+
+ return dwRet;
+}
+
+void SetPendingRequest(
+ PLINEDEV pLineDev,
+ DWORD dwRequestID,
+ DWORD dwRequestOp
+ )
+{
+ ASSERT(pLineDev->dwPendingID == INVALID_PENDINGID);
+ ASSERT(pLineDev->dwPendingType == INVALID_PENDINGOP);
+ pLineDev->dwPendingID = dwRequestID;
+ pLineDev->dwPendingType = dwRequestOp;
+}
+
+
+void ClearPendingRequest(
+ PLINEDEV pLineDev
+ )
+{
+ pLineDev->dwPendingID = INVALID_PENDINGID;
+ pLineDev->dwPendingType = INVALID_PENDINGOP;
+}
diff --git a/private/unimodem/tapisp/unimdm.def b/private/unimodem/tapisp/unimdm.def
new file mode 100644
index 000000000..90893cdce
--- /dev/null
+++ b/private/unimodem/tapisp/unimdm.def
@@ -0,0 +1,147 @@
+;******************************************************************************
+; module-definition file for generic -- used by LINK.EXE
+;******************************************************************************
+
+LIBRARY UNIMDM ; application's module name
+PROTMODE
+
+;******************************************************************************
+;CODE can be moved in memory and discarded/reloaded
+;******************************************************************************
+
+CODE PRELOAD FIXED
+
+;******************************************************************************
+;DATA must be MULTIPLE if program can be invoked more than once
+;******************************************************************************
+
+DATA PRELOAD FIXED
+
+;******************************************************************************
+; All functions that will be called by any Windows routine
+; MUST be exported.
+;******************************************************************************
+
+EXPORTS
+ TSPI_lineAccept @500
+; TSPI_lineAddToConference @501
+ TSPI_lineAnswer @502
+; TSPI_lineBlindTransfer @503
+ TSPI_lineClose @504
+ TSPI_lineCloseCall @505
+; TSPI_lineCompleteCall @506
+; TSPI_lineCompleteTransfer @507
+ TSPI_lineConditionalMediaDetection @508
+; TSPI_lineConfigDialog @509
+; TSPI_lineDevSpecific @510
+; TSPI_lineDevSpecificFeature @511
+ TSPI_lineDial @512
+ TSPI_lineDrop @513
+; TSPI_lineForward @514
+; TSPI_lineGatherDigits @515
+; TSPI_lineGenerateDigits @516
+; TSPI_lineGenerateTone @517
+ TSPI_lineGetAddressCaps @518
+; TSPI_lineGetAddressID @519
+ TSPI_lineGetAddressStatus @520
+ TSPI_lineGetCallAddressID @521
+ TSPI_lineGetCallInfo @522
+ TSPI_lineGetCallStatus @523
+ TSPI_lineGetDevCaps @524
+ TSPI_lineGetDevConfig @525
+; TSPI_lineGetExtensionID @526
+ TSPI_lineGetIcon @527
+ TSPI_lineGetID @528
+ TSPI_lineGetLineDevStatus @529
+ TSPI_lineGetNumAddressIDs @530
+; TSPI_lineHold @531
+ TSPI_lineMakeCall @532
+; TSPI_lineMonitorDigits @533
+; TSPI_lineMonitorMedia @534
+; TSPI_lineMonitorTones @535
+; TSPI_lineNegotiateExtVersion @536
+ TSPI_lineNegotiateTSPIVersion @537
+ TSPI_lineOpen @538
+; TSPI_linePark @539
+; TSPI_linePickup @540
+; TSPI_linePrepareAddToConference @541
+; TSPI_lineRedirect @542
+; TSPI_lineRemoveFromConference @543
+; TSPI_lineSecureCall @544
+; TSPI_lineSelectExtVersion @545
+; TSPI_lineSendUserUserInfo @546
+ TSPI_lineSetAppSpecific @547
+ TSPI_lineSetCallParams @548
+ TSPI_lineSetDefaultMediaDetection @549
+ TSPI_lineSetDevConfig @550
+; TSPI_lineSetMediaControl @551
+ TSPI_lineSetMediaMode @552
+ TSPI_lineSetStatusMessages @553
+; TSPI_lineSetTerminal @554
+; TSPI_lineSetupConference @555
+; TSPI_lineSetupTransfer @556
+; TSPI_lineSwapHold @557
+; TSPI_lineUncompleteCall @558
+; TSPI_lineUnhold @559
+; TSPI_lineUnpark @560
+
+; TSPI_phoneClose @561
+; TSPI_phoneConfigDialog @562
+; TSPI_phoneDevSpecific @563
+; TSPI_phoneGetButtonInfo @564
+; TSPI_phoneGetData @565
+; TSPI_phoneGetDevCaps @566
+; TSPI_phoneGetDisplay @567
+; TSPI_phoneGetExtensionID @568
+; TSPI_phoneGetGain @569
+; TSPI_phoneGetHookSwitch @570
+; TSPI_phoneGetIcon @571
+; TSPI_phoneGetID @572
+; TSPI_phoneGetLamp @573
+; TSPI_phoneGetRing @574
+; TSPI_phoneGetStatus @575
+; TSPI_phoneGetVolume @576
+; TSPI_phoneNegotiateExtVersion @577
+; TSPI_phoneNegotiateTSPIVersion @578
+; TSPI_phoneOpen @579
+; TSPI_phoneSelectExtVersion @580
+; TSPI_phoneSetButtonInfo @581
+; TSPI_phoneSetData @582
+; TSPI_phoneSetDisplay @583
+; TSPI_phoneSetGain @584
+; TSPI_phoneSetHookSwitch @585
+; TSPI_phoneSetLamp @586
+; TSPI_phoneSetRing @587
+; TSPI_phoneSetStatusMessages @588
+; TSPI_phoneSetVolume @589
+
+ TSPI_providerConfig @590
+ TSPI_providerInit @591
+ TSPI_providerInstall @592
+ TSPI_providerRemove @593
+ TSPI_providerShutdown @594
+ TSPI_providerEnumDevices @595
+; TSPI_lineDropOnClose @596
+; TSPI_lineDropNoOwner @597
+ TSPI_providerCreateLineDevice @598
+; TSPI_providerCreatePhoneDevice @599
+; TSPI_lineSetCurrentLocation @600
+; TSPI_lineConfigDialogEdit @601
+; TSPI_lineReleaseUserUserInfo @602
+
+; TSPI_lineSetCallData @603
+; TSPI_lineSetCallQualityOfService @604
+; TSPI_lineSetCallTreatment @605
+; TSPI_lineSetLineDevStatus @606
+ TSPI_providerFreeDialogInstance @607
+ TSPI_providerGenericDialogData @608
+ TSPI_providerUIIdentify @609
+
+ TUISPI_lineConfigDialog @610
+ TUISPI_lineConfigDialogEdit @611
+; TUISPI_phoneConfigDialog @612
+ TUISPI_providerConfig @613
+ TUISPI_providerGenericDialog @614
+ TUISPI_providerGenericDialogData @615
+ TUISPI_providerInstall @616
+ TUISPI_providerRemove @617
diff --git a/private/unimodem/tapisp/unimdm.h b/private/unimodem/tapisp/unimdm.h
new file mode 100644
index 000000000..8255dd56e
--- /dev/null
+++ b/private/unimodem/tapisp/unimdm.h
@@ -0,0 +1,182 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: unimdm.h
+// Content: This file contains the declaration for RnaDLL
+//
+// Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+//
+// History:
+// Mon 27-Jun-1994 10:10:00 -by- Nick Manson [t-nickm]
+// Wed 15-Jun-1994 10:41:00 -by- Nick Manson [t-nickm]
+// Fri 30-Jul-1993 10:30:39 -by- Viroon Touranachun [viroont]
+//
+//****************************************************************************
+
+#ifndef _UNIMDM_H_
+#define _UNIMDM_H_
+
+#if DBG > 0
+#define DEBUG
+#endif // DBG
+
+#define UNICODE
+
+//****************************************************************************
+// Global Include File
+//****************************************************************************
+
+// #define USE_SERVICECONTROLLER
+
+#ifndef USE_SERVICECONTROLLER
+# include <nt.h>
+# include <ntrtl.h>
+# include <nturtl.h>
+# ifdef ASSERT
+# undef ASSERT
+# endif // ASSERT
+#endif // USE_SERVICECONTROLLER
+
+#include <windows.h> // also includes windowsx.h
+#include <windowsx.h>
+#ifndef MAXDWORD
+#define MAXDWORD MAXULONG
+#if (MAXDWORD!=0xffffffff)
+# error "MAXDWORD!=0xffffffff"
+#endif
+#endif // MAXDWORD
+
+// Public registry defines, in particular REGSTR_PATH_SETUP
+#include <regstr.h>
+
+// Dynamic add/remove of devices.
+// BUG BUG -- this needs to be consolodated with the code currently
+// #ifdef UNDER_CONSTRUCTION
+#define DYNA_ADDREMOVE
+
+#include <tapi.h>
+#include <tspi.h>
+
+//****************************************************************************
+// NT Build patched
+//****************************************************************************
+
+#include <modem.h>
+#include <mcx16.h>
+#include "mcxioctl.h"
+
+#include "debug.h"
+#include "tracing.h"
+
+/* Utility Macros */
+
+// GTC_* macros -- these handle GetTickCount rollover
+// AleB(A,B) == "A<=B"
+// DELTA(Start, End) == "End-Start"
+// AequalsBplusC(A,B,C) == "A=B+C"
+// MAX_DELTA -- all real time differences are expected to be smaller than
+// this.
+
+#define GTC_MASK 0xFFFFFFFFL // Make it smaller to simulate faster rollover
+#define GTC_MAXDELTA (GTC_MASK>>1)
+
+#ifndef TEST_GTC
+
+// The real stuff...
+
+# if (GTC_MASK!=0xFFFFFFFF)
+# error "GTC_MASK must be 0xFFFFFFFF in the real GTC_MACROS!"
+# endif
+# define GETTICKCOUNT() GetTickCount()
+
+# define GTC_AleB(_A,_B) \
+ ((DWORD)(((_A)<=(_B)) \
+ ? (((_B)-(_A))<=GTC_MAXDELTA) \
+ : (((_A)-(_B))>GTC_MAXDELTA)))
+# define GTC_DELTA(_Start, _End) \
+ ((DWORD) (((_End)>=(_Start)) \
+ ? ((_End)-(_Start)) \
+ : (1L+(_End)+(GTC_MASK-(_Start)))))
+# define GTC_AequalsBplusC(_A,_B,_C) \
+ (((_A)=((_B)+(_C))),(_A)?(_A):((_A)=1))
+
+#else // TEST_GTC
+
+// This version calls functions in debug.c which spew debug on rollover
+
+# define GETTICKCOUNT() (GetTickCount()&GTC_MASK)
+BOOL GTC_AleB(DWORD dwA, DWORD dwB);
+DWORD GTC_DELTA(DWORD dwStart, DWORD dwEnd);
+# define GTC_AequalsBplusC(_A,_B,_C) \
+ fnGTC_AequalsBplusC(&(_A),_B,_C)
+void fnGTC_AequalsBplusC(LPDWORD lpdwA, DWORD dwB, DWORD dwC);
+
+#endif // TEST_GTC
+
+#define szUNIMODEM_REG_PATH REGSTR_PATH_SETUP TEXT("\\Unimodem")
+
+/* Timer Functions */
+DWORD SetMdmTimer (DWORD dwCompletionKey,
+ LPOVERLAPPED lpOverlapped,
+ DWORD dwTime);
+BOOL KillMdmTimer (DWORD dwCompletionKey,
+ LPOVERLAPPED lpOverlapped);
+
+/* Overlapped Pool Structure and Functions */
+
+typedef struct tagOverNode {
+ OVERLAPPED overlapped;
+ DWORD Type;
+ DWORD dwToken;
+ DWORD dwRefCount;
+ DWORD CommEvent;
+ TRACEINSTDATA Tracedata;
+ struct tagOverNode *lpNext;
+} OVERNODE, *LPOVERNODE;
+
+#define OVERNODE_TYPE_READWRITE 1
+#define OVERNODE_TYPE_COMMEVENT 2
+#define OVERNODE_TYPE_TIMEOUT 3
+#define OVERNODE_TYPE_WORKITEM 4
+
+#define SET_OVERNODE_TYPE(_x, _type) { ((LPOVERNODE)(_x))->Type=(_type); }
+
+// When Calling PostQueuedCompletionStatus with a NULL lpOverlapped structure,
+// we use the dwBytesWritten field to encode the notification type, and,
+// if tracing is enabled, to encode the GetTickCount() at the time of calling
+// the function. Since both values have to share a DWORD, we right-shift
+// GetTickCount and or-in the type.
+//
+#define CP_BYTES_WRITTEN(_type) \
+ (TRACINGENABLED()?((GetTickCount()<<4)|(_type)):(_type))
+
+#define CP_TYPE(_cbTransferred) \
+ ((_cbTransferred)&0xf)
+
+#define CP_TICKCOUNT(_cbTransferred) \
+ ((_cbTransferred)>>4)
+
+// Type CP_TYPE_* must be < 16, because of the 4-bit mask above.
+//
+#define CP_TYPE_TIMEOUT 1 // Timeout notification
+#define CP_TYPE_RING 2 // Ring notification
+
+
+BOOL OverPoolInit();
+void OverPoolDeinit();
+LPOVERLAPPED OverPoolAlloc(DWORD dwToken, DWORD dwRefCount);
+void OverPoolFree(LPOVERLAPPED lpOverlapped);
+void OverPoolInitTracing(void);
+void OverPoolDeinitTracing(void);
+//****************************************************************************
+// Global Parameters
+//****************************************************************************
+
+extern HINSTANCE ghInstance;
+
+extern HANDLE ghCompletionPort;
+
+extern DWORD gRegistryFlags; // one of the FGRF_* flags below:
+#define fGRF_PORTLATENCY 0x1
+
+#endif //_UNIMDM_H_
diff --git a/private/unimodem/tapisp/unimdm.rc b/private/unimodem/tapisp/unimdm.rc
new file mode 100644
index 000000000..dfc7985b5
--- /dev/null
+++ b/private/unimodem/tapisp/unimdm.rc
@@ -0,0 +1,18 @@
+//****************************************************************************
+//
+// Module: UNIMDM
+// File: unimdm.rc
+// Content: This file contains all the resources for Modem SPI
+// History:
+// Wed 15-Jun-1994 10:46:00 -by- Nick Manson [t-nickm]
+// Fri 30-Jul-1993 11:40:12 -by- Viroon Touranachun [viroont]
+//
+//****************************************************************************
+
+#include <windows.h>
+#include <commctrl.h>
+#include "unimdm.rcv"
+
+#include "rcids.h"
+
+#include "resource.rc"
diff --git a/private/unimodem/tapisp/unimdm.rcv b/private/unimodem/tapisp/unimdm.rcv
new file mode 100644
index 000000000..1f53637c9
--- /dev/null
+++ b/private/unimodem/tapisp/unimdm.rcv
@@ -0,0 +1,31 @@
+/******************************************************************************
+**
+** Module: unimdm
+** File: unimdm.rcv
+** Descriptions: Modem Service Provider Interface
+** Contains: Definitions of version control data
+**
+** Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
+**
+** History: Fri 30-Jul-1993 -by- Viroon Touranachun [viroont]
+**
+******************************************************************************/
+
+#ifdef WINNT
+#include <winver.h>
+#include <ntverp.h>
+#else
+#include <version.h>
+#endif
+
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "Unimodem Service Provider"
+#define VER_INTERNALNAME_STR "UNIMDM"
+#define VER_LEGALCOPYRIGHT_YEARS "1992-1995"
+#define VER_ORIGINALFILENAME_STR "UNIMDM.TSP"
+
+
+
+#include <common.ver>
diff --git a/private/unimodem/tapisp/wndthrd.c b/private/unimodem/tapisp/wndthrd.c
new file mode 100644
index 000000000..db1d06c82
--- /dev/null
+++ b/private/unimodem/tapisp/wndthrd.c
@@ -0,0 +1,1538 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: wndthrd.c
+//
+// Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
+//
+// Revision History
+//
+//
+// 5/4/95 Viroon Touranachun Moved from modem.c
+//
+//
+// Description: Asynchronous thread to handle the UI window
+//
+//****************************************************************************
+
+#include "unimdm.h"
+#include "umdmspi.h"
+#include "wndthrd.h"
+#include "rcids.h"
+
+
+#define DLG_CMD_FREE_INSTANCE 0
+#define DLG_CMD_CREATE 1
+#define DLG_CMD_DESTROY 2
+
+// Dialog Information
+//
+typedef struct tagDlgInfo {
+ DWORD dwCmd;
+ DWORD idLine;
+ DWORD dwType;
+} DLGINFO, *PDLGINFO;
+
+
+// Remote handle
+//
+typedef struct tagRemHandle {
+ HANDLE handle;
+ DWORD pid;
+} REMHANDLE, *PREMHANDLE;
+
+
+
+typedef struct _UI_THREAD_NODE {
+
+ struct _UI_THREAD_NODE *Next;
+
+ CRITICAL_SECTION CriticalSection;
+
+ HWND hWnd;
+ HTAPIDIALOGINSTANCE htDlgInst;
+ TUISPIDLLCALLBACK pfnUIDLLCallback;
+
+ PDLGNODE DlgList;
+
+ UINT RefCount;
+
+} UI_THREAD_NODE, *PUI_THREAD_NODE;
+
+
+typedef struct UI_THREAD_LIST {
+
+ CRITICAL_SECTION CriticalSection;
+
+ PUI_THREAD_NODE ListHead;
+
+} UI_THREAD_LIST, *PUI_THREAD_LIST;
+
+
+#define WM_MDM_TERMINATE WM_USER+0x0100
+#define WM_MDM_TERMINATE_WND WM_USER+0x0101
+#define WM_MDM_TERMINATE_WND_NOTIFY WM_USER+0x0102
+#define WM_MDM_DLG WM_USER+0x0113
+
+//****************************************************************************
+// Function Prototypes
+//****************************************************************************
+
+PDLGNODE NewDlgNode (HWND Parent,DWORD idLine, DWORD dwType);
+BOOL DeleteDlgNode (HWND Parent,PDLGNODE pDlgNode);
+PDLGNODE FindDlgNode (HWND Parent, DWORD idLine, DWORD dwType);
+BOOL IsDlgListMessage(HWND Parent,MSG* pmsg);
+void CleanupDlgList (HWND Parent);
+DWORD StartMdmDialog(HWND hwnd, DWORD idLine, DWORD dwType);
+DWORD DestroyMdmDialog(HWND hwnd,DWORD idLine, DWORD dwType);
+LRESULT MdmWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
+
+HWND CreateTalkDropDlg(HWND hwndOwner, DWORD idLine);
+HWND CreateManualDlg(HWND hwndOwner, DWORD idLine);
+HWND CreateTerminalDlg(HWND hwndOwner, DWORD idLine);
+
+TCHAR gszMdmWndClass[] = UNIMODEM_WNDCLASS;
+
+UI_THREAD_LIST UI_ThreadList;
+
+
+VOID WINAPI
+UI_ProcessAttach(
+ VOID
+ )
+
+{
+
+ UI_ThreadList.ListHead=NULL;
+
+ InitializeCriticalSection(&UI_ThreadList.CriticalSection);
+
+
+ return;
+
+}
+
+VOID WINAPI
+UI_ProcessDetach(
+ VOID
+ )
+
+{
+
+ UI_ThreadList.ListHead=NULL;
+
+ DeleteCriticalSection(&UI_ThreadList.CriticalSection);
+
+ return;
+
+}
+
+
+
+VOID WINAPI
+AddThreadNode(
+ PUI_THREAD_LIST List,
+ PUI_THREAD_NODE Node
+ )
+
+{
+ EnterCriticalSection(&List->CriticalSection);
+
+ Node->Next=List->ListHead;
+
+ List->ListHead=Node;
+
+ LeaveCriticalSection(&List->CriticalSection);
+
+ return;
+
+}
+
+VOID WINAPI
+RemoveNode(
+ PUI_THREAD_LIST List,
+ PUI_THREAD_NODE Node
+ )
+
+{
+ PUI_THREAD_NODE Current;
+ PUI_THREAD_NODE Prev;
+
+ EnterCriticalSection(&List->CriticalSection);
+
+ Prev=NULL;
+ Current=List->ListHead;
+
+ while (Current != NULL) {
+
+ if (Current == Node) {
+
+ if (Current == List->ListHead) {
+
+ List->ListHead=Current->Next;
+
+ } else {
+
+ Prev->Next=Current->Next;
+ }
+
+ break;
+ }
+ Prev=Current;
+ Current=Current->Next;
+ }
+
+ EnterCriticalSection(&Node->CriticalSection);
+
+ Node->RefCount--;
+
+ LeaveCriticalSection(&Node->CriticalSection);
+
+ LeaveCriticalSection(&List->CriticalSection);
+
+ return;
+
+}
+
+
+UINT WINAPI
+RemoveReference(
+ PUI_THREAD_NODE Node
+ )
+
+{
+ UINT TempCount;
+
+ EnterCriticalSection(&Node->CriticalSection);
+
+ TempCount=--Node->RefCount;
+
+ LeaveCriticalSection(&Node->CriticalSection);
+
+ return TempCount;
+
+}
+
+
+
+HWND WINAPI
+FindThreadWindow(
+ PUI_THREAD_LIST List,
+ HTAPIDIALOGINSTANCE htDlgInst
+ )
+
+{
+
+ PUI_THREAD_NODE Node;
+ HWND Window=NULL;
+
+ EnterCriticalSection(&List->CriticalSection);
+
+ Node=List->ListHead;
+
+ while (Node != NULL && Window == NULL) {
+
+ EnterCriticalSection(&Node->CriticalSection);
+
+ if (Node->htDlgInst == htDlgInst) {
+ //
+ // found it
+ //
+ Window=Node->hWnd;
+
+ Node->RefCount++;
+ }
+
+ LeaveCriticalSection(&Node->CriticalSection);
+
+
+ Node=Node->Next;
+ }
+
+
+ LeaveCriticalSection(&List->CriticalSection);
+
+ return Window;
+
+}
+
+
+TUISPIDLLCALLBACK WINAPI
+GetCallbackProc(
+ HWND hdlg
+ )
+
+{
+
+ PUI_THREAD_NODE Node;
+
+ Node=(PUI_THREAD_NODE)GetWindowLong(hdlg,GWL_USERDATA);
+
+ return Node->pfnUIDLLCallback;
+
+}
+
+
+
+//****************************************************************************
+// LONG TSPIAPI TUISPI_providerGenericDialog(
+// TUISPIDLLCALLBACK pfnUIDLLCallback,
+// HTAPIDIALOGINSTANCE htDlgInst,
+// LPVOID lpParams,
+// DWORD dwSize)
+//
+// Functions: Create modem instance
+//
+// Return: ERROR_SUCCESS if successful
+//****************************************************************************
+
+LONG TSPIAPI TUISPI_providerGenericDialog(
+ TUISPIDLLCALLBACK pfnUIDLLCallback,
+ HTAPIDIALOGINSTANCE htDlgInst,
+ LPVOID lpParams,
+ DWORD dwSize,
+ HANDLE hEvent)
+{
+ MSG msg;
+ WNDCLASS wc;
+ DWORD dwRet;
+
+ PUI_THREAD_NODE Node;
+
+ DBG_ENTER_UL("TUISPI_providerGenericDialog", htDlgInst);
+
+ Node=LocalAlloc(LPTR, sizeof(UI_THREAD_NODE));
+
+ if (Node == NULL) {
+
+ return ERROR_NOT_ENOUGH_MEMORY;
+ }
+
+ InitializeCriticalSection(&Node->CriticalSection);
+
+ Node->pfnUIDLLCallback=pfnUIDLLCallback;
+ Node->htDlgInst=htDlgInst;
+ Node->RefCount=1;
+
+
+ Node->DlgList=NULL;
+
+ wc.style = CS_NOCLOSE; // Do not allow end-user to close
+ wc.cbClsExtra = 0; // No per-class extra data.
+ wc.cbWndExtra = 0; // No per-window extra data.
+ wc.hInstance = ghInstance; // Application that owns the class.
+ wc.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));
+ wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+ wc.lpszMenuName = NULL;
+ wc.lpfnWndProc = MdmWndProc; // Function to retrieve messages.
+ wc.lpszClassName = gszMdmWndClass; // Name used in call to CreateWindow.
+
+
+
+ RegisterClass(&wc);
+
+
+ // Create the main invisible window
+ //
+ Node->hWnd = CreateWindow(
+ gszMdmWndClass, // The window class
+ szNull, // Text for window title bar.
+ WS_OVERLAPPEDWINDOW, // Window style.
+ CW_USEDEFAULT, // Default horizontal position.
+ CW_USEDEFAULT, // Default vertical position.
+ CW_USEDEFAULT, // Default width.
+ CW_USEDEFAULT, // Default height.
+ NULL, // Overlapped windows have no parent.
+ NULL, // Use the window class menu.
+ ghInstance, // This instance owns this window.
+ Node // Pointer not needed.
+ );
+
+ SetEvent(hEvent);
+
+ // Cannot create a window, bail out
+ //
+ if (Node->hWnd == NULL)
+ {
+ dwRet = LINEERR_OPERATIONFAILED;
+ goto Cleanup_Exit;
+ };
+
+
+ AddThreadNode(
+ &UI_ThreadList,
+ Node
+ );
+
+ // Get message loop
+ //
+ while (GetMessage(&msg, NULL, 0, 0))
+ {
+ if (msg.hwnd != NULL)
+ {
+ // The message is for a specific UI window, dispatch the message
+ //
+ if (!IsDlgListMessage(Node->hWnd,&msg))
+ {
+ TranslateMessage(&msg); // Translate virtual key code
+ DispatchMessage(&msg); // Dispatches message to the window
+ }
+ }
+ }
+ DestroyWindow(Node->hWnd);
+
+
+ ASSERT(Node->RefCount == 0);
+
+ dwRet = ERROR_SUCCESS;
+
+Cleanup_Exit:
+
+ // Free the allocated resources
+ //
+
+ LocalFree(Node);
+
+ DBG_EXIT_UL("TUISPI_providerGenericDialog", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LONG TSPIAPI TUISPI_providerGenericDialogData(
+// HTAPIDIALOGINSTANCE htDlgInst,
+// LPVOID lpParams,
+// DWORD dwSize)
+//
+// Functions: Request an action from the modem instance
+//
+// Return: ERROR_SUCCESS if successful
+//****************************************************************************
+
+LONG TSPIAPI TUISPI_providerGenericDialogData(
+ HTAPIDIALOGINSTANCE htDlgInst,
+ LPVOID lpParams,
+ DWORD dwSize
+ )
+{
+ PDLGINFO pDlgInfo = (PDLGINFO)lpParams;
+ HWND ParentWindow;
+ UINT RefCount;
+ PUI_THREAD_NODE Node;
+
+
+
+
+ DBG_ENTER_UL("TUISPI_providerGenericDialogData", htDlgInst);
+
+ ParentWindow=FindThreadWindow(
+ &UI_ThreadList,
+ htDlgInst
+ );
+
+ if (ParentWindow == NULL) {
+
+ return ERROR_SUCCESS;
+ }
+
+ Node=(PUI_THREAD_NODE)GetWindowLong(ParentWindow, GWL_USERDATA);
+
+
+ if (NULL == lpParams) {
+ //
+ // tapi want thread to exit, remove from list and dec ref count
+ //
+ RemoveNode(
+ &UI_ThreadList,
+ Node
+ );
+
+
+ }
+ else
+ {
+ ASSERT(dwSize == sizeof(*pDlgInfo));
+
+ switch(pDlgInfo->dwCmd)
+ {
+ case DLG_CMD_CREATE:
+ StartMdmDialog(ParentWindow,pDlgInfo->idLine, pDlgInfo->dwType);
+ break;
+
+ case DLG_CMD_DESTROY:
+ DestroyMdmDialog(ParentWindow,pDlgInfo->idLine, pDlgInfo->dwType);
+ break;
+
+ case DLG_CMD_FREE_INSTANCE:
+ //
+ // server wants thread to exit, remove from list and dec refcount
+ //
+ RemoveNode(
+ &UI_ThreadList,
+ Node
+ );
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (0 == RemoveReference(Node)) {
+ //
+ // it's gone, count dec'ed when remove from list
+ //
+ PostMessage(ParentWindow, WM_MDM_TERMINATE, 0, 0);
+ }
+
+ DBG_EXIT_UL("TUISPI_providerGenericDialogData", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// PDLGNODE NewDlgNode(DWORD, DWORD)
+//
+// Function: Add a new dialog box to the list
+//
+// Returns: a pointer to the dialog node if the dialog can be added
+//
+//****************************************************************************
+
+PDLGNODE NewDlgNode (HWND Parent, DWORD idLine, DWORD dwType)
+{
+ PDLGNODE pDlgNode;
+
+ PUI_THREAD_NODE UI_Node=(PUI_THREAD_NODE)GetWindowLong(Parent, GWL_USERDATA);
+
+ // Allocate a new dialog node
+ //
+ if ((pDlgNode = (PDLGNODE)LocalAlloc(LPTR, sizeof(*pDlgNode)))
+ == NULL)
+ return NULL;
+
+ // Insert the new node into the dialog list
+ //
+ pDlgNode->idLine = idLine;
+ pDlgNode->dwType = dwType;
+ pDlgNode->Parent = Parent;
+ INITCRITICALSECTION(pDlgNode->hSem);
+
+ // Insert the new node to the list
+ //
+ ENTERCRITICALSECTION(UI_Node->CriticalSection);
+ pDlgNode->pNext = UI_Node->DlgList;
+ UI_Node->DlgList = pDlgNode;
+ LEAVECRITICALSECTION(UI_Node->CriticalSection);
+
+ return pDlgNode;
+}
+
+//****************************************************************************
+// BOOL DeleteDlgNode(PDLGNODE)
+//
+// Function: Remove a dialog box to the list
+//
+// Returns: TRUE if the dialog exist and removed
+//
+//****************************************************************************
+
+BOOL DeleteDlgNode (HWND Parent, PDLGNODE pDlgNode)
+{
+ PDLGNODE pCurDlg, pPrevDlg;
+ PUI_THREAD_NODE UI_Node=(PUI_THREAD_NODE)GetWindowLong(Parent, GWL_USERDATA);
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(UI_Node->CriticalSection);
+
+ // Start from the head of the CB list
+ //
+ pPrevDlg = NULL;
+ pCurDlg = UI_Node->DlgList;
+
+ // traverse the list to find the specified CB
+ //
+ while (pCurDlg != NULL)
+ {
+ if (pCurDlg == pDlgNode)
+ {
+ // Is there a previous control block?
+ //
+ if (pPrevDlg == NULL)
+ {
+ // head of the list
+ //
+ UI_Node->DlgList = pCurDlg->pNext;
+ }
+ else
+ {
+ pPrevDlg->pNext = pCurDlg->pNext;
+ };
+ break;
+ };
+
+ pPrevDlg = pCurDlg;
+ pCurDlg = pCurDlg->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(UI_Node->CriticalSection);
+
+ // Have we found the dialog box in the list?
+ //
+ if (pCurDlg != NULL)
+ {
+ // Wait until no one else is using the line
+ //
+ ENTERCRITICALSECTION(pCurDlg->hSem);
+ DELETECRITICALSECTION(pCurDlg->hSem);
+ LocalFree(pCurDlg);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ };
+}
+
+//****************************************************************************
+// PDLGNODE FindDlgNode(DWORD, DWORD)
+//
+// Function: Find the dialog node for the line dev
+//
+// Returns: a pointer to the dialog node if the dialog exist and removed.
+// The dialog node's semaphore is claimed.
+//
+//****************************************************************************
+
+PDLGNODE FindDlgNode (HWND Parent, DWORD idLine, DWORD dwType)
+{
+ PDLGNODE pCurDlg;
+ PUI_THREAD_NODE UI_Node=(PUI_THREAD_NODE)GetWindowLong(Parent, GWL_USERDATA);
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(UI_Node->CriticalSection);
+
+ // Start from the head of the CB list
+ //
+ pCurDlg = UI_Node->DlgList;
+
+ // traverse the list to find the specified CB
+ //
+ while (pCurDlg != NULL)
+ {
+ ENTERCRITICALSECTION(pCurDlg->hSem);
+
+ if ((pCurDlg->idLine == idLine) &&
+ (pCurDlg->dwType == dwType) &&
+ (pCurDlg->Parent == Parent) )
+ {
+ break;
+ };
+
+ LEAVECRITICALSECTION(pCurDlg->hSem);
+
+ pCurDlg = pCurDlg->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(UI_Node->CriticalSection);
+
+ return pCurDlg;
+}
+
+
+//****************************************************************************
+// BOOL IsDlgListMessage(MSG* pmsg)
+//
+// Function: Run the message throught the dialogbox list
+//
+// Returns: TRUE if the message is one of the dialog box's and FALSE otherwise
+//
+//****************************************************************************
+
+BOOL IsDlgListMessage(HWND Parent, MSG* pmsg)
+{
+ PDLGNODE pDlgNode, pNext;
+ BOOL fRet = FALSE;
+ PUI_THREAD_NODE UI_Node=(PUI_THREAD_NODE)GetWindowLong(Parent, GWL_USERDATA);
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(UI_Node->CriticalSection);
+
+ // Walk the dialog box list
+ //
+ pDlgNode = UI_Node->DlgList;
+ while(pDlgNode != NULL && !fRet)
+ {
+ ENTERCRITICALSECTION(pDlgNode->hSem);
+
+ // Check whether the message belongs to this dialog
+ //
+ if (IsWindow(pDlgNode->hDlg) && IsDialogMessage(pDlgNode->hDlg, pmsg))
+ {
+ // Yes, we are done!
+ //
+ fRet = TRUE;
+ };
+
+ LEAVECRITICALSECTION(pDlgNode->hSem);
+
+ // Check the next dialog
+ //
+ pDlgNode = pDlgNode->pNext;
+ };
+
+ // Finish accessing the modem list
+ //
+ LEAVECRITICALSECTION(UI_Node->CriticalSection);
+
+ return fRet;
+}
+//****************************************************************************
+// void CleanupDlgList()
+//
+// Function: Clean up the dialogbox list
+//
+// Returns: None
+//
+//****************************************************************************
+
+void CleanupDlgList (HWND Parent)
+{
+ PDLGNODE pDlgNode, pNext;
+ PUI_THREAD_NODE UI_Node=(PUI_THREAD_NODE)GetWindowLong(Parent, GWL_USERDATA);
+ // Exclusively access the modem list
+ //
+ ENTERCRITICALSECTION(UI_Node->CriticalSection);
+
+ // Walk the dialog box list
+ //
+ pDlgNode = UI_Node->DlgList;
+ while(pDlgNode != NULL)
+ {
+ ENTERCRITICALSECTION(pDlgNode->hSem);
+
+ // Destroy the dialog box first
+ //
+ DestroyWindow(pDlgNode->hDlg);
+
+ // Free the CB and move onto the next dialog
+ //
+ pNext = pDlgNode->pNext;
+ DELETECRITICALSECTION(pDlgNode->hSem);
+ LocalFree(pDlgNode);
+ pDlgNode = pNext;
+ }
+
+ // Finish accessing the modem list
+ //
+ UI_Node->DlgList=NULL;
+
+ LEAVECRITICALSECTION(UI_Node->CriticalSection);
+
+ return;
+}
+
+//****************************************************************************
+// DWORD StartMdmDialog(DWORD, DWORD)
+//
+// Function: Start modem dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD StartMdmDialog(HWND Parent, DWORD idLine, DWORD dwType)
+{
+ PDLGNODE pDlgNode;
+ DWORD dwRet;
+
+ // Create the talk/drop dialog node
+ //
+ pDlgNode = NewDlgNode(Parent, idLine, dwType);
+
+ if (pDlgNode != NULL)
+ {
+ PostMessage(Parent, WM_MDM_DLG, (WPARAM)idLine, (LPARAM)dwType);
+ dwRet = ERROR_SUCCESS;
+ }
+ else
+ {
+ dwRet = ERROR_OUTOFMEMORY;
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD DestroyMdmDialog(DWORD, DWORD)
+//
+// Function: destroy talk/drop dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Returns: none
+//
+//****************************************************************************
+
+DWORD DestroyMdmDialog(HWND Parent,DWORD idLine, DWORD dwType)
+{
+#ifdef DEBUG
+ PDLGNODE pDlgNode;
+
+ // Search for the dialog
+ //
+ pDlgNode = FindDlgNode(Parent, idLine, dwType);
+
+ // Check if the talkdrop dialog is available
+ //
+ if (pDlgNode != NULL)
+ {
+ LEAVECRITICALSECTION(pDlgNode->hSem);
+ }
+ else
+ {
+ DPRINTF("Could not find the associated dialog node");
+ ASSERT(0);
+ };
+#endif // DEBUG
+
+ PostMessage(Parent, WM_MDM_TERMINATE_WND, (WPARAM)idLine,
+ (LPARAM)dwType);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// LRESULT MdmWndProc(HWND, UINT, WPARAM, LPARAM)
+//
+// Function: Main window for the modem window thread.
+//
+// Returns: 0 or 1
+//
+//****************************************************************************
+
+LRESULT MdmWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ // Determine the command
+ //
+ switch(message)
+ {
+
+ case WM_CREATE:
+ {
+ LPCREATESTRUCT lpcs=(LPCREATESTRUCT) lParam;
+
+ SetWindowLong(hwnd, GWL_USERDATA, (LONG)lpcs->lpCreateParams);
+
+ break;
+ }
+ case WM_MDM_TERMINATE:
+ //
+ // The thread is being terminated
+ // Destroy all the windows
+ //
+ CleanupDlgList(hwnd);
+ PostQuitMessage(ERROR_SUCCESS);
+ break;
+
+ case WM_MDM_TERMINATE_WND:
+ case WM_MDM_TERMINATE_WND_NOTIFY:
+ {
+ PDLGNODE pDlgNode;
+
+ // Search for the dialog node
+ //
+ if ((pDlgNode = FindDlgNode(hwnd,(DWORD)wParam, (DWORD)lParam)) == NULL)
+ {
+ break;
+ };
+
+ // The window is requested to be destroyed
+ //
+ DestroyWindow(pDlgNode->hDlg);
+
+ // If the modem dialog structure is available
+ // notify the state machine thread
+ //
+ if (message == WM_MDM_TERMINATE_WND_NOTIFY)
+ {
+ DLGREQ DlgReq;
+
+ TUISPIDLLCALLBACK Callback;
+
+ DlgReq.dwCmd = UI_REQ_COMPLETE_ASYNC;
+ DlgReq.dwParam = pDlgNode->dwStatus;
+
+ Callback=GetCallbackProc(hwnd);
+
+ (*Callback)(pDlgNode->idLine, TUISPIDLL_OBJECT_LINEID,
+ (LPVOID)&DlgReq, sizeof(DlgReq));
+
+ };
+
+ // Remove it from the dialog list
+ //
+ LEAVECRITICALSECTION(pDlgNode->hSem);
+ DeleteDlgNode(hwnd,pDlgNode);
+
+ break;
+ }
+ case WM_MDM_DLG:
+ {
+ PDLGNODE pDlgNode;
+
+ //
+ // Find the dialog node
+ //
+ pDlgNode = FindDlgNode(hwnd,(DWORD)wParam, (DWORD)lParam);
+
+ if (pDlgNode != NULL)
+ {
+ if (pDlgNode->hDlg == NULL)
+ {
+ switch(lParam)
+ {
+ case TALKDROP_DLG:
+ //
+ // Create a talk-drop dialog box
+ //
+ pDlgNode->hDlg = CreateTalkDropDlg(hwnd, (DWORD)pDlgNode);
+ break;
+
+ case MANUAL_DIAL_DLG:
+ //
+ // Create a talk-drop dialog box
+ //
+ pDlgNode->hDlg = CreateManualDlg(hwnd, (DWORD)pDlgNode);
+ break;
+
+ case TERMINAL_DLG:
+ //
+ // Create a talk-drop dialog box
+ //
+ pDlgNode->hDlg = CreateTerminalDlg(hwnd, (DWORD)wParam);
+ break;
+
+ default:
+ break;
+ };
+ }
+ else
+ {
+ DPRINTF("Another dialog of the same type exists.");
+ ASSERT(0);
+ };
+
+ LEAVECRITICALSECTION(pDlgNode->hSem);
+ };
+ break;
+ }
+
+ default:
+ return(DefWindowProc(hwnd, message, wParam, lParam));
+ };
+ return 0;
+}
+
+
+
+//****************************************************************************
+// void EndMdmDialog(DWORD, DWORD, DWORD)
+//
+// Function: Request to end dialog from the dialog itself.
+//
+// Returns: None
+//
+//****************************************************************************
+
+void EndMdmDialog(HWND Parent, DWORD idLine, DWORD dwType, DWORD dwStatus)
+{
+ PDLGNODE pDlgNode;
+
+ // Look for the dialog node
+ //
+ if ((pDlgNode = FindDlgNode(Parent, idLine, dwType)) != NULL)
+ {
+ pDlgNode->dwStatus = dwStatus;
+
+ // Notify the dialog box result
+ //
+ PostMessage(Parent, WM_MDM_TERMINATE_WND_NOTIFY, (WPARAM)idLine,
+ (LPARAM)dwType);
+
+ LEAVECRITICALSECTION(pDlgNode->hSem);
+ };
+ return;
+}
+
+
+
+//****************************************************************************
+//****************************************************************************
+//************ The following calls are in the context of TAPISRV**************
+//****************************************************************************
+//****************************************************************************
+
+//****************************************************************************
+// DWORD CreateMdmDlgInstance (PLINEDEV pLineDev)
+//
+// Function: Start dialog instance
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+//
+//****************************************************************************
+
+DWORD CreateMdmDlgInstance (PLINEDEV pLineDev)
+{
+ HANDLE hEvent;
+ TUISPICREATEDIALOGINSTANCEPARAMS cdip;
+
+ DBG_PLD_ENTER("CreateMdmDlgInstance");
+
+ ASSERT(pLineDev->dwPendingID != INVALID_PENDINGID);
+
+ // Package the params
+ //
+ cdip.dwRequestID = pLineDev->dwPendingID;
+ cdip.hdDlgInst = (HDRVDIALOGINSTANCE)pLineDev;
+ cdip.htDlgInst = NULL;
+ cdip.lpszUIDLLName = gszTSPFilename;
+ cdip.lpParams = NULL;
+ cdip.dwSize = 0;
+
+ // Notify TAPI to start a dialog instance
+ //
+ (*(pLineDev->lpfnEvent))((HTAPILINE)ghProvider, NULL,
+ LINE_CREATEDIALOGINSTANCE,
+ (DWORD)(&cdip),
+ 0, 0);
+
+ pLineDev->hDlgInst = cdip.htDlgInst;
+ DBG_PLD_EXIT("CreateMdmDlgInstance", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD DestroyMdmDlgInstance (PLINEDEV pLineDev)
+//
+// Function: Destroy dialog instance
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+//
+//****************************************************************************
+
+DWORD DestroyMdmDlgInstance (PLINEDEV pLineDev)
+{
+ DLGINFO DlgInfo;
+
+ DBG_PLD_ENTER("DestroyMdmDlgInstance");
+
+ if (pLineDev->hDlgInst == NULL)
+ {
+ DBG_PLD_EXIT("DestroyMdmDlgInstance", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+ }
+
+ // Package the parameters
+ //
+ DlgInfo.idLine = 0;
+ DlgInfo.dwType = 0;
+ DlgInfo.dwCmd = DLG_CMD_FREE_INSTANCE;
+
+ // Notify TAPI to stop a dialog instance
+ //
+ (*(pLineDev->lpfnEvent))((HTAPILINE)pLineDev->hDlgInst, NULL,
+ LINE_SENDDIALOGINSTANCEDATA,
+ (DWORD)(&DlgInfo),
+ sizeof(DlgInfo),
+ 0);
+
+ pLineDev->hDlgInst = NULL;
+
+ DBG_PLD_EXIT("DestroyMdmDlgInstance", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD SPStartMdmDialog (PLINEDEV pLineDev, DWORD dwType)
+//
+// Function: Create a dialog in the dialog instance
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+//
+//****************************************************************************
+
+DWORD SPStartMdmDialog (PLINEDEV pLineDev, DWORD dwType)
+{
+ DLGINFO DlgInfo;
+
+ // Package the parameters
+ //
+ DlgInfo.idLine = pLineDev->dwID;
+ DlgInfo.dwType = dwType;
+ DlgInfo.dwCmd = DLG_CMD_CREATE;
+
+ // Notify TAPI to start a dialog
+ //
+ (*(pLineDev->lpfnEvent))((HTAPILINE)pLineDev->hDlgInst, NULL,
+ LINE_SENDDIALOGINSTANCEDATA,
+ (DWORD)(&DlgInfo),
+ sizeof(DlgInfo),
+ 0);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD SPDestroyMdmDialog (PLINEDEV pLineDev, DWORD dwType)
+//
+// Function: Destroy a dialog in the dialog instance
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+//
+//****************************************************************************
+
+DWORD SPDestroyMdmDialog (PLINEDEV pLineDev, DWORD dwType)
+{
+ DLGINFO DlgInfo;
+
+ // Package the parameters
+ //
+ DlgInfo.idLine = pLineDev->dwID;
+ DlgInfo.dwType = dwType;
+ DlgInfo.dwCmd = DLG_CMD_DESTROY;
+
+ // Notify TAPI to start a dialog
+ //
+ (*(pLineDev->lpfnEvent))((HTAPILINE)pLineDev->hDlgInst, NULL,
+ LINE_SENDDIALOGINSTANCEDATA,
+ (DWORD)(&DlgInfo),
+ sizeof(DlgInfo),
+ 0);
+ return ERROR_SUCCESS;
+}
+
+//****************************************************************************
+// DWORD TalkDropDialog(PLINEDEV)
+//
+// Function: Start talkdrop dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// LINEERR_NOMEM if fails
+//
+//****************************************************************************
+
+DWORD TalkDropDialog(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ if(IS_UI_DLG_UP(pLineDev, UI_DLG_TALKDROP))
+ {
+ DPRINTF("Attempting to display another TalkDrop dialog.");
+ ASSERT(0);
+ return ERROR_SUCCESS;
+ };
+
+ if ((dwRet = SPStartMdmDialog(pLineDev, TALKDROP_DLG))
+ == ERROR_SUCCESS)
+ {
+ START_UI_DLG(pLineDev, UI_DLG_TALKDROP);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD DestroyTalkDropDialog(PLINEDEV)
+//
+// Function: Start talkdrop dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD DestroyTalkDropDialog(PLINEDEV pLineDev)
+{
+ if (!IS_UI_DLG_UP(pLineDev, UI_DLG_TALKDROP))
+ return ERROR_SUCCESS;
+
+ return SPDestroyMdmDialog(pLineDev, TALKDROP_DLG);
+}
+
+//****************************************************************************
+// DWORD ManualDialog(PLINEDEV)
+//
+// Function: Start manual-dial dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD ManualDialog(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ if(IS_UI_DLG_UP(pLineDev, UI_DLG_MANUAL))
+ {
+ DPRINTF("Attempting to display another Manual-dial dialog.");
+ ASSERT(0);
+ return ERROR_SUCCESS;
+ };
+
+ if ((dwRet = SPStartMdmDialog(pLineDev, MANUAL_DIAL_DLG))
+ == ERROR_SUCCESS)
+ {
+ START_UI_DLG(pLineDev, UI_DLG_MANUAL);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD DestroyManualDialog(PLINEDEV)
+//
+// Function: Start talkdrop dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD DestroyManualDialog(PLINEDEV pLineDev)
+{
+ if (!IS_UI_DLG_UP(pLineDev, UI_DLG_MANUAL))
+ return ERROR_SUCCESS;
+
+ return SPDestroyMdmDialog(pLineDev, MANUAL_DIAL_DLG);
+}
+
+//****************************************************************************
+// DWORD TerminalDialog(PLINEDEV)
+//
+// Function: Start terminal dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD TerminalDialog(PLINEDEV pLineDev)
+{
+ DWORD dwRet;
+
+ if(IS_UI_DLG_UP(pLineDev, UI_DLG_TERMINAL))
+ {
+ DPRINTF("Attempting to display another Terminal dialog.");
+ ASSERT(0);
+ return ERROR_SUCCESS;
+ };
+
+ if ((dwRet = SPStartMdmDialog(pLineDev, TERMINAL_DLG))
+ == ERROR_SUCCESS)
+ {
+ START_UI_DLG(pLineDev, UI_DLG_TERMINAL);
+ };
+
+ return dwRet;
+}
+
+//****************************************************************************
+// DWORD DestroyTerminalDialog(PLINEDEV)
+//
+// Function: Start talkdrop dialog
+//
+// Notes: This function is called from the state machine thread
+//
+// Return: ERROR_SUCCESS if dialog box is successfully created
+// ERROR_OUTOFMEMORY if fails
+//
+//****************************************************************************
+
+DWORD DestroyTerminalDialog(PLINEDEV pLineDev)
+{
+ if (!IS_UI_DLG_UP(pLineDev, UI_DLG_TERMINAL))
+ return ERROR_SUCCESS;
+
+ return SPDestroyMdmDialog(pLineDev, TERMINAL_DLG);
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerGenericDialogData(
+// DWORD dwObjectID,
+// DWORD dwObjectType,
+// LPVOID lpParams,
+// DWORD dwSize)
+//
+// Functions: Callback from UI DLL to TSP
+//
+// Return: ERROR_SUCCESS if successful
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerGenericDialogData(
+ DWORD dwObjectID,
+ DWORD dwObjectType,
+ LPVOID lpParams,
+ DWORD dwSize
+ )
+{
+ PLINEDEV pLineDev;
+ PDLGREQ pDlgReq = (PDLGREQ)lpParams;
+ DWORD dwRet = ERROR_SUCCESS;
+
+ DBG_ENTER_UL("TSPI_providerGenericDialogData", dwObjectID);
+
+ ASSERT (dwObjectType == TUISPIDLL_OBJECT_LINEID);
+
+ // Find the corresponding modem device
+ //
+ if ((pLineDev = GetCBfromID(dwObjectID)) == NULL)
+ {
+ DBG_EXIT_UL("TSPI_providerGenericDialogData", LINEERR_NODEVICE);
+ return LINEERR_NODEVICE;
+ }
+
+ // Determine the request
+ //
+ switch(pDlgReq->dwCmd)
+ {
+ case UI_REQ_COMPLETE_ASYNC:
+ MdmAsyncContinue(pLineDev,
+ pDlgReq->dwParam);
+ break;
+
+ case UI_REQ_END_DLG:
+ switch(pDlgReq->dwParam)
+ {
+ case TALKDROP_DLG:
+ STOP_UI_DLG(pLineDev, UI_DLG_TALKDROP);
+ break;
+
+ case MANUAL_DIAL_DLG:
+ STOP_UI_DLG(pLineDev, UI_DLG_MANUAL);
+ break;
+
+ case TERMINAL_DLG:
+ STOP_UI_DLG(pLineDev, UI_DLG_TERMINAL);
+ break;
+ };
+ break;
+
+ case UI_REQ_HANGUP_LINE:
+
+ // Make a direct call to unimodem to drop the line
+ //
+ if ((pLineDev->DevState != DEVST_DISCONNECTED)
+ &&
+ (pLineDev->DevState != DEVST_DISCONNECTING)) {
+
+ UnimodemHangup(pLineDev, TRUE);
+ }
+
+ break;
+
+ case UI_REQ_TERMINAL_INFO:
+ {
+ PTERMREQ pTermReq = (PTERMREQ)pDlgReq;
+ HANDLE hTargetProcess;
+
+ // Duplicate sync event handle
+ //
+ if ((hTargetProcess = OpenProcess(PROCESS_DUP_HANDLE, TRUE,
+ pTermReq->DlgReq.dwParam)) != NULL)
+ {
+ if (!DuplicateHandle(GetCurrentProcess(), pLineDev->hDevice,
+ hTargetProcess, &pTermReq->hDevice, 0, FALSE,
+ DUPLICATE_SAME_ACCESS))
+ {
+ pTermReq->hDevice = NULL;
+ };
+ CloseHandle(hTargetProcess);
+ };
+
+ // Get the terminal type
+ //
+ pTermReq->dwTermType = (pLineDev->DevState == DEVST_PORTPOSTTERMINAL)?
+ TERMINAL_POST : TERMINAL_PRE;
+ break;
+ }
+
+ case UI_REQ_GET_PROP:
+ {
+ PPROPREQ pPropReq = (PPROPREQ)pDlgReq;
+
+ ASSERT(pLineDev->pDevCfg != NULL);
+
+ // If the line is active, we need to get the current modem setting.
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ DWORD cb = pLineDev->pDevCfg->commconfig.dwSize;
+
+ // Get the modem configuration
+ //
+ UnimodemGetCommConfig(pLineDev,
+ &(pLineDev->pDevCfg->commconfig),
+ &cb);
+ };
+
+ pPropReq->dwCfgSize = pLineDev->pDevCfg->dfgHdr.dwSize;
+ pPropReq->dwMdmType = (DWORD)pLineDev->bDeviceType;
+ pPropReq->dwMdmCaps = pLineDev->dwDevCapFlags;
+ pPropReq->dwMdmOptions = pLineDev->dwModemOptions;
+ lstrcpyn(pPropReq->szDeviceName, pLineDev->szDeviceName,
+ sizeof(pPropReq->szDeviceName));
+ break;
+ }
+
+ case UI_REQ_GET_DEVCFG:
+ {
+ ASSERT (pLineDev->pDevCfg != NULL);
+
+ // If the line is active, we need to get the current modem setting.
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ DWORD cb = pLineDev->pDevCfg->commconfig.dwSize;
+
+ // Get the modem configuration
+ //
+ UnimodemGetCommConfig(pLineDev,
+ &(pLineDev->pDevCfg->commconfig),
+ &cb);
+ };
+
+ CopyMemory((LPBYTE)(pDlgReq+1), (LPBYTE)pLineDev->pDevCfg, pDlgReq->dwParam);
+ break;
+ }
+
+ case UI_REQ_SET_DEVCFG:
+ {
+ ASSERT (pLineDev->pDevCfg != NULL);
+
+ // Save the changes back
+ //
+ CopyMemory((LPBYTE)pLineDev->pDevCfg, (LPBYTE)(pDlgReq+1), pDlgReq->dwParam);
+
+ // If the line is active, we need to propagate the current modem setting.
+ //
+ if (pLineDev->hDevice != INVALID_DEVICE)
+ {
+ // Set the modem configuration
+ //
+ UnimodemSetCommConfig(pLineDev,
+ &(pLineDev->pDevCfg->commconfig),
+ pLineDev->pDevCfg->commconfig.dwSize);
+ };
+ break;
+ }
+
+ case UI_REQ_GET_PHONENUMBER:
+ {
+ PNUMBERREQ pNumberReq = (PNUMBERREQ)pDlgReq;
+
+// ASSERT(sizeof(pNumberReq->szPhoneNumber) == sizeof(pLineDev->szAddress));
+
+ if ((DEVST_PORTCONNECTING == pLineDev->DevState)
+ ||
+ (DEVST_MANUALDIALING == pLineDev->DevState)) {
+
+ lstrcpyA(pNumberReq->szPhoneNumber,pLineDev->szAddress);
+
+ } else {
+
+ lstrcpyA(pNumberReq->szPhoneNumber,"");
+ }
+
+ break;
+ }
+
+
+
+ default:
+ break;
+ }
+
+ RELEASE_LINEDEV(pLineDev);
+
+ DBG_EXIT_UL("TSPI_providerGenericDialogData", dwRet);
+ return dwRet;
+}
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerFreeDialogInstance(
+// HDRVDIALOGINSTANCE hdDlgInstance)
+//
+// Functions: Indicates the dialog instance was freed
+//
+// Return: ERROR_SUCCESS if successful
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerFreeDialogInstance(
+ HDRVDIALOGINSTANCE hdDlgInstance
+ )
+{
+ DBG_ENTER_UL("TSPI_providerFreeDialogInstance", hdDlgInstance);
+
+
+ DBG_EXIT_UL("TSPI_providerFreeDialogInstance", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
+
+
+//****************************************************************************
+// LONG
+// TSPIAPI
+// TSPI_providerUIIdentify(
+// LPTSTR lpszUIDllName)
+//
+// Functions: Retreives the UI Dll Name
+//
+// Return: ERROR_SUCCESS if successful
+//****************************************************************************
+
+LONG
+TSPIAPI
+TSPI_providerUIIdentify(
+ LPTSTR lpszUIDllName
+ )
+{
+ DBG_ENTER("TSPI_providerUIIdentify");
+
+ lstrcpy(lpszUIDllName, gszTSPFilename);
+
+ DBG_EXIT_UL("TSPI_providerUIIdentify", ERROR_SUCCESS);
+ return ERROR_SUCCESS;
+}
diff --git a/private/unimodem/tapisp/wndthrd.h b/private/unimodem/tapisp/wndthrd.h
new file mode 100644
index 000000000..cf7083123
--- /dev/null
+++ b/private/unimodem/tapisp/wndthrd.h
@@ -0,0 +1,83 @@
+//****************************************************************************
+//
+// Module: Unimdm
+// File: wndthrd.h
+// Content: This file contains the declaration for UI parts
+//
+// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved
+//
+//****************************************************************************
+
+// Dialog Types
+//
+#define TALKDROP_DLG 0
+#define MANUAL_DIAL_DLG 1
+#define TERMINAL_DLG 2
+
+// Dialog Request
+//
+typedef struct tagDlgReq {
+ DWORD dwCmd;
+ DWORD dwParam;
+} DLGREQ, *PDLGREQ;
+
+typedef struct tagTermReq {
+ DLGREQ DlgReq;
+ HANDLE hDevice;
+ DWORD dwTermType;
+} TERMREQ, *PTERMREQ;
+
+typedef struct tagPropReq {
+ DLGREQ DlgReq;
+ DWORD dwCfgSize;
+ DWORD dwMdmType;
+ DWORD dwMdmCaps;
+ DWORD dwMdmOptions;
+ TCHAR szDeviceName[MAXDEVICENAME+1];
+} PROPREQ, *PPROPREQ;
+
+typedef struct tagNumberReq {
+ DLGREQ DlgReq;
+ DWORD dwSize;
+ CHAR szPhoneNumber[MAXDEVICENAME+1];
+} NUMBERREQ, *PNUMBERREQ;
+
+
+#define UI_REQ_COMPLETE_ASYNC 0
+#define UI_REQ_END_DLG 1
+#define UI_REQ_HANGUP_LINE 2
+#define UI_REQ_TERMINAL_INFO 3
+#define UI_REQ_GET_PROP 4
+#define UI_REQ_GET_DEVCFG 5
+#define UI_REQ_SET_DEVCFG 6
+#define UI_REQ_GET_PHONENUMBER 7
+
+
+// Dialog node
+//
+typedef struct tagDlgNode {
+ struct tagDlgNode *pNext;
+ CRITICAL_SECTION hSem;
+ HWND hDlg;
+ DWORD idLine;
+ DWORD dwType;
+ DWORD dwStatus;
+ HWND Parent;
+} DLGNODE, *PDLGNODE;
+
+
+
+//extern TUISPIDLLCALLBACK gpfnUICallback;
+
+
+TUISPIDLLCALLBACK WINAPI
+GetCallbackProc(
+ HWND hdlg
+ );
+
+TUISPIDLLCALLBACK WINAPI
+GetCallbackProcFromParent(
+ HWND hdlg
+ );
+
+void EndMdmDialog(HWND Parent, DWORD idLine, DWORD dwType, DWORD dwStatus);
diff --git a/private/unimodem/unimdm.ini b/private/unimodem/unimdm.ini
new file mode 100644
index 000000000..db088a6fe
--- /dev/null
+++ b/private/unimodem/unimdm.ini
@@ -0,0 +1,114 @@
+;; --------------------------------------------------------------------
+;; --------------------------------------------------------------------
+
+[ModemUI]
+; DumpFlags:
+; 00000001 DCB
+; 00000002 MODEMSETTINGS
+; 00000004 DEVCAPS
+
+DumpFlags=0x00000000
+
+; TraceFlags:
+; 00000001 Warnings
+; 00000002 Errors
+; 00000004 General
+; 00000008 Function trace
+
+TraceFlags=0x00000007
+
+; BreakFlags:
+; 00000001 Break on validate
+; 00000040 Break on process attach
+; 00000100 Break on API enter
+
+BreakFlags=0x00000001
+
+
+;; --------------------------------------------------------------------
+;; --------------------------------------------------------------------
+
+
+[Modem]
+; DumpFlags:
+
+DumpFlags=0x00000000
+
+; TraceFlags:
+; 00000001 Warnings
+; 00000002 Errors
+; 00000004 General
+; 00000008 Function trace
+; 00010000 Detection queries
+; 00020000 Class installer trace
+
+TraceFlags=0x00020007
+
+; BreakFlags:
+; 00000001 Break on validate
+; 00000040 Break on process attach
+; 00000100 Break on API enter
+
+BreakFlags=0x00000001
+
+
+
+;; --------------------------------------------------------------------
+;; --------------------------------------------------------------------
+
+[SerialUI]
+; DumpFlags:
+; 00000001 DCB
+
+DumpFlags=0x00000000
+
+; TraceFlags:
+; 00000001 Warnings
+; 00000002 Errors
+; 00000004 General
+; 00000008 Function trace
+
+TraceFlags=0x00000007
+
+; BreakFlags:
+; 00000001 Break on validate
+; 00000040 Break on process attach
+; 00000100 Break on API enter
+
+BreakFlags=0x00000001
+
+
+
+
+;; --------------------------------------------------------------------
+;; --------------------------------------------------------------------
+
+[Unimdm]
+; DumpFlags:
+
+DumpFlags=0x00000000
+
+; TraceFlags:
+; 00000001 Warnings
+; 00000002 Errors
+; 00000004 General
+; 00000008 Function trace
+; 00010000 dwDeviceID related
+; 00020000 hdLine related
+; 00040000 hdCall related
+; 00080000 pLineDev related
+; 00100000 pModemInfo related
+
+TraceFlags=0x00000007
+
+; BreakFlags:
+; 00000001 Break on validate
+; 00000040 Break on process attach
+; 00000080 Break on process dettach
+; 00000100 Break on API enter
+
+BreakFlags=0x00000001
+
+
+
+