home *** CD-ROM | disk | FTP | other *** search
/ CLIX - Fazer Clix Custa Nix / CLIX-CD.cdr / mac / lib / Mac / InternetConfig.pm < prev    next >
Text File  |  1998-04-05  |  17KB  |  751 lines

  1.  
  2. =head1 NAME
  3.  
  4. Mac::InternetConfig - Interface to Peter Lewis' and Quinns Internet Config system
  5.  
  6. =head1 SYNOPSIS
  7.  
  8.  
  9. =head1 DESCRIPTION
  10.  
  11. Access to the original Internet Config documentation is essential for proper use 
  12. of these functions.
  13.  
  14. =cut
  15.  
  16. use strict;
  17.  
  18. package Mac::InternetConfig;
  19.  
  20. BEGIN {
  21.    use Exporter   ();
  22.    use DynaLoader ();
  23.    
  24.    use vars qw(
  25.       @ISA @EXPORT @EXPORT_OK 
  26.       %RawInternetConfig %InternetConfig %InternetConfigMap $ICInstance);
  27.    
  28.    @ISA = qw(Exporter DynaLoader);
  29.    @EXPORT = qw(
  30.       ICStart
  31.       ICStop
  32.       ICFindConfigFile
  33.       ICFindUserConfigFile
  34.       ICGeneralFindConfigFile
  35.       ICChooseConfig
  36.       ICChooseNewConfig
  37.       ICGetConfigName
  38.       ICGetConfigReference
  39.       ICSetConfigReference
  40.       ICGetSeed
  41.       ICGetComponentInstance
  42.       ICBegin
  43.       ICGetPref
  44.       ICSetPref
  45.       ICCountPref
  46.       ICGetIndPref
  47.       ICDeletePref
  48.       ICEnd
  49.       ICEditPreferences
  50.       ICParseURL
  51.       ICLaunchURL
  52.       ICMapFilename
  53.       ICMapTypeCreator
  54.       ICMapEntriesFilename
  55.       ICMapEntriesTypeCreator
  56.       ICCountMapEntries
  57.       ICGetIndMapEntry
  58.       ICGetMapEntry
  59.       ICSetMapEntry
  60.       ICDeleteMapEntry
  61.       ICAddMapEntry
  62.       
  63.       %RawInternetConfig 
  64.       %InternetConfig
  65.       %InternetConfigMap
  66.       
  67.       kICRealName
  68.       kICEmail
  69.       kICMailAccount
  70.       kICMailPassword
  71.       kICNewsAuthUsername
  72.       kICNewsAuthPassword
  73.       kICArchiePreferred
  74.       kICArchieAll
  75.       kICUMichPreferred
  76.       kICUMichAll
  77.       kICInfoMacPreferred
  78.       kICInfoMacAll
  79.       kICPhHost
  80.       kICWhoisHost
  81.       kICFingerHost
  82.       kICFTPHost
  83.       kICTelnetHost
  84.       kICSMTPHost
  85.       kICNNTPHost
  86.       kICGopherHost
  87.       kICLDAPServer
  88.       kICLDAPSearchbase
  89.       kICWWWHomePage
  90.       kICWAISGateway
  91.       kICListFont
  92.       kICScreenFont
  93.       kICPrinterFont
  94.       kICTextCreator
  95.       kICBinaryTypeCreator
  96.       kICDownloadFolder
  97.       kICSignature
  98.       kICOrganization
  99.       kICPlan
  100.       kICQuotingString
  101.       kICMailHeaders
  102.       kICNewsHeaders
  103.       kICMapping
  104.       kICCharacterSet
  105.       kICHelper
  106.       kICServices
  107.       kICNewMailFlashIcon
  108.       kICNewMailDialog
  109.       kICNewMailPlaySound
  110.       kICNewMailSoundName
  111.       kICWebBackgroundColour
  112.       kICNoProxyDomains
  113.       kICUseSocks
  114.       kICSocksHost
  115.       kICUseHTTPProxy
  116.       kICHTTPProxyHost
  117.       kICUseFTPProxy
  118.       kICFTPProxyHost
  119.       kICFTPProxyUser
  120.       kICFTPProxyPassword
  121.       kICFTPProxyAccount
  122.       ICmap_binary
  123.       ICmap_resource_fork
  124.       ICmap_data_fork
  125.       ICmap_post
  126.       ICmap_not_incoming
  127.       ICmap_not_outgoing
  128.       ICservices_tcp
  129.       ICservices_udp
  130.       icNoPerm
  131.       icReadOnlyPerm
  132.       icReadWritePerm
  133.    );
  134.    @EXPORT_OK = qw(
  135.       $ICInstance
  136.    );
  137. }
  138.  
  139. =head2 Constants
  140.  
  141. =over 4
  142.  
  143. =item kICRealName
  144.  
  145. =item kICEmail
  146.  
  147. =item kICMailAccount
  148.  
  149. =item kICMailPassword
  150.  
  151. =item kICNewsAuthUsername
  152.  
  153. =item kICNewsAuthPassword
  154.  
  155. =item kICArchiePreferred
  156.  
  157. =item kICArchieAll
  158.  
  159. =item kICUMichPreferred
  160.  
  161. =item kICUMichAll
  162.  
  163. =item kICInfoMacPreferred
  164.  
  165. =item kICInfoMacAll
  166.  
  167. =item kICPhHost
  168.  
  169. =item kICWhoisHost
  170.  
  171. =item kICFingerHost
  172.  
  173. =item kICFTPHost
  174.  
  175. =item kICTelnetHost
  176.  
  177. =item kICSMTPHost
  178.  
  179. =item kICNNTPHost
  180.  
  181. =item kICGopherHost
  182.  
  183. =item kICLDAPServer
  184.  
  185. =item kICLDAPSearchbase
  186.  
  187. =item kICWWWHomePage
  188.  
  189. =item kICWAISGateway
  190.  
  191. =item kICListFont
  192.  
  193. =item kICScreenFont
  194.  
  195. =item kICPrinterFont
  196.  
  197. =item kICTextCreator
  198.  
  199. =item kICBinaryTypeCreator
  200.  
  201. =item kICDownloadFolder
  202.  
  203. =item kICSignature
  204.  
  205. =item kICOrganization
  206.  
  207. =item kICPlan
  208.  
  209. =item kICQuotingString
  210.  
  211. =item kICMailHeaders
  212.  
  213. =item kICNewsHeaders
  214.  
  215. =item kICMapping
  216.  
  217. =item kICCharacterSet
  218.  
  219. =item kICHelper
  220.  
  221. =item kICServices
  222.  
  223. =item kICNewMailFlashIcon
  224.  
  225. =item kICNewMailDialog
  226.  
  227. =item kICNewMailPlaySound
  228.  
  229. =item kICNewMailSoundName
  230.  
  231. =item kICWebBackgroundColour
  232.  
  233. =item kICNoProxyDomains
  234.  
  235. =item kICUseSocks
  236.  
  237. =item kICSocksHost
  238.  
  239. =item kICUseHTTPProxy
  240.  
  241. =item kICHTTPProxyHost
  242.  
  243. =item kICUseFTPProxy
  244.  
  245. =item kICFTPProxyHost
  246.  
  247. =item kICFTPProxyUser
  248.  
  249. =item kICFTPProxyPassword
  250.  
  251. =item kICFTPProxyAccount
  252.  
  253. Internet Config settings.
  254.  
  255. =cut
  256. sub kICRealName ()                 { "RealName"; }
  257. sub kICEmail ()                    { "Email"; }
  258. sub kICMailAccount ()              { "MailAccount"; }
  259. sub kICMailPassword ()             { "MailPassword"; }
  260. sub kICNewsAuthUsername ()         { "NewsAuthUsername"; }
  261. sub kICNewsAuthPassword ()         { "NewsAuthPassword"; }
  262. sub kICArchiePreferred ()          { "ArchiePreferred"; }
  263. sub kICArchieAll ()                { "ArchieAll"; }
  264. sub kICUMichPreferred ()           { "UMichPreferred"; }
  265. sub kICUMichAll ()                 { "UMichAll"; }
  266. sub kICInfoMacPreferred ()         { "InfoMacPreferred"; }
  267. sub kICInfoMacAll ()               { "InfoMacAll"; }
  268. sub kICPhHost ()                   { "PhHost"; }
  269. sub kICWhoisHost ()                { "WhoisHost"; }
  270. sub kICFingerHost ()               { "FingerHost"; }
  271. sub kICFTPHost ()                  { "FTPHost"; }
  272. sub kICTelnetHost ()               { "TelnetHost"; }
  273. sub kICSMTPHost ()                 { "SMTPHost"; }
  274. sub kICNNTPHost ()                 { "NNTPHost"; }
  275. sub kICGopherHost ()               { "GopherHost"; }
  276. sub kICLDAPServer ()               { "LDAPServer"; }
  277. sub kICLDAPSearchbase ()           { "LDAPSearchbase"; }
  278. sub kICWWWHomePage ()              { "WWWHomePage"; }
  279. sub kICWAISGateway ()              { "WAISGateway"; }
  280. sub kICListFont ()                 { "ListFont"; }
  281. sub kICScreenFont ()               { "ScreenFont"; }
  282. sub kICPrinterFont ()              { "PrinterFont"; }
  283. sub kICTextCreator ()              { "TextCreator"; }
  284. sub kICBinaryTypeCreator ()        { "BinaryTypeCreator"; }
  285. sub kICDownloadFolder ()           { "DownloadFolder"; }
  286. sub kICSignature ()                { "Signature"; }
  287. sub kICOrganization ()             { "Organization"; }
  288. sub kICPlan ()                     {  "Plan"; }
  289. sub kICQuotingString ()            { "QuotingString"; }
  290. sub kICMailHeaders ()              { "MailHeaders"; }
  291. sub kICNewsHeaders ()              { "NewsHeaders"; }
  292. sub kICMapping ()                  { "Mapping"; }
  293. sub kICCharacterSet ()             { "CharacterSet"; }
  294. sub kICHelper ()                   { "Helper•"; }
  295. sub kICServices ()                 { "Services"; }
  296. sub kICNewMailFlashIcon ()         { "NewMailFlashIcon"; }
  297. sub kICNewMailDialog ()            { "NewMailDialog"; }
  298. sub kICNewMailPlaySound ()         { "NewMailPlaySound"; }
  299. sub kICNewMailSoundName ()         { "NewMailSoundName"; }
  300. sub kICWebBackgroundColour ()      { "WebBackgroundColour"; }
  301. sub kICNoProxyDomains ()           { "NoProxyDomains"; }
  302. sub kICUseSocks ()                 { "UseSocks"; }
  303. sub kICSocksHost ()                { "SocksHost"; }
  304. sub kICUseHTTPProxy ()             { "UseHTTPProxy"; }
  305. sub kICHTTPProxyHost ()            { "HTTPProxyHost"; }
  306. sub kICUseFTPProxy ()              { "UseFTPProxy"; }
  307. sub kICFTPProxyHost ()             { "FTPProxyHost"; }
  308. sub kICFTPProxyUser ()             { "FTPProxyUser"; }
  309. sub kICFTPProxyPassword ()         { "FTPProxyPassword"; }
  310. sub kICFTPProxyAccount ()          { "FTPProxyAccount"; }
  311.  
  312.  
  313. =item ICmap_binary
  314.  
  315. =item ICmap_resource_fork
  316.  
  317. =item ICmap_data_fork
  318.  
  319. =item ICmap_post
  320.  
  321. =item ICmap_not_incoming
  322.  
  323. =item ICmap_not_outgoing
  324.  
  325. =item ICservices_tcp
  326.  
  327. =item ICservices_udp
  328.  
  329. =item icNoPerm
  330.  
  331. =item icReadOnlyPerm
  332.  
  333. =item icReadWritePerm
  334.  
  335. Various constants.
  336.  
  337. =cut
  338. sub ICmap_binary ()                { 0x00000001; }
  339. sub ICmap_resource_fork ()         { 0x00000002; }
  340. sub ICmap_data_fork ()             { 0x00000004; }
  341. sub ICmap_post ()                  { 0x00000008; }
  342. sub ICmap_not_incoming ()          { 0x00000010; }
  343. sub ICmap_not_outgoing ()          { 0x00000020; }
  344. sub ICservices_tcp ()              { 0x00000001; }
  345. sub ICservices_udp ()              { 0x00000002; }
  346. sub icNoPerm ()                    { 0; }
  347. sub icReadOnlyPerm ()              { 1; }
  348. sub icReadWritePerm ()             { 2; }
  349.  
  350. =back
  351.  
  352. =cut
  353.  
  354. bootstrap Mac::InternetConfig;
  355.  
  356. sub ICFindConfigFile {
  357.    my($inst, @folders) = @_;
  358.    ICGeneralFindConfigFile($inst, 1, 0, @folders);
  359. }
  360.  
  361. sub ICFindUserConfigFile {
  362.    my($inst, @folders) = @_;
  363.    ICGeneralFindConfigFile($inst, 0, 0, @folders);
  364. }
  365.  
  366. package Mac::InternetConfig::_Raw;
  367.  
  368. BEGIN {
  369.    use Tie::Hash  ();
  370.    import Mac::InternetConfig;
  371.    import Mac::InternetConfig qw($ICInstance);
  372.  
  373.    use vars qw(@ISA);
  374.    
  375.    @ISA = qw(Tie::Hash);
  376. }
  377.  
  378. sub TIEHASH {
  379.    my($package) = @_;
  380.    
  381.    my($enum) = 0;
  382.    ICFindConfigFile($ICInstance);
  383.    
  384.    bless \$enum, $package;
  385. }
  386.  
  387. sub DESTROY {
  388. }
  389.  
  390. sub FETCH {
  391.    my($me, $key) = @_;
  392.    
  393.    ICGetPref($ICInstance, $key);
  394. }
  395.  
  396. sub STORE {
  397.    my($me, $key, @value) = @_;
  398.    
  399.    ICSetPref($ICInstance, $key, @value);
  400. }
  401.  
  402. sub DELETE {
  403.    my($me, $key) = @_;
  404.    
  405.    ICDeletePref($ICInstance, $key);
  406. }
  407.  
  408. sub FIRSTKEY {
  409.    my($me) = @_;
  410.    
  411.    $$me = 0;
  412.    
  413.    NEXTKEY $me;
  414. }
  415.  
  416. sub NEXTKEY {
  417.    my($me) = @_;
  418.  
  419.    ++$$me;
  420.    
  421.    ICBegin($ICInstance, icReadOnlyPerm());
  422.    my($key) = ICGetIndPref($ICInstance, $$me);
  423.    ICEnd($ICInstance);
  424.    
  425.    $key;
  426. }
  427.  
  428. package Mac::InternetConfig::_Map;
  429.  
  430. BEGIN {
  431.    use Tie::Hash  ();
  432.    use Mac::Types;
  433.    use Mac::Memory qw(DisposeHandle);
  434.    import Mac::InternetConfig;
  435.    import Mac::InternetConfig qw($ICInstance);
  436.  
  437.    use vars qw(@ISA %ictypes %ICPack %ICUnpack);
  438.    
  439.    @ISA = qw(Tie::Hash);
  440. }
  441.  
  442. sub new {
  443.    my($package,$blob) = @_;
  444.    
  445.    bless { entries => new Handle($blob) }, $package;
  446. }
  447.  
  448. sub TIEHASH {
  449.    my($package,$blob) = @_;
  450.    
  451.    if (ref($blob)) {
  452.       return $blob;
  453.    } else {
  454.       return new($package, $blob);
  455.    }
  456. }
  457.  
  458. sub DESTROY {
  459.    my($my) = @_;
  460.    
  461.    DisposeHandle($my->{entries});
  462. }
  463.  
  464. sub FETCH {
  465.    my($my, $key) = @_;
  466.    
  467.    if (ref($key) eq "ICMapEntry") { # dummy case
  468.       return $key;
  469.    } elsif (ref($key)) {   # [type, creator, optionally name]
  470.       return ICMapEntriesTypeCreator($ICInstance, $my->{entries}, @$key);
  471.    } else {          # File name
  472.       return ICMapEntriesFilename($ICInstance, $my->{entries}, $key);
  473.    }
  474. }
  475.  
  476. sub STORE {
  477.    my($my, $key, $value) = @_;
  478.    
  479.    $key = $my->FETCH($key) unless ref($key) eq "ICMapEntry";
  480.    my($pos) = Mac::InternetConfig::_ICMapFind($ICInstance, $my->{entries}, $key);
  481.    if (defined $pos) {
  482.       ICSetMapEntry($ICInstance, $my->{entries}, $pos, $value);
  483.    } else {
  484.       ICAddMapEntry($ICInstance, $my->{entries}, $value);
  485.    }
  486. }
  487.  
  488. sub DELETE {
  489.    my($my, $key) = @_;
  490.    
  491.    $key = $my->FETCH($key) unless ref($key) eq "ICMapEntry";
  492.    my($pos) = Mac::InternetConfig::_ICMapFind($ICInstance, $my->{entries}, $key);
  493.    if (defined $pos) {
  494.       ICDeleteMapEntry($ICInstance, $my->{entries}, $pos);
  495.    } 
  496. }
  497.  
  498. sub FIRSTKEY {
  499.    my($my) = @_;
  500.    
  501.    $my->{index} = 0;
  502.    
  503.    return scalar(ICGetIndMapEntry($ICInstance, $my->{entries}, $my->{index}));
  504. }
  505.  
  506. sub NEXTKEY {
  507.    my($my) = @_;
  508.    
  509.    return scalar(ICGetIndMapEntry($ICInstance, $my->{entries}, ++$my->{index}));
  510. }
  511.  
  512. package Mac::InternetConfig::_Cooked;
  513.  
  514. BEGIN {
  515.    use Tie::Hash  ();
  516.    use Mac::Types;
  517.    use Mac::Memory();
  518.    import Mac::InternetConfig;
  519.    import Mac::InternetConfig qw($ICInstance);
  520.  
  521.    use vars qw(@ISA %ictypes %ICPack %ICUnpack);
  522.    
  523.    @ISA = qw(Tie::Hash);
  524. }
  525.  
  526. %ictypes = (
  527.    kICRealName()           => 'STR ',
  528.    kICEmail()              => 'STR ',
  529.    kICMailAccount()        => 'STR ',
  530.    kICMailPassword()       => 'STR ',
  531.    kICNewsAuthUsername()   => 'STR ',
  532.    kICNewsAuthPassword()   => 'STR ',
  533.    kICArchiePreferred()    => 'STR ',
  534.    kICArchieAll()          => 'STR#',
  535.    kICUMichPreferred()     => 'STR ',
  536.    kICUMichAll()           => 'STR#',
  537.    kICInfoMacPreferred()   => 'STR ',
  538.    kICInfoMacAll()         => 'STR#',
  539.    kICPhHost()             => 'STR ',
  540.    kICWhoisHost()          => 'STR ',
  541.    kICFingerHost()         => 'STR ',
  542.    kICFTPHost()            => 'STR ',
  543.    kICTelnetHost()         => 'STR ',
  544.    kICSMTPHost()           => 'STR ',
  545.    kICNNTPHost()           => 'STR ',
  546.    kICGopherHost()         => 'STR ',
  547.    kICLDAPServer()         => 'STR ',
  548.    kICLDAPSearchbase()     => 'STR ',
  549.    kICWWWHomePage()        => 'STR ',
  550.    kICWAISGateway()        => 'STR ',
  551.    kICListFont()           => 'ICFontRecord',
  552.    kICScreenFont()         => 'ICFontRecord',
  553.    kICPrinterFont()        => 'ICFontRecord',
  554.    kICTextCreator()        => 'ICAppSpec',
  555.    kICBinaryTypeCreator()  => 'ICFileInfo',
  556.    kICDownloadFolder()     => 'ICFileSpec',
  557.    kICSignature()          => 'TEXT',
  558.    kICOrganization()       => 'STR ',
  559.    kICPlan()               => 'TEXT',
  560.    kICQuotingString()      => 'STR ',
  561.    kICMailHeaders()        => 'TEXT',
  562.    kICNewsHeaders()        => 'TEXT',
  563.    kICMapping()            => 'ICMapEntries',
  564.    kICCharacterSet()       => 'ICCharTable',
  565.    kICHelper()             => 'ICAppSpec',
  566.    kICServices()           => 'ICServices',
  567.    kICNewMailFlashIcon()   => 'bool',
  568.    kICNewMailDialog()      => 'bool',
  569.    kICNewMailPlaySound()   => 'bool',
  570.    kICNewMailSoundName()   => 'STR ',
  571.    kICWebBackgroundColour()=> 'RGBColor',
  572.    kICNoProxyDomains()     => 'STR#',
  573.    kICUseSocks()           => 'bool',
  574.    kICSocksHost()          => 'STR ',
  575.    kICUseHTTPProxy()       => 'bool',
  576.    kICHTTPProxyHost()      => 'STR ',
  577.    kICUseFTPProxy()        => 'bool',
  578.    kICFTPProxyHost()       => 'STR ',
  579.    kICFTPProxyUser()       => 'STR ',
  580.    kICFTPProxyPassword()   => 'STR ',
  581.    kICFTPProxyAccount()    => 'STR ',
  582. );
  583.  
  584. sub _PackICFontRecord {
  585.    my($size,$face,$font) = @_;
  586.    return pack("sCx", $size, $face) . MacPack('STR ', $font);
  587. }
  588.  
  589. sub _UnpackICFontRecord {
  590.    my($blob) = @_;
  591.  
  592.    return (unpack("sC", $blob), MacUnpack('STR ', substr($blob, 4)));
  593. }
  594.  
  595. sub _PackICAppSpec {
  596.    my($type,$name) = @_;
  597.    return MacPack('type', $type) . MacPack('STR ', $name);
  598. }
  599.  
  600. sub _UnpackICAppSpec {
  601.    my($blob) = @_;
  602.  
  603.    return (MacUnpack('type', $blob), MacUnpack('STR ', substr($blob, 4)));
  604. }
  605.  
  606. sub _PackICFileInfo {
  607.    my($type,$creator,$name) = @_;
  608.    return MacPack('type', $type) . MacPack('type', $creator) . MacPack('STR ', $name);
  609. }
  610.  
  611. sub _UnpackICFileInfo {
  612.    my($blob) = @_;
  613.  
  614.    return (MacUnpack('type', $blob), MacUnpack('type', substr($blob, 4, 4)), MacUnpack('STR ', substr($blob, 8)));
  615. }
  616.  
  617. sub _PackICFileSpec {
  618.    my($vol, $creation, $spec, $alias) = @_;
  619.    $vol = substr(MacPack('STR ', $vol) . ('\0' x 32), 0, 32);
  620.    return $vol . MacPack('long', $creation) . $spec . $alias->get;
  621. }
  622.  
  623. sub _UnpackICFileSpec {
  624.    my($blob) = @_;
  625.  
  626.    return (
  627.       MacUnpack('STR ', $blob), 
  628.       MacUnpack('long', substr($blob, 32, 4)), 
  629.       MacUnpack('fss ', substr($blob, 36, 70)),
  630.       new Handle(substr($blob, 106)));
  631. }
  632.  
  633. sub _UnpackICMapEntries {
  634.    my($blob) = @_;
  635.  
  636.    return new Mac::InternetConfig::_Map $blob;
  637. }
  638.  
  639. %ICPack = (
  640.    ICFileInfo     => \&_PackICFileInfo,
  641.    ICFontRecord   => \&_PackICFontRecord,
  642.    ICAppSpec      => \&_PackICAppSpec,
  643.    ICFileSpec     => \&_PackICFileSpec,
  644. );
  645.  
  646. %ICUnpack = (
  647.    ICFileInfo     => \&_UnpackICFileInfo,
  648.    ICFontRecord   => \&_UnpackICFontRecord,
  649.    ICAppSpec      => \&_UnpackICAppSpec,
  650.    ICFileSpec     => \&_UnpackICFileSpec,
  651.    ICMapEntries   => \&_UnpackICMapEntries,
  652. );
  653.  
  654. sub TIEHASH {
  655.    my($package) = @_;
  656.    
  657.    bless {}, $package;
  658. }
  659.  
  660. sub DESTROY {
  661.    # Do *not* inherit _Raw::DESTROY
  662. }
  663.  
  664. sub FETCH {
  665.    my($me, $key) = @_;
  666.    
  667.    my($data) = $RawInternetConfig{$key};
  668.    if ($ictypes{$key}) {
  669.       return MacUnpack(\%ICUnpack, $ictypes{$key}, $data);
  670.    } else {
  671.       return $data;
  672.    }
  673. }
  674.  
  675. sub STORE {
  676.    my($me, $key, @value) = @_;
  677.    
  678.    if ($ictypes{$key}) {
  679.       $RawInternetConfig{$key} = MacPack(\%ICPack, $ictypes{$key}, @value);
  680.    } else {
  681.       $RawInternetConfig{$key} = $value[0];
  682.    }
  683. }
  684.  
  685. sub FIRSTKEY {
  686.     Mac::InternetConfig::_Raw::FIRSTKEY(tied(%RawInternetConfig));
  687. }
  688.  
  689. sub NEXTKEY {
  690.    Mac::InternetConfig::_Raw::NEXTKEY(tied(%RawInternetConfig));
  691. }
  692.  
  693. package Mac::InternetConfig;
  694.  
  695. =head2 Variables
  696.  
  697. =over 4
  698.  
  699. =item $ICInstance
  700.  
  701. The instance of the Internet Config database.
  702.  
  703. =item %RawInternetConfig
  704.  
  705. Access the raw, uninterpreted value of an Internet Config setting.
  706.  
  707. =item %InternetConfig
  708.  
  709. Access a sane Perl version of one of the more common Internet Config settings.
  710.  
  711. =item %InternetConfigMap
  712.  
  713. Access the Internet Config file map to:
  714.  
  715. =over 4
  716.  
  717. =item 
  718.  
  719. Determine the file type and creator for a newly created file:
  720.  
  721.    $map = $InternetConfigMap{"output.html"}; 
  722.    
  723. =item
  724.  
  725. Determine the extension to use for some type/creator combination:
  726.  
  727.    $map = $InternetConfigMap{["WDBN", "MSWD"]};
  728.  
  729. =back
  730.  
  731. =back
  732.  
  733. =cut
  734. $ICInstance = ICStart();
  735.  
  736. tie %RawInternetConfig, q(Mac::InternetConfig::_Raw);
  737. tie %InternetConfig,    q(Mac::InternetConfig::_Cooked);
  738. tie %InternetConfigMap, q(Mac::InternetConfig::_Map), $InternetConfig{kICMapping()};
  739.  
  740. =include InternetConfig.xs
  741.  
  742. =cut
  743.  
  744. END {
  745.    ICStop($ICInstance);
  746. }
  747.  
  748. 1;
  749.  
  750. __END__
  751.