home *** CD-ROM | disk | FTP | other *** search
-
- =head1 NAME
-
- Mac::InternetConfig - Interface to Peter Lewis' and Quinns Internet Config system
-
- =head1 SYNOPSIS
-
-
- =head1 DESCRIPTION
-
- Access to the original Internet Config documentation is essential for proper use
- of these functions.
-
- =cut
-
- use strict;
-
- package Mac::InternetConfig;
-
- BEGIN {
- use Exporter ();
- use DynaLoader ();
-
- use vars qw(
- @ISA @EXPORT @EXPORT_OK
- %RawInternetConfig %InternetConfig %InternetConfigMap $ICInstance);
-
- @ISA = qw(Exporter DynaLoader);
- @EXPORT = qw(
- ICStart
- ICStop
- ICFindConfigFile
- ICFindUserConfigFile
- ICGeneralFindConfigFile
- ICChooseConfig
- ICChooseNewConfig
- ICGetConfigName
- ICGetConfigReference
- ICSetConfigReference
- ICGetSeed
- ICGetComponentInstance
- ICBegin
- ICGetPref
- ICSetPref
- ICCountPref
- ICGetIndPref
- ICDeletePref
- ICEnd
- ICEditPreferences
- ICParseURL
- ICLaunchURL
- ICMapFilename
- ICMapTypeCreator
- ICMapEntriesFilename
- ICMapEntriesTypeCreator
- ICCountMapEntries
- ICGetIndMapEntry
- ICGetMapEntry
- ICSetMapEntry
- ICDeleteMapEntry
- ICAddMapEntry
-
- %RawInternetConfig
- %InternetConfig
- %InternetConfigMap
-
- kICRealName
- kICEmail
- kICMailAccount
- kICMailPassword
- kICNewsAuthUsername
- kICNewsAuthPassword
- kICArchiePreferred
- kICArchieAll
- kICUMichPreferred
- kICUMichAll
- kICInfoMacPreferred
- kICInfoMacAll
- kICPhHost
- kICWhoisHost
- kICFingerHost
- kICFTPHost
- kICTelnetHost
- kICSMTPHost
- kICNNTPHost
- kICGopherHost
- kICLDAPServer
- kICLDAPSearchbase
- kICWWWHomePage
- kICWAISGateway
- kICListFont
- kICScreenFont
- kICPrinterFont
- kICTextCreator
- kICBinaryTypeCreator
- kICDownloadFolder
- kICSignature
- kICOrganization
- kICPlan
- kICQuotingString
- kICMailHeaders
- kICNewsHeaders
- kICMapping
- kICCharacterSet
- kICHelper
- kICServices
- kICNewMailFlashIcon
- kICNewMailDialog
- kICNewMailPlaySound
- kICNewMailSoundName
- kICWebBackgroundColour
- kICNoProxyDomains
- kICUseSocks
- kICSocksHost
- kICUseHTTPProxy
- kICHTTPProxyHost
- kICUseFTPProxy
- kICFTPProxyHost
- kICFTPProxyUser
- kICFTPProxyPassword
- kICFTPProxyAccount
- ICmap_binary
- ICmap_resource_fork
- ICmap_data_fork
- ICmap_post
- ICmap_not_incoming
- ICmap_not_outgoing
- ICservices_tcp
- ICservices_udp
- icNoPerm
- icReadOnlyPerm
- icReadWritePerm
- );
- @EXPORT_OK = qw(
- $ICInstance
- );
- }
-
- =head2 Constants
-
- =over 4
-
- =item kICRealName
-
- =item kICEmail
-
- =item kICMailAccount
-
- =item kICMailPassword
-
- =item kICNewsAuthUsername
-
- =item kICNewsAuthPassword
-
- =item kICArchiePreferred
-
- =item kICArchieAll
-
- =item kICUMichPreferred
-
- =item kICUMichAll
-
- =item kICInfoMacPreferred
-
- =item kICInfoMacAll
-
- =item kICPhHost
-
- =item kICWhoisHost
-
- =item kICFingerHost
-
- =item kICFTPHost
-
- =item kICTelnetHost
-
- =item kICSMTPHost
-
- =item kICNNTPHost
-
- =item kICGopherHost
-
- =item kICLDAPServer
-
- =item kICLDAPSearchbase
-
- =item kICWWWHomePage
-
- =item kICWAISGateway
-
- =item kICListFont
-
- =item kICScreenFont
-
- =item kICPrinterFont
-
- =item kICTextCreator
-
- =item kICBinaryTypeCreator
-
- =item kICDownloadFolder
-
- =item kICSignature
-
- =item kICOrganization
-
- =item kICPlan
-
- =item kICQuotingString
-
- =item kICMailHeaders
-
- =item kICNewsHeaders
-
- =item kICMapping
-
- =item kICCharacterSet
-
- =item kICHelper
-
- =item kICServices
-
- =item kICNewMailFlashIcon
-
- =item kICNewMailDialog
-
- =item kICNewMailPlaySound
-
- =item kICNewMailSoundName
-
- =item kICWebBackgroundColour
-
- =item kICNoProxyDomains
-
- =item kICUseSocks
-
- =item kICSocksHost
-
- =item kICUseHTTPProxy
-
- =item kICHTTPProxyHost
-
- =item kICUseFTPProxy
-
- =item kICFTPProxyHost
-
- =item kICFTPProxyUser
-
- =item kICFTPProxyPassword
-
- =item kICFTPProxyAccount
-
- Internet Config settings.
-
- =cut
- sub kICRealName () { "RealName"; }
- sub kICEmail () { "Email"; }
- sub kICMailAccount () { "MailAccount"; }
- sub kICMailPassword () { "MailPassword"; }
- sub kICNewsAuthUsername () { "NewsAuthUsername"; }
- sub kICNewsAuthPassword () { "NewsAuthPassword"; }
- sub kICArchiePreferred () { "ArchiePreferred"; }
- sub kICArchieAll () { "ArchieAll"; }
- sub kICUMichPreferred () { "UMichPreferred"; }
- sub kICUMichAll () { "UMichAll"; }
- sub kICInfoMacPreferred () { "InfoMacPreferred"; }
- sub kICInfoMacAll () { "InfoMacAll"; }
- sub kICPhHost () { "PhHost"; }
- sub kICWhoisHost () { "WhoisHost"; }
- sub kICFingerHost () { "FingerHost"; }
- sub kICFTPHost () { "FTPHost"; }
- sub kICTelnetHost () { "TelnetHost"; }
- sub kICSMTPHost () { "SMTPHost"; }
- sub kICNNTPHost () { "NNTPHost"; }
- sub kICGopherHost () { "GopherHost"; }
- sub kICLDAPServer () { "LDAPServer"; }
- sub kICLDAPSearchbase () { "LDAPSearchbase"; }
- sub kICWWWHomePage () { "WWWHomePage"; }
- sub kICWAISGateway () { "WAISGateway"; }
- sub kICListFont () { "ListFont"; }
- sub kICScreenFont () { "ScreenFont"; }
- sub kICPrinterFont () { "PrinterFont"; }
- sub kICTextCreator () { "TextCreator"; }
- sub kICBinaryTypeCreator () { "BinaryTypeCreator"; }
- sub kICDownloadFolder () { "DownloadFolder"; }
- sub kICSignature () { "Signature"; }
- sub kICOrganization () { "Organization"; }
- sub kICPlan () { "Plan"; }
- sub kICQuotingString () { "QuotingString"; }
- sub kICMailHeaders () { "MailHeaders"; }
- sub kICNewsHeaders () { "NewsHeaders"; }
- sub kICMapping () { "Mapping"; }
- sub kICCharacterSet () { "CharacterSet"; }
- sub kICHelper () { "Helper•"; }
- sub kICServices () { "Services"; }
- sub kICNewMailFlashIcon () { "NewMailFlashIcon"; }
- sub kICNewMailDialog () { "NewMailDialog"; }
- sub kICNewMailPlaySound () { "NewMailPlaySound"; }
- sub kICNewMailSoundName () { "NewMailSoundName"; }
- sub kICWebBackgroundColour () { "WebBackgroundColour"; }
- sub kICNoProxyDomains () { "NoProxyDomains"; }
- sub kICUseSocks () { "UseSocks"; }
- sub kICSocksHost () { "SocksHost"; }
- sub kICUseHTTPProxy () { "UseHTTPProxy"; }
- sub kICHTTPProxyHost () { "HTTPProxyHost"; }
- sub kICUseFTPProxy () { "UseFTPProxy"; }
- sub kICFTPProxyHost () { "FTPProxyHost"; }
- sub kICFTPProxyUser () { "FTPProxyUser"; }
- sub kICFTPProxyPassword () { "FTPProxyPassword"; }
- sub kICFTPProxyAccount () { "FTPProxyAccount"; }
-
-
- =item ICmap_binary
-
- =item ICmap_resource_fork
-
- =item ICmap_data_fork
-
- =item ICmap_post
-
- =item ICmap_not_incoming
-
- =item ICmap_not_outgoing
-
- =item ICservices_tcp
-
- =item ICservices_udp
-
- =item icNoPerm
-
- =item icReadOnlyPerm
-
- =item icReadWritePerm
-
- Various constants.
-
- =cut
- sub ICmap_binary () { 0x00000001; }
- sub ICmap_resource_fork () { 0x00000002; }
- sub ICmap_data_fork () { 0x00000004; }
- sub ICmap_post () { 0x00000008; }
- sub ICmap_not_incoming () { 0x00000010; }
- sub ICmap_not_outgoing () { 0x00000020; }
- sub ICservices_tcp () { 0x00000001; }
- sub ICservices_udp () { 0x00000002; }
- sub icNoPerm () { 0; }
- sub icReadOnlyPerm () { 1; }
- sub icReadWritePerm () { 2; }
-
- =back
-
- =cut
-
- bootstrap Mac::InternetConfig;
-
- sub ICFindConfigFile {
- my($inst, @folders) = @_;
- ICGeneralFindConfigFile($inst, 1, 0, @folders);
- }
-
- sub ICFindUserConfigFile {
- my($inst, @folders) = @_;
- ICGeneralFindConfigFile($inst, 0, 0, @folders);
- }
-
- package Mac::InternetConfig::_Raw;
-
- BEGIN {
- use Tie::Hash ();
- import Mac::InternetConfig;
- import Mac::InternetConfig qw($ICInstance);
-
- use vars qw(@ISA);
-
- @ISA = qw(Tie::Hash);
- }
-
- sub TIEHASH {
- my($package) = @_;
-
- my($enum) = 0;
- ICFindConfigFile($ICInstance);
-
- bless \$enum, $package;
- }
-
- sub DESTROY {
- }
-
- sub FETCH {
- my($me, $key) = @_;
-
- ICGetPref($ICInstance, $key);
- }
-
- sub STORE {
- my($me, $key, @value) = @_;
-
- ICSetPref($ICInstance, $key, @value);
- }
-
- sub DELETE {
- my($me, $key) = @_;
-
- ICDeletePref($ICInstance, $key);
- }
-
- sub FIRSTKEY {
- my($me) = @_;
-
- $$me = 0;
-
- NEXTKEY $me;
- }
-
- sub NEXTKEY {
- my($me) = @_;
-
- ++$$me;
-
- ICBegin($ICInstance, icReadOnlyPerm());
- my($key) = ICGetIndPref($ICInstance, $$me);
- ICEnd($ICInstance);
-
- $key;
- }
-
- package Mac::InternetConfig::_Map;
-
- BEGIN {
- use Tie::Hash ();
- use Mac::Types;
- use Mac::Memory qw(DisposeHandle);
- import Mac::InternetConfig;
- import Mac::InternetConfig qw($ICInstance);
-
- use vars qw(@ISA %ictypes %ICPack %ICUnpack);
-
- @ISA = qw(Tie::Hash);
- }
-
- sub new {
- my($package,$blob) = @_;
-
- bless { entries => new Handle($blob) }, $package;
- }
-
- sub TIEHASH {
- my($package,$blob) = @_;
-
- if (ref($blob)) {
- return $blob;
- } else {
- return new($package, $blob);
- }
- }
-
- sub DESTROY {
- my($my) = @_;
-
- DisposeHandle($my->{entries});
- }
-
- sub FETCH {
- my($my, $key) = @_;
-
- if (ref($key) eq "ICMapEntry") { # dummy case
- return $key;
- } elsif (ref($key)) { # [type, creator, optionally name]
- return ICMapEntriesTypeCreator($ICInstance, $my->{entries}, @$key);
- } else { # File name
- return ICMapEntriesFilename($ICInstance, $my->{entries}, $key);
- }
- }
-
- sub STORE {
- my($my, $key, $value) = @_;
-
- $key = $my->FETCH($key) unless ref($key) eq "ICMapEntry";
- my($pos) = Mac::InternetConfig::_ICMapFind($ICInstance, $my->{entries}, $key);
- if (defined $pos) {
- ICSetMapEntry($ICInstance, $my->{entries}, $pos, $value);
- } else {
- ICAddMapEntry($ICInstance, $my->{entries}, $value);
- }
- }
-
- sub DELETE {
- my($my, $key) = @_;
-
- $key = $my->FETCH($key) unless ref($key) eq "ICMapEntry";
- my($pos) = Mac::InternetConfig::_ICMapFind($ICInstance, $my->{entries}, $key);
- if (defined $pos) {
- ICDeleteMapEntry($ICInstance, $my->{entries}, $pos);
- }
- }
-
- sub FIRSTKEY {
- my($my) = @_;
-
- $my->{index} = 0;
-
- return scalar(ICGetIndMapEntry($ICInstance, $my->{entries}, $my->{index}));
- }
-
- sub NEXTKEY {
- my($my) = @_;
-
- return scalar(ICGetIndMapEntry($ICInstance, $my->{entries}, ++$my->{index}));
- }
-
- package Mac::InternetConfig::_Cooked;
-
- BEGIN {
- use Tie::Hash ();
- use Mac::Types;
- use Mac::Memory();
- import Mac::InternetConfig;
- import Mac::InternetConfig qw($ICInstance);
-
- use vars qw(@ISA %ictypes %ICPack %ICUnpack);
-
- @ISA = qw(Tie::Hash);
- }
-
- %ictypes = (
- kICRealName() => 'STR ',
- kICEmail() => 'STR ',
- kICMailAccount() => 'STR ',
- kICMailPassword() => 'STR ',
- kICNewsAuthUsername() => 'STR ',
- kICNewsAuthPassword() => 'STR ',
- kICArchiePreferred() => 'STR ',
- kICArchieAll() => 'STR#',
- kICUMichPreferred() => 'STR ',
- kICUMichAll() => 'STR#',
- kICInfoMacPreferred() => 'STR ',
- kICInfoMacAll() => 'STR#',
- kICPhHost() => 'STR ',
- kICWhoisHost() => 'STR ',
- kICFingerHost() => 'STR ',
- kICFTPHost() => 'STR ',
- kICTelnetHost() => 'STR ',
- kICSMTPHost() => 'STR ',
- kICNNTPHost() => 'STR ',
- kICGopherHost() => 'STR ',
- kICLDAPServer() => 'STR ',
- kICLDAPSearchbase() => 'STR ',
- kICWWWHomePage() => 'STR ',
- kICWAISGateway() => 'STR ',
- kICListFont() => 'ICFontRecord',
- kICScreenFont() => 'ICFontRecord',
- kICPrinterFont() => 'ICFontRecord',
- kICTextCreator() => 'ICAppSpec',
- kICBinaryTypeCreator() => 'ICFileInfo',
- kICDownloadFolder() => 'ICFileSpec',
- kICSignature() => 'TEXT',
- kICOrganization() => 'STR ',
- kICPlan() => 'TEXT',
- kICQuotingString() => 'STR ',
- kICMailHeaders() => 'TEXT',
- kICNewsHeaders() => 'TEXT',
- kICMapping() => 'ICMapEntries',
- kICCharacterSet() => 'ICCharTable',
- kICHelper() => 'ICAppSpec',
- kICServices() => 'ICServices',
- kICNewMailFlashIcon() => 'bool',
- kICNewMailDialog() => 'bool',
- kICNewMailPlaySound() => 'bool',
- kICNewMailSoundName() => 'STR ',
- kICWebBackgroundColour()=> 'RGBColor',
- kICNoProxyDomains() => 'STR#',
- kICUseSocks() => 'bool',
- kICSocksHost() => 'STR ',
- kICUseHTTPProxy() => 'bool',
- kICHTTPProxyHost() => 'STR ',
- kICUseFTPProxy() => 'bool',
- kICFTPProxyHost() => 'STR ',
- kICFTPProxyUser() => 'STR ',
- kICFTPProxyPassword() => 'STR ',
- kICFTPProxyAccount() => 'STR ',
- );
-
- sub _PackICFontRecord {
- my($size,$face,$font) = @_;
- return pack("sCx", $size, $face) . MacPack('STR ', $font);
- }
-
- sub _UnpackICFontRecord {
- my($blob) = @_;
-
- return (unpack("sC", $blob), MacUnpack('STR ', substr($blob, 4)));
- }
-
- sub _PackICAppSpec {
- my($type,$name) = @_;
- return MacPack('type', $type) . MacPack('STR ', $name);
- }
-
- sub _UnpackICAppSpec {
- my($blob) = @_;
-
- return (MacUnpack('type', $blob), MacUnpack('STR ', substr($blob, 4)));
- }
-
- sub _PackICFileInfo {
- my($type,$creator,$name) = @_;
- return MacPack('type', $type) . MacPack('type', $creator) . MacPack('STR ', $name);
- }
-
- sub _UnpackICFileInfo {
- my($blob) = @_;
-
- return (MacUnpack('type', $blob), MacUnpack('type', substr($blob, 4, 4)), MacUnpack('STR ', substr($blob, 8)));
- }
-
- sub _PackICFileSpec {
- my($vol, $creation, $spec, $alias) = @_;
- $vol = substr(MacPack('STR ', $vol) . ('\0' x 32), 0, 32);
- return $vol . MacPack('long', $creation) . $spec . $alias->get;
- }
-
- sub _UnpackICFileSpec {
- my($blob) = @_;
-
- return (
- MacUnpack('STR ', $blob),
- MacUnpack('long', substr($blob, 32, 4)),
- MacUnpack('fss ', substr($blob, 36, 70)),
- new Handle(substr($blob, 106)));
- }
-
- sub _UnpackICMapEntries {
- my($blob) = @_;
-
- return new Mac::InternetConfig::_Map $blob;
- }
-
- %ICPack = (
- ICFileInfo => \&_PackICFileInfo,
- ICFontRecord => \&_PackICFontRecord,
- ICAppSpec => \&_PackICAppSpec,
- ICFileSpec => \&_PackICFileSpec,
- );
-
- %ICUnpack = (
- ICFileInfo => \&_UnpackICFileInfo,
- ICFontRecord => \&_UnpackICFontRecord,
- ICAppSpec => \&_UnpackICAppSpec,
- ICFileSpec => \&_UnpackICFileSpec,
- ICMapEntries => \&_UnpackICMapEntries,
- );
-
- sub TIEHASH {
- my($package) = @_;
-
- bless {}, $package;
- }
-
- sub DESTROY {
- # Do *not* inherit _Raw::DESTROY
- }
-
- sub FETCH {
- my($me, $key) = @_;
-
- my($data) = $RawInternetConfig{$key};
- if ($ictypes{$key}) {
- return MacUnpack(\%ICUnpack, $ictypes{$key}, $data);
- } else {
- return $data;
- }
- }
-
- sub STORE {
- my($me, $key, @value) = @_;
-
- if ($ictypes{$key}) {
- $RawInternetConfig{$key} = MacPack(\%ICPack, $ictypes{$key}, @value);
- } else {
- $RawInternetConfig{$key} = $value[0];
- }
- }
-
- sub FIRSTKEY {
- Mac::InternetConfig::_Raw::FIRSTKEY(tied(%RawInternetConfig));
- }
-
- sub NEXTKEY {
- Mac::InternetConfig::_Raw::NEXTKEY(tied(%RawInternetConfig));
- }
-
- package Mac::InternetConfig;
-
- =head2 Variables
-
- =over 4
-
- =item $ICInstance
-
- The instance of the Internet Config database.
-
- =item %RawInternetConfig
-
- Access the raw, uninterpreted value of an Internet Config setting.
-
- =item %InternetConfig
-
- Access a sane Perl version of one of the more common Internet Config settings.
-
- =item %InternetConfigMap
-
- Access the Internet Config file map to:
-
- =over 4
-
- =item
-
- Determine the file type and creator for a newly created file:
-
- $map = $InternetConfigMap{"output.html"};
-
- =item
-
- Determine the extension to use for some type/creator combination:
-
- $map = $InternetConfigMap{["WDBN", "MSWD"]};
-
- =back
-
- =back
-
- =cut
- $ICInstance = ICStart();
-
- tie %RawInternetConfig, q(Mac::InternetConfig::_Raw);
- tie %InternetConfig, q(Mac::InternetConfig::_Cooked);
- tie %InternetConfigMap, q(Mac::InternetConfig::_Map), $InternetConfig{kICMapping()};
-
- =include InternetConfig.xs
-
- =cut
-
- END {
- ICStop($ICInstance);
- }
-
- 1;
-
- __END__
-