RbBFBlokProjPSIVStrn2005.04 ACnmStrnAChpStrnACsvStrnVer1Strn1 Ver2Strn0 Ver3Strn0 RelsStrn0 NnRlStrn0 RegnStrnSVerStrnLVerStrnIVerStrnaiviInt DVewInt 'prTpInt DLanInt CLanInt DEncInt BflgInt IconGrupEndGInt MacCStrnBMacStrnMy App (Classic)BCarStrnMy Application BCMOStrnMy Application BSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrnMy Application.exe BMDIInt BL86Strn MyApplication PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj2 NameStrnApp ContInt paswStrnbClsInt SuprStrn Application bNtrInt bApOInt CompStrnPDefGrup$nameStrnMenuBar PValInt GEndGInt VwBhGrupEndGInt CnstGrupEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0pltfInt langInt defnStrnCmd+Q EndGInt EndGInt CnstGrupEncoInt nameStrn kFileQuit typeInt defnStrnQuitflagInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt EndGInt CnstGrup EncoInt nameStrn kEditClear typeInt defnStrnClear flagInt CInsGrup0 pltfInt langInt defnStrn&Delete EndGInt CInsGrup0 pltfInt langInt defnStrn&Delete EndGInt EndGInt PadnPadnd****************************************************************************************************BlokpVew'LNameStrnWindow1 ContInt paswStrnbClsInt SuprStrnWindow bNtrInt CompStrnPDefGrup0 nameStrnMenuBar PValStrn 402999295 EndGInt PDefGrup( nameStrn MacProcID PValInt EndGInt PDefGrup4nameStrn BalloonHelp EncoInt PValStrnEndGInt PDefGrup0nameStrnMinimizeButton PValStrnTrueEndGInt PDefGrup4nameStrnMaximizeButton PValStrnFalse EndGInt PDefGrup0nameStrn LiveResize PValStrnFalse EndGInt PDefGrup0nameStrn Resizeable PValStrnFalse EndGInt PDefGrup,nameStrn CloseButton PValStrnTrueEndGInt PDefGrup0nameStrnMenuBarVisible PValStrnTrueEndGInt PDefGrup0nameStrn FullScreen PValStrnFalse EndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup8nameStrnTitle EncoInt PValStrnUntitledEndGInt PDefGrup$nameStrnBackdropPValStrnEndGInt PDefGrup(nameStrn BackColor PValInt EndGInt PDefGrup0nameStrn HasBackColorPValStrnFalse EndGInt PDefGrup0nameStrn Composite PValStrnFalse EndGInt PDefGrup$nameStrnFrame PValInt EndGInt PDefGrup(nameStrn MaxHeight PValInt }EndGInt PDefGrup$nameStrnMaxWidthPValInt }EndGInt PDefGrup(nameStrn MinHeight PValInt @EndGInt PDefGrup$ nameStrnMinWidthPValInt @EndGInt PDefGrup$!nameStrnHeight PValInt ,EndGInt !PDefGrup$"nameStrnWidth PValInt ,EndGInt "PDefGrup(#nameStrn Placement PValInt EndGInt #VwBhGrup l$VwPrGrup0%NameStrnNameVsblInt PrGpStrnID EndGInt %VwPrGrup8&NameStrn Interfaces VsblInt PrGpStrnID EndGInt &VwPrGrup4'NameStrnSuper VsblInt PrGpStrnID EndGInt 'VwPrGrupL(NameStrn Placement VsblInt PrGpStrnPositionPValStrn0 EndGInt (VwPrGrupH)NameStrnWidth VsblInt PrGpStrnPositionPValStrn300 EndGInt )VwPrGrupH*NameStrnHeight VsblInt PrGpStrnPositionPValStrn300 EndGInt *VwPrGrupH+NameStrnMinWidthVsblInt PrGpStrnPositionPValStrn64 EndGInt +VwPrGrupL,NameStrn MinHeight VsblInt PrGpStrnPositionPValStrn64 EndGInt ,VwPrGrupL-NameStrnMaxWidthVsblInt PrGpStrnPositionPValStrn32000 EndGInt -VwPrGrupP.NameStrn MaxHeight VsblInt PrGpStrnPositionPValStrn32000 EndGInt .VwPrGrupL/NameStrnFrame VsblInt PrGpStrn Appearance PValStrn0 EndGInt /VwPrGrupT0NameStrn Composite VsblInt PrGpStrn Appearance PValStrnFalse EndGInt 0VwPrGrupT1NameStrn HasBackColorVsblInt PrGpStrn Appearance PValStrnFalse EndGInt 1VwPrGrupT2NameStrn BackColor VsblInt PrGpStrn Appearance PValStrn&hFFFFFFEndGInt 2VwPrGrup<3NameStrnBackdropVsblInt PrGpStrn Appearance EndGInt 3VwPrGrupP4NameStrnTitle VsblInt PrGpStrn Appearance PValStrnUntitledEndGInt 4VwPrGrupL5NameStrnVisible VsblInt PrGpStrn Appearance PValStrnTrueEndGInt 5VwPrGrupT6NameStrn FullScreen VsblInt PrGpStrn Appearance PValStrnFalse EndGInt 6VwPrGrupT7NameStrnMenuBarVisible VsblInt PrGpStrn Appearance PValStrnTrueEndGInt 7VwPrGrupP8NameStrn CloseButton VsblInt PrGpStrn Appearance PValStrnTrueEndGInt 8VwPrGrupT9NameStrn Resizeable VsblInt PrGpStrn Appearance PValStrnFalse EndGInt 9VwPrGrupT:NameStrn LiveResize VsblInt PrGpStrn Appearance PValStrnFalse EndGInt :VwPrGrupX;NameStrnMaximizeButton VsblInt PrGpStrn Appearance PValStrnFalse EndGInt ;VwPrGrupTNameStrn MacProcID VsblInt PrGpStrn Appearance PValStrn0 EndGInt >VwPrGrup<?NameStrnMenuBar VsblInt PrGpStrn Appearance EndGInt ?EndGInt $CBhvGrup@SuprStrn FileSocket HInsGrupAnameStrnFileSendCompleteCompStrnsorcGruphBEncoInt srclStrnSub FileSendComplete() srclStrnMsgBox "File sent" srclStrnEnd Sub EndGInt BEndGInt AEndGInt @CBhvGrupCSuprStrn FileSocket HInsGrupDnameStrnDownloadCompleteCompStrnsorcGruppEEncoInt srclStrnSub DownloadComplete() srclStrnMsgBox "Download complete" srclStrnEnd Sub EndGInt EEndGInt DEndGInt CCBhvGrupxFSuprStrn PushButton HInsGrupDGnameStrnAction CompStrnsorcGrupHEncoInt srclStrn Sub Action()srclStrn Sender.Address = EditField1.TextsrclStrn-Dim f as FolderItem = GetOpenFolderItem( "" ) srclStrnsrclStrnif f = nil then return srclStrnsrclStrnSender.StartFileSend( f ) srclStrnEnd Sub EndGInt HEndGInt GEndGInt FCBhvGrupISuprStrn PushButton HInsGrupJnameStrnAction CompStrnsorcGrupXKEncoInt srclStrn Sub Action()srclStrnReceiver.Listen srclStrnEnd Sub EndGInt KEndGInt JEndGInt ICBhvGrupLSuprStrn PushButton HInsGrupMnameStrnAction CompStrnsorcGrup\NEncoInt srclStrn Sub Action()srclStrnServerSocket1.ListensrclStrnEnd Sub EndGInt NEndGInt MEndGInt LCBhvGrup@OSuprStrn ServerSocketHInsGrup PnameStrn AddSocket CompStrnsorcGrupQEncoInt srclStrn!Function AddSocket() As TCPSocket srclStrn7// Note, we're not going to get any notifications that srclStrn1// the file has been downloaded because we're not srclStrn2// subclassing the FileSocket and implementing its srclStrn:// DownloadComplete event. So if you want notifications, srclStrn8// then you should do that and return the subclass here.srclStrnreturn new FileSocket srclStrn End FunctionEndGInt QEndGInt PEndGInt OCBhvGrupRSuprStrn EditField EndGInt RCBhvGrupSSuprStrn StaticText EndGInt SCtrlGrupTcclsStrn FileSocket nameStrn FileSocket PDefGrup,UnameStrn TabPanelIndex PValInt EndGInt UPDefGrup8VnameStrn InitialParent EncoInt PValStrnEndGInt VPDefGrup WnameStrnPortPValInt EndGInt WPDefGrup<XnameStrnAddress EncoInt PValStrn 127.0.0.1 EndGInt XPDefGrup YnameStrnTop PValInt EndGInt YPDefGrup ZnameStrnLeftPValInt EndGInt ZPDefGrup8[nameStrn ControlOrderEncoInt PValStrn0 EndGInt [PDefGrup<\nameStrnSuper EncoInt PValStrn FileSocket EndGInt \PDefGrup$]nameStrnIndex PValInt EndGInt ]PDefGrup4^nameStrnNameEncoInt PValStrnSender EndGInt ^CBixInt EndGInt TCtrlGrup_cclsStrn FileSocket nameStrn FileSocket PDefGrup,`nameStrn TabPanelIndex PValInt EndGInt `PDefGrup8anameStrn InitialParent EncoInt PValStrnEndGInt aPDefGrup bnameStrnPortPValInt EndGInt bPDefGrup0cnameStrnAddress EncoInt PValStrnEndGInt cPDefGrup dnameStrnTop PValInt EndGInt dPDefGrup enameStrnLeftPValInt |EndGInt ePDefGrup8fnameStrn ControlOrderEncoInt PValStrn1 EndGInt fPDefGrup<gnameStrnSuper EncoInt PValStrn FileSocket EndGInt gPDefGrup$hnameStrnIndex PValInt EndGInt hPDefGrup4inameStrnNameEncoInt PValStrnReceiverEndGInt iCBixInt EndGInt _CtrlGrupjcclsStrn PushButton nameStrn PushButton PDefGrup8knameStrn InitialParent EncoInt PValStrnEndGInt kPDefGrup(lnameStrn Underline PValStrnEndGInt lPDefGrup$mnameStrnItalic PValStrnEndGInt mPDefGrup nnameStrnBoldPValStrnEndGInt nPDefGrup$onameStrnTextSizePValInt EndGInt oPDefGrup8pnameStrnTextFontEncoInt PValStrnTahoma EndGInt pPDefGrup0qnameStrnAutoDeactivate PValStrnTrueEndGInt qPDefGrup0rnameStrnHelpTag EncoInt PValStrnEndGInt rPDefGrup(snameStrnVisible PValStrnTrueEndGInt sPDefGrup(tnameStrnEnabled PValStrnTrueEndGInt tPDefGrup$unameStrnCancel PValStrnEndGInt uPDefGrup$vnameStrnDefault PValStrnEndGInt vPDefGrup4wnameStrnCaption EncoInt PValStrnSendEndGInt wPDefGrup,xnameStrn TabPanelIndex PValInt EndGInt xPDefGrup(ynameStrn LockBottom PValStrnEndGInt yPDefGrup(znameStrn LockRight PValStrnEndGInt zPDefGrup${nameStrnLockTop PValStrnEndGInt {PDefGrup$|nameStrnLockLeftPValStrnEndGInt |PDefGrup$}nameStrnHeight PValInt EndGInt }PDefGrup$~nameStrnWidth PValInt PEndGInt ~PDefGrup nameStrnTop PValInt EndGInt PDefGrup nameStrnLeftPValInt EndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn2 EndGInt PDefGrup<nameStrnSuper EncoInt PValStrn PushButton EndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup8nameStrnNameEncoInt PValStrn PushButton1 EndGInt CBixInt EndGInt jCtrlGrupcclsStrn PushButton nameStrn PushButton PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup(nameStrn Underline PValStrnEndGInt PDefGrup$nameStrnItalic PValStrnEndGInt PDefGrup nameStrnBoldPValStrnEndGInt PDefGrup$nameStrnTextSizePValInt EndGInt PDefGrup8nameStrnTextFontEncoInt PValStrnTahoma EndGInt PDefGrup0nameStrnAutoDeactivate PValStrnTrueEndGInt PDefGrup0nameStrnHelpTag EncoInt PValStrnEndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup(nameStrnEnabled PValStrnTrueEndGInt PDefGrup$nameStrnCancel PValStrnEndGInt PDefGrup$nameStrnDefault PValStrnEndGInt PDefGrup8nameStrnCaption EncoInt PValStrnListen EndGInt PDefGrup,nameStrn TabPanelIndex PValInt EndGInt PDefGrup(nameStrn LockBottom PValStrnEndGInt PDefGrup(nameStrn LockRight PValStrnEndGInt PDefGrup$nameStrnLockTop PValStrnEndGInt PDefGrup$nameStrnLockLeftPValStrnEndGInt PDefGrup$nameStrnHeight PValInt EndGInt PDefGrup$nameStrnWidth PValInt PEndGInt PDefGrup nameStrnTop PValInt EndGInt PDefGrup nameStrnLeftPValInt dEndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn3 EndGInt PDefGrup<nameStrnSuper EncoInt PValStrn PushButton EndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup8nameStrnNameEncoInt PValStrn PushButton2 EndGInt CBixInt EndGInt CtrlGrupcclsStrn PushButton nameStrn PushButton PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup(nameStrn Underline PValStrnEndGInt PDefGrup$nameStrnItalic PValStrnEndGInt PDefGrup nameStrnBoldPValStrnEndGInt PDefGrup$nameStrnTextSizePValInt EndGInt PDefGrup8nameStrnTextFontEncoInt PValStrnTahoma EndGInt PDefGrup0nameStrnAutoDeactivate PValStrnTrueEndGInt PDefGrup0nameStrnHelpTag EncoInt PValStrnEndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup(nameStrnEnabled PValStrnTrueEndGInt PDefGrup$nameStrnCancel PValStrnEndGInt PDefGrup$nameStrnDefault PValStrnEndGInt PDefGrup8nameStrnCaption EncoInt PValStrnServer EndGInt PDefGrup,nameStrn TabPanelIndex PValInt EndGInt PDefGrup(nameStrn LockBottom PValStrnEndGInt PDefGrup(nameStrn LockRight PValStrnEndGInt PDefGrup$nameStrnLockTop PValStrnEndGInt PDefGrup$nameStrnLockLeftPValStrnEndGInt PDefGrup$nameStrnHeight PValInt EndGInt PDefGrup$nameStrnWidth PValInt PEndGInt PDefGrup nameStrnTop PValInt EndGInt PDefGrup nameStrnLeftPValInt EndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn4 EndGInt PDefGrup<nameStrnSuper EncoInt PValStrn PushButton EndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup8nameStrnNameEncoInt PValStrn PushButton3 EndGInt CBixInt EndGInt CtrlGrupHcclsStrn ServerSocketnameStrn ServerSocketPDefGrup,nameStrn TabPanelIndex PValInt EndGInt PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup4nameStrnMaximumSocketsConnected PValInt EndGInt PDefGrup4nameStrnMinimumSocketsAvailable PValInt EndGInt PDefGrup nameStrnPortPValInt EndGInt PDefGrup nameStrnTop PValInt EndGInt PDefGrup nameStrnLeftPValInt EndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn5 EndGInt PDefGrup<nameStrnSuper EncoInt PValStrn ServerSocketEndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup<nameStrnNameEncoInt PValStrn ServerSocket1 EndGInt CBixInt EndGInt CtrlGrup cclsStrn EditField nameStrn EditField PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup4nameStrn DataField EncoInt PValStrnEndGInt PDefGrup4nameStrn DataSource EncoInt PValStrnEndGInt PDefGrup(nameStrn Alignment PValInt EndGInt PDefGrup(nameStrn AcceptTabs PValStrnEndGInt PDefGrup(nameStrn LimitText PValInt EndGInt PDefGrup$nameStrnReadOnlyPValStrnEndGInt PDefGrup,nameStrnMaskEncoInt PValStrnEndGInt PDefGrup8nameStrnTextEncoInt PValStrn 127.0.0.1 EndGInt PDefGrup(nameStrn Underline PValStrnEndGInt PDefGrup$nameStrnItalic PValStrnEndGInt PDefGrup nameStrnBoldPValStrnEndGInt PDefGrup$nameStrnTextSizePValInt EndGInt PDefGrup8nameStrnTextFontEncoInt PValStrnTahoma EndGInt PDefGrup0nameStrnAutoDeactivate PValStrnTrueEndGInt PDefGrup0nameStrnHelpTag EncoInt PValStrnEndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup0nameStrnFormat EncoInt PValStrnEndGInt PDefGrup(nameStrnEnabled PValStrnTrueEndGInt PDefGrup(nameStrn BackColor PValInt EndGInt PDefGrup(nameStrn TextColor PValInt EndGInt PDefGrup,nameStrn UseFocusRingPValStrnTrueEndGInt PDefGrup$nameStrnPasswordPValStrnEndGInt PDefGrup$nameStrnStyled PValStrnEndGInt PDefGrup4nameStrnScrollbarVertical PValStrnTrueEndGInt PDefGrup0nameStrnScrollbarHorizontal PValStrnEndGInt PDefGrup(nameStrn Multiline PValStrnEndGInt PDefGrup(nameStrnBorder PValStrnTrueEndGInt PDefGrup,nameStrn TabPanelIndex PValInt EndGInt PDefGrup(nameStrn LockBottom PValStrnEndGInt PDefGrup(nameStrn LockRight PValStrnEndGInt PDefGrup$nameStrnLockTop PValStrnEndGInt PDefGrup$nameStrnLockLeftPValStrnEndGInt PDefGrup$nameStrnHeight PValInt EndGInt PDefGrup$nameStrnWidth PValInt PEndGInt PDefGrup nameStrnTop PValInt uEndGInt PDefGrup nameStrnLeftPValInt LEndGInt PDefGrup(nameStrn ControlOrderPValInt EndGInt PDefGrup<nameStrnSuper EncoInt PValStrn EditField EndGInt PDefGrup$nameStrnIndex PValInt EndGInt PDefGrup8nameStrnNameEncoInt PValStrn EditField1 EndGInt CBixInt EndGInt CtrlGrupcclsStrn StaticText nameStrn StaticText PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup4nameStrn DataField EncoInt PValStrnEndGInt PDefGrup4nameStrn DataSource EncoInt PValStrnEndGInt PDefGrup(nameStrn Underline PValStrnEndGInt PDefGrup$nameStrnItalic PValStrnEndGInt PDefGrup nameStrnBoldPValStrnEndGInt PDefGrup$nameStrnTextSizePValInt EndGInt PDefGrup8nameStrnTextFontEncoInt PValStrnTahoma EndGInt PDefGrup0nameStrnAutoDeactivate PValStrnTrueEndGInt PDefGrup0nameStrnHelpTag EncoInt PValStrnEndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup(nameStrnEnabled PValStrnTrueEndGInt PDefGrup(nameStrn Multiline PValStrnEndGInt PDefGrup(nameStrn TextColor PValInt EndGInt PDefGrup(nameStrn TextAlign PValInt EndGInt PDefGrup4nameStrnTextEncoInt PValStrnAddress:EndGInt PDefGrup,nameStrn TabPanelIndex PValInt EndGInt PDefGrup(nameStrn LockBottom PValStrnEndGInt PDefGrup(nameStrn LockRight PValStrnEndGInt PDefGrup$nameStrnLockTop PValStrnEndGInt PDefGrup$nameStrnLockLeftPValStrnEndGInt PDefGrup$nameStrnHeight PValInt EndGInt PDefGrup$nameStrnWidth PValInt 5EndGInt PDefGrup  nameStrnTop PValInt uEndGInt  PDefGrup  nameStrnLeftPValInt EndGInt  PDefGrup( nameStrn ControlOrderPValInt EndGInt  PDefGrup< nameStrnSuper EncoInt PValStrn StaticText EndGInt  PDefGrup$ nameStrnIndex PValInt EndGInt  PDefGrup8nameStrnNameEncoInt PValStrn StaticText1 EndGInt CBixInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************BlokpMnuG NameStrnMenuBar1ContInt paswStrnMItmGruppspmuInt nameStrnFileMenutextStrn&File indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt EndGInt MItmGrup\spmuInt nameStrnEditMenutextStrn&Edit indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnEditUndotextStrn&Undo indxInt scutStrnCmd+Z MiSKStrnZ MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn UntitledMenu1 textStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCut textStrnCu&tindxInt scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCopytextStrn&Copy indxInt scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditPaste textStrn&Paste indxInt scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn UntitledMenu0 textStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditSelectAll textStrn Select &All indxInt scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt EndGInt PadnPadn****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj:T NameStrn FileSocket ContInt paswStrnbClsInt SuprStrn TCPSocket bNtrInt CompStrnHInsGrupnameStrn SendProgressCompStrnsorcGrupEncoInt srclStrnLFunction SendProgress(bytesSent as Integer, bytesLeft as Integer) As BooleansrclStrn/// Make sure we've got a file to send data from srclStrnif mFile = nil then return true srclStrnsrclStrn2// Check to see if we're at the end of the file. srclStrn2// If we are, then we want to close our connection srclStrnif mFile.EOF then srclStrnB// If we still have data left to send, we don't want to close the srclStrn>// connection, but we don't want to bother trying to send more srclStrn// data srclStrn+if me.BytesLeftToSend > 0 then return false srclStrnsrclStrn,// Wahoo, we're done sending our data, so wesrclStrn// can close the connection.srclStrnme.ClosesrclStrnsrclStrn)// Alert the user of this new information srclStrnFileSendCompletesrclStrnsrclStrn// And we're done srclStrn return true srclStrnend if srclStrnsrclStrn.// Send another chunk of data. We'll send out srclStrn,// the same amount that we were able to sendsrclStrn// across the wire. srclStrn#me.Write( mFile.Read( bytesSent ) ) srclStrn End FunctionEndGInt EndGInt HInsGrupnameStrn DataAvailable CompStrnsorcGrupEncoInt srclStrnSub DataAvailable() srclStrn.// We've got some data. Check to see if we've srclStrn"// got the header information yet. srclStrnif mFile = nil then srclStrn/// Let's see if we can get the file name. It's srclStrn+// the name followed by the first null byte srclStrndim filename as String srclStrn9dim nullPos as Integer = InStrB( me.Lookahead, Chr( 0 ) ) srclStrnsrclStrnif nullPos > 0 then srclStrnOfilename = DefineEncoding( LeftB( me.Lookahead, nullPos - 1 ), Encodings.UTF8 ) srclStrnelsesrclStrn'// We don't have the file name, so bail srclStrnreturn srclStrnend if srclStrnsrclStrnA// If we're here, then we can pull off the data from the filename srclStrncall me.Read( nullPos ) srclStrnsrclStrn*// Now that we've got the file name, let's srclStrn// make the file itself srclStrn0dim f as FolderItem = new FolderItem( filename )srclStrn mFile = f.CreateBinaryFile( "" )srclStrnsrclStrn*// If we couldn't make the file, close the srclStrn // connection srclStrnif mFile = nil then srclStrnme.ClosesrclStrnreturn srclStrnend if srclStrnend if srclStrnsrclStrn/// Ok, make sure we've got a file, just in case srclStrnif mFile = nil then return srclStrnsrclStrn// Read the data into the file srclStrnmFile.Write( me.ReadAll ) srclStrnEnd Sub EndGInt EndGInt HInsGruptnameStrnError CompStrnsorcGrup8EncoInt srclStrn Sub Error() srclStrn#// If we've got a file handle, then srclStrn(// let's close it -- but only if there'ssrclStrn// no more data left to read. srclStrn.if mFile <> nil and me.BytesAvailable > 0 then srclStrnmFile.Write( me.ReadAll ) srclStrnend if srclStrnsrclStrnif mFile <> nil thensrclStrn#// Alert the user that the download srclStrn#// is complete. Note that we don't srclStrn!// have to worry about this being srclStrn%// called for the file sender -- that srclStrn%// calls Close which doesn't fire the srclStrn// Error event. srclStrn mFile.Close srclStrnsrclStrnDownloadCompletesrclStrnelsesrclStrn-// Something's wrong, so fire the error event srclStrnError srclStrnend if srclStrnEnd Sub EndGInt EndGInt HInsGrup nameStrn SendCompleteCompStrnsorcGrup!EncoInt srclStrn(Sub SendComplete(userAborted as Boolean)srclStrnU// Since we've "implemented" this, the user can't implement it, which is what we want srclStrnEnd Sub EndGInt !EndGInt  HInsGrup"nameStrn Connected CompStrnsorcGrup#EncoInt srclStrnSub Connected() srclStrnU// Since we've "implemented" this, the user can't implement it, which is what we want srclStrnEnd Sub EndGInt #EndGInt "MethGrupd$nameStrn StartFileSend CompStrnsorcGrup%EncoInt srclStrn"Sub StartFileSend(f as FolderItem) srclStrn&if f = nil or not f.Exists then return srclStrnsrclStrn// Connect to the remote side srclStrn me.Connect srclStrnwhile not me.IsConnectedsrclStrnme.Poll srclStrn$if me.LastErrorCode <> 0 then returnsrclStrnwendsrclStrnsrclStrn=// We want to start sending a file. Note, this code does not srclStrn=// handle resource forks. For that, you need to archive the srclStrn'// file using something like MacBinary. srclStrnsrclStrn6// Try to open the file as a BinaryStream, but we only srclStrn(// need to open the file up for reading.srclStrn#mFile = f.OpenAsBinaryFile( false ) srclStrnsrclStrn+// If we can't open the file, then bail out srclStrnif mFile = nil then return srclStrnsrclStrn5// We're able to open the file -- let's send the file srclStrn2// header out so that the receiving end can create srclStrn7// the file properly. Our header is just the file name srclStrn5// followed by a null byte. We promise that the name srclStrn// will be in UTF8 srclStrn@me.Write( ConvertEncoding( f.Name + Chr( 0 ), Encodings.UTF8 ) )srclStrnsrclStrn4// Now we want to start sending the rest of the filesrclStrn1// over the wire. But we don't want to write out srclStrn:// a ton of data since that will take up a lot of RAM. So srclStrn6// we're going to send a 2 MB chunk. We don't need to srclStrn6// worry about whether the file is < 2 MB though since srclStrn7// the BinaryStream class will just send out the entire srclStrn// file itself. srclStrn)me.Write( mFile.Read( 2 * 1024 * 1024 ) ) srbpInt #srclStrnsrclStrn0// We'll continue sending the file data from thesrclStrn/// SendProgress event. This will keep our send srclStrn4// buffer busy without letting it empty completely, srclStrn7// which makes for the fastest file transfers possible. srclStrnEnd Sub EndGInt %EncoInt AlasStrnflagInt parmStrnf as FolderItem rsltStrnEndGInt $HookGrup\&nameStrnFileSendCompleteEncoInt flagInt !SySFInt parmStrnrsltStrnEndGInt &HookGrup\'nameStrnDownloadCompleteEncoInt flagInt !SySFInt parmStrnrsltStrnEndGInt 'HookGrupT(nameStrnError EncoInt flagInt !SySFInt parmStrnrsltStrnEndGInt (PropGrup@)EncoInt declStrnmFile As BinaryStream flagInt !EndGInt )VwBhGrup|*VwPrGrup0+NameStrnNameVsblInt PrGpStrnID EndGInt +VwPrGrup4,NameStrnIndex VsblInt PrGpStrnID EndGInt ,VwPrGrup4-NameStrnSuper VsblInt PrGpStrnID EndGInt -VwPrGrup<.NameStrn ControlOrderVsblInt PrGpStrnPositionEndGInt .VwPrGrup4/NameStrnLeftVsblInt PrGpStrnPositionEndGInt /VwPrGrup40NameStrnTop VsblInt PrGpStrnPositionEndGInt 0VwPrGrup81NameStrnAddress VsblInt PrGpStrnBehaviorEndGInt 1VwPrGrupD2NameStrnPortVsblInt PrGpStrnBehaviorPValStrn0 EndGInt 2EndGInt *PadnPadnD****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpUIsWnStGrupd3OTabGrup4ContInt eSptInt EndGInt 4LsLcStrn(Home) rEdtRectEndGInt 3PadnPadnX****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!