{****************************************************************************************************************************** DESCRIPTION: REW interface to Internet Config. COPYRIGHT: Copyright ©1999 TriVectus. All rights reserved. For internal use only. REQUIREMENTS: € Universal Interfaces 3.0.1+ € Internet Config API and libraries REVISION HISTORY: 1/5/98 Added REWOpenCompleteURL and fixed TP compatibility 7/15/98 Sadly, ported to PowerPC -only- along with all the other REW libs 6/25/99 Added REWGetDownloadFolder 7/16/99 Added REWDownloadFile; added REWHaveURLAccess, moved from REWLatestVersion 3/9/00 Updated to IC 2.0 API; added REWHaveIC (check this, and still check if REWInitIC returns true) ******************************************************************************************************************************} unit REWInternet; interface {$IFC UNDEFINED THINK_PASCAL} uses Types, Files, REWDebuggerUtils, URLAccess, REWUtilities, Folders; {$ENDC} function REWHaveIC: Boolean; //call first function REWInitIC: Boolean; //call second; check for true return value procedure REWKillIC; procedure REWOpenURL (theProtocol, theURL: Str255); procedure REWOpenCompleteURL (theURL: Str255); procedure REWEditInternetPreferences; function REWGetDownloadFolder(var theFolder: FSSpec): OSErr; procedure REWDownloadFile(whereTo: FSSpecPtr; theURL: Str255); {pass nil loc. for auto} function REWHaveURLAccess: Boolean; implementation uses InternetConfig; var gICInstanceGood: Boolean; gICInstance: ICInstance; procedure REWOpenCompleteURL (theURL: Str255); var start, fin: Longint; err: ICError; begin if not gICInstanceGood then Exit(REWOpenCompleteURL); start := 0; fin := length(theURL); err := ICLaunchURL(gICInstance, '', @theURL[1], length(theURL), start, fin); end; {REWOpenCompleteURL} procedure REWOpenURL (theProtocol, theURL: Str255); var start, fin: Longint; err: ICError; begin if not gICInstanceGood then Exit(REWOpenURL); theURL := concat(theProtocol, theURL); start := 0; fin := length(theURL); err := ICLaunchURL(gICInstance, '', @theURL[1], length(theURL), start, fin); end; {REWOpenURL} function REWHaveIC: Boolean; begin REWHaveIC := LongInt(@ICStart) <> kUnresolvedCFragSymbolAddress; end; {REWHaveIC} function REWInitIC: Boolean; var err, junk: ICError; begin err := ICStart(gICInstance, 'BWbw'); if err <> noErr then begin junk := ICStop(gICInstance); gICInstanceGood := false; REWInitIC := false; end {err <> noErr} else begin err := ICFindConfigFile(gICInstance, 0, nil); gICInstanceGood := true; REWInitIC := true; end; {err = noErr} end; {REWInitIC} procedure REWKillIC; var junk: ICError; begin if gICInstanceGood then junk := ICStop(gICInstance); end; {REWKillIC} procedure REWEditInternetPreferences; var junk: ICError; begin if gICInstanceGood then junk := ICEditPreferences(gICInstance, ''); end; {REWEditInternetPreferences} function REWGetDownloadFolder(var theFolder: FSSpec): OSErr; var err: ICError; attb: ICAttr; size: LongInt; data: ICFileSpec; begin size := sizeof(data); err := ICGetPref(gICInstance, kICDownloadFolder, attb, @data, size); if (err = noErr) or (err = ICTruncatedErr) then begin theFolder := data.fss; REWGetDownloadFolder := noErr; end else REWGetDownloadFolder := err; end; {REWGetDownloadFolder} procedure REWDownloadFile(whereTo: FSSpecPtr; theURL: Str255); var urlRef: URLReference; theCURL: Ptr; where: FSSpec; vRefNum: Integer; dirID: LongInt; err: OSErr; procedure CheckForErrors(theErr: OSErr); begin if theErr <> noErr then begin if urlRef <> nil then err := URLDisposeReference(urlRef); Exit(REWDownloadFile); end; {theErr <> noErr} end; {CheckForErrors} begin REWQDebugB('REWDownloadFile', theURL = ''); if whereTo <> nil then where := whereTo^ else begin REWZeroBlock(@where, sizeof(where)); err := REWGetDownloadFolder(where); if err <> noErr then begin err := FindFolder(kOnSystemDisk, kDesktopFolderType, false, vRefNum, dirID); err := FSMakeFSSpec(vRefNum, dirID, '', where); end; {err <> noErr} end; {whereTo = nil} theCURL := P2CStr(@theURL); urlRef := nil; err := URLNewReference(theCURL, urlRef); CheckForErrors(err); REWSetWatchCursor; err := URLSimpleDownload(theCURL, @where, nil, kURLExpandFileFlag + kURLDisplayProgressFlag, nil, nil); InitCursor; CheckForErrors(err); err := URLDisposeReference(urlRef); end; {REWDownloadFile} function REWHaveURLAccess: Boolean; begin REWHaveURLAccess := LongInt(@URLGetURLAccessVersion) <> kUnresolvedCFragSymbolAddress; end; {REWHaveURLAccess} end. {REWInternet}