// Text of project C:\Mis documentos\Nethopper JPEG\NetHopperJPEG.NTK written on: 12/06/02 23:56:50 // Beginning of text file constants.txt constant kCodeFrame:= defineGlobalConstant('MiFuncion1,func(data, offset, str) begin local strLength, i; strLength := StrLen(str); if length(data) >= offset + strLength then begin for i := 0 to strLength - 1 do if ExtractChar(data, offset + i) <> str[i] then return; true end end); defineglobalconstant('MiFuncion2, kfunc2:=func(bounds) begin local boundsRect; boundsRect := MakeBinary(8, 'boundsRect); StuffWord(boundsRect, 0, bounds.top); StuffWord(boundsRect, 2, bounds.left); StuffWord(boundsRect, 4, bounds.bottom); StuffWord(boundsRect, 6, bounds.right); boundsRect end ); defineglobalConstant('JPEGToBMP,func(ImageBin) begin local nc, depth, image; nc := GetGlobalVar('|NewtsCape:NewtsCape|); if nc and GetRoot().|NewtsCape:NewtsCape| then begin depth := Gestalt(16777219).screenDepth; if call kMiFuncion1 with (ImageBin, 6, "JFIF") then (image := nc.helperApps.|image/jpeg|.|JPEGConvert:NewtsCape|:?AddFile("image/jpeg", "untitled.jpg", ImageBin, {cacheOnly: true, bitsPerPixel: depth})); else (image := GetRoot().|NewtsCape:NewtsCape|:ConvertImage("image/gif", "untitled.gif", imageBin, {cacheOnly: true, bitsPerPixel: depth}, nil)); if image then begin return image end end ); constant imagen1:=GetBMPAsBits("imagen1.bmp"); constant imagen2:=GetBMPAsBits("imagen2.bmp"); // End of text file C:\Mis documentos\Nethopper JPEG\constants.txt // Beginning of text file NHJPEGViewer.txt InstallScript := func(partFrame, removeFrame) begin local Local1; Local1 := GetGlobalVar('|NH3RegMgr:ALLPEN|); if Local1 then Local1:RegMIMEDataViewer('|JPEGViewer:DPR|, kJPEGViewer); nil end; RemoveScript := func(removeFrame) /* we have to remove everything we did if we uninstall the hack */ begin local Local1; Local1 := GetGlobalVar('|NH3RegMgr:ALLPEN|); if Local1 then Local1:UnRegMIMEDataViewer('|JPEGViewer:DPR|, kJPEGViewer); nil end // End of text file C:\Mis documentos\Nethopper JPEG\NHJPEGViewer.txt // Beginning of text file kJPEGViewer.txt constant kJPEGViewer:= { codeframe:kCodeFrame, name:"JPEGViewer", types:[[pathExpr: '|image|, '|jpeg|],], preferencesform:nil, } // End of text file C:\Mis documentos\Nethopper JPEG\kJPEGViewer.txt // Beginning of file JPEGViewer.lyt JPEG := { mUpdateView: func() begin local Local1, Local2; if IsReadOnly(fTemplateFr.viewBounds) then (fTemplateFr.viewBounds := clone(fTemplateFr.viewBounds)); fTemplateFr.viewBounds.bottom := fTemplateFr.viewBounds.top + fTemplateFr.icon.bounds.bottom; fTemplateFr.viewBounds.right := fTemplateFr.viewBounds.left + fTemplateFr.icon.bounds.right; if fTemplateFr.fViewerContext and (fTemplateFr.fViewerContext.hrefOffset or StrFilled(fTemplateFr.fViewerContext.href)) then SetValue(self, 'viewFlags, self.viewFlags + 512); if fViewerContext and viewBounds.right - viewBounds.left < (:parent()).viewBounds.right - (:parent()).viewBounds.left then (if fTemplateFr.fViewerContext.alignment = 0 then begin Local1 := :parent():LocalBox(); viewBounds.left := viewBounds.left + 1; viewBounds.right := viewBounds.right + 1; end; else (if fTemplateFr.fViewerContext.alignment = 2 then begin Local1 := :parent():LocalBox(); Local2 := rinttol((Local1.right - (viewBounds.right - viewBounds.left)) / 2); viewBounds.left := viewBounds.left + Local2; viewBounds.right := viewBounds.right + Local2; end; else (if fTemplateFr.fViewerContext.alignment = 1 then begin Local1 := :parent():LocalBox(); Local2 := Local1.right - (viewBounds.right - viewBounds.left); viewBounds.left := viewBounds.left + Local2; viewBounds.right := viewBounds.right + Local2; end))); GetView(self):SyncView(); GetView(self):parent():?ReflowView(); :RedoChildren() end, fLastScrollAmount: nil, GuessViewBounds: func(Arg1) begin return SetBounds(0, 0, Arg1.right, Arg1.bottom) end, fScaleFactor: nil, fStreamDataWaiting: nil, fMaxBoundsFr: nil, kImages: { fHealthy:imagen1, fbroken:imagen2, fENoMem:nil }, fCancel: nil, imageView: nil, mDispatchURLandCoords: func(Arg1, Arg2) begin local Local1, Local2, Local3, Local4; Local3 := :GlobalBox(); Local1 := Arg1 - Local3.left; Local2 := Arg2 - Local3.top; Local1 := rinttol(1 / fTemplateFr.fScaleFactor * Local1); Local2 := rinttol(1 / fTemplateFr.fScaleFactor * Local2); Local4 := if fViewerContext.hrefOffset then :?GetOffsetText(targetDoc.allHyperLinks, fViewerContext.hrefOffset, fViewerContext.hrefRunLen); else fViewerContext.href; :?DispatchRawURL(Local4 & "?" & Local1 & "," & Local2) end, mCacheImage: func() begin local Local1, Local2; fTemplateFr.fCacheEntryFr := fTransCore_ROM:GetNewTransactionMgr(); if fTemplateFr.fCacheEntryFr then begin Local1 := clone(fTemplateFr.fContentFr); if fViewerContext then begin Local2 := if fViewerContext.altTextOffset then :?GetOffsetText(targetDoc.allText, fViewerContext.altTextOffset, fViewerContext.altTextRunLen); else fViewerContext.altText; Local1.transReq.fTitle := if StrFilled(Local2) then "Image - " & Local2; else "Image - No description - " & fSharedURLManipulator:ToString(fTemplateFr.fContentFr.transReq.targetURL); end; else (Local1.transReq.fTitle := "Image - No description - " & fSharedURLManipulator:ToString(fTemplateFr.fContentFr.transReq.targetURL)); Local1.type := 'cacheObject; Local1.inputStream := nil; Local1.cacheObject := {icon: fTemplateFr.icon}; fTemplateFr.fCacheEntryFr:CacheContent(Local1, fTemplateFr, 'mCacheImageCb) end end, viewFormat: 256, mCleanupAfterRead: func() begin fTemplateFr.fContentFr.inputStream:?Close(); fTemplateFr.fContentFr.inputStream := nil; fTemplateFr.fReadReq := nil; fTemplateFr.fReadCount := nil; fTemplateFr.fStartContext := nil; fTemplateFr.fStartMethod := nil; fTemplateFr.fStreamReadCount := nil; fTemplateFr.fStreamDataWaiting := nil; fTemplateFr.fImaging := 'read; fTemplateFr.fCancel := nil; if fStartContext and fStartMethod then AddDelayedSend(fStartContext, fStartMethod, [fTemplateFr.fError], 100); fTemplateFr.fError := nil end, SetViewerContext: func(Arg1) begin local Local1, Local2; fTemplateFr.fViewerContext := Arg1; if fTemplateFr.fViewerContext.border and fTemplateFr.fViewerContext.border > 0 then begin fTemplateFr.fBorder := true; AddDelayedCall(func() begin SetValue(self, 'viewFormat, self.viewFormat + 80) end, nil, 100) end end, ViewQuitScript: // must return the value of inherited:?ViewQuitScript() func() begin fcancel:=true; inherited:?ViewQuitScript(); end, fReadReq: nil, fImaging: nil, viewFlags: 513, GetHeadings: func() begin return {items: [], objects: []} end, mReadCb: func(Arg1) begin if fTemplateFr.fCancel then begin if fImaging then begin fTemplateFr.fError := -16005; :mCleanupAfterRead(); fTemplateFr.fFailureCause := "User cancelled/Stop() called"; :mNotifyError("Parece que Bien"); end; else begin :mCleanupAfterRead(); fTemplateFr.fContentFr := nil; fTemplateFr := nil; end; return; end; fTemplateFr.fReadCount := fTemplateFr.fReadCount + Arg1.bytesRead; if fTemplateFr.fStreamDataWaiting and fTemplateFr.fStreamDataWaiting > 1 then :SetTransactionStatus(fTemplateFr, {titleText: "Image Download Status", icon: kImages.fHealthy, statusText: "Loading image..." && fTemplateFr.fReadCount && "bytes read.", gauge: rinttol(fTemplateFr.fReadCount / length(Arg1.buffer) * 100)}); else :SetTransactionStatus(fTemplateFr, {titleText: "Image Download Status", icon: kImages.fHealthy, statusText: "Loading image..." && fTemplateFr.fReadCount && "bytes read."}); if Arg1.error = -1 then begin try SetLength(fImageBin, if fTemplateFr.fReadCount then fTemplateFr.fReadCount; else 0) onexception |evt.ex| do begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mCleanupAfterRead(); :mNotifyError("No Hay bastante memoria"); return; end; fTemplateFr.fContentFr.transReq.totalContentLen := fTemplateFr.fReadCount; fTemplateFr.fContentFr.transReq.dateDownloaded := TimeInSeconds(); :mHandleImage(); :mCleanupAfterRead() end; else (if Arg1.error and Arg1.error <> 0 then begin fTemplateFr.fError := Arg1.error; :mCleanupAfterRead(); fTemplateFr.fFailureCause := "Stream" && Arg1.error; :mNotifyError("Parece que mal") end; else fTemplateFr.fContentFr.inputStream:read(Arg1, self, 'mReadCb)) end, mCacheImageCb: func(Arg1) begin if fTemplateFr.fCacheEntryFr then begin fTemplateFr.fCacheEntryFr:Finalize(); fTemplateFr.fCacheEntryFr := nil end end , fContentFr: nil, viewBounds: {left: 0, top: 0, right: 26, bottom: 23}, mNotifyError: func(Arg1) begin :SetTransactionStatus(fTemplateFr, nil); if Arg1.icon then (fTemplateFr.icon := Arg1.icon); if Arg1.text then GetRoot():Notify(4, "Image Viewer", Arg1.text); :RedoChildren() end, stop: func() begin fTemplateFr.fCancel:=true end, mScaleImage: func() begin local Local1, Local2, Local3; if not HasSlot(fTemplateFr, 'icon) or not HasSlot(fTemplateFr.icon, 'bounds) then return; Local1 := fTemplateFr.icon.bounds; Local2 := if fMaxBoundsFr then clone(fMaxBoundsFr); else clone(Local1); if not fMaxBoundsFr then begin fTemplateFr.fScaleFactor := 1; if GetAppPrefs('|Image Viewer:NetHopper:ALLPEN|, '{tag: "Image Viewer:NetHopper:ALLPEN", fScaleB: true, fEnableImageMapsB: true}).fScaleB then begin Local3 := clone((:parent()).viewBounds); Local3.left := Local3.left + 2; Local3.top := Local2.top + 2; Local3.right := Local3.right - 2; Local3.bottom := Local2.bottom - 2; Local2 := FitToBox(Local2, Local3, 0); end; fTemplateFr.fScaleFactor := Local2.right / Local1.right; fTemplateFr.icon := clone(fTemplateFr.icon); fTemplateFr.icon.bounds := Local2; return; end; if GetAppPrefs('|Image Viewer:NetHopper:ALLPEN|, '{tag: "Image Viewer:NetHopper:ALLPEN", fScaleB: true, fEnableImageMapsB: true}).fScaleB then begin Local3 := clone((:parent()).viewBounds); Local3.left := Local3.left + 2; Local3.top := Local2.top + 2; Local3.right := Local3.right - 2; Local3.bottom := Local2.bottom - 2; Local2 := FitToBox(Local2, Local3, 0); end; fTemplateFr.fScaleFactor := Local2.right / Local1.right; fTemplateFr.icon := clone(fTemplateFr.icon); fTemplateFr.icon.bounds := Local2 end, fTemplateFr: nil, mHandleImage: func() begin if not GetGlobals().functions.PackRGB then :SetTransactionStatus(fTemplateFr, {titleText: "Image Download Status", icon: kImages.fHealthy, statusText: "Reading image..."}); else :SetTransactionStatus(fTemplateFr, nil); try fTemplateFr.icon := JPEGToBMP(fTemplateFr.fImageBin); fTemplateFr.fImageBin := nil; onexception |evt.ex.GIF.inf| do fTemplateFr.fFailureCause := CurrentException().name; onexception |evt.ex.GIF.fmt| do if CurrentException().name = '|evt.ex.GIF.fmt.notGIF| then begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mNotifyError("error 1"); :mUpdateView(); return; end; else begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mNotifyError("error 2"); :mUpdateView(); return; end; onexception |evt.ex.GIF.lzw| do begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mNotifyError("error 2"); :mUpdateView(); return; end; onexception |evt.ex.GIF.data| do begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mNotifyError("error 2"); :mUpdateView(); return; end; onexception |evt.ex.outofmem| do begin fTemplateFr.fFailureCause := SPrintObject(CurrentException().name) && CurrentException().error; if CurrentException().error = 0 then begin fTemplateFr.fError := -10617; :mNotifyError("error 2"); :mUpdateView(); return; end; else begin :mNotifyError("error 4"); fTemplateFr.fError := CurrentException().error; :mUpdateView(); return; end; end; onexception |evt.ex.fr.store| do begin fTemplateFr.fFailureCause := CurrentException().name; fTemplateFr.fError := CurrentException().error; :mNotifyError("error 5"); :mUpdateView(); return; end; onexception |evt.ex| do begin :mNotifyError("error 2"); :mUpdateView(); return; end; if not GetGlobals().functions.PackRGB then :SetTransactionStatus(fTemplateFr, nil); :mCacheImage(); if not Visible(:parent()) then return; :mScaleImage(); :mUpdateView() end, ViewScrollDownScript: func() begin local Local1, Local2, Local3; Local1 := :LocalBox(); Local2 := :parent():LocalBox(); if fLastScrollAmount and fLastScrollAmount < 0 then (Local3 := -1 * fLastScrollAmount); else (Local3 := :mCalcScrollAmount(Local1, Local2, 'down)); if Local3 > 0 then begin fLastScrollAmount := Local3; PlaySound(@85 /* {#9} */); :SetOrigin(0, viewOriginY + fLastScrollAmount); :SyncView(); nil end; else @657 /* {#8} >@567 */:PlayStopSound() end, fStartContext: nil, icon: imagen1, fViewerContext: nil, dispose: func() begin fTemplateFr.fCancel := true; fBorder := nil; fContentFr := nil; fFailureCause := nil; fImaging := nil; fMaxBoundsFr := nil; fScaleFactor := nil; fViewerContext := nil; fLastScrollAmount := nil end, ViewScrollUpScript: func() begin local Local1, Local2, Local3; Local1 := :LocalBox(); Local2 := :parent():LocalBox(); if viewOriginY = 0 then begin @657 /* {#8} >@567 */:PlayStopSound(); return; end; if fLastScrollAmount and fLastScrollAmount > 0 then (Local3 := -1 * fLastScrollAmount); else (Local3 := :mCalcScrollAmount(Local1, Local2, 'up)); if Local3 < 0 then begin fLastScrollAmount := Local3; PlaySound(@85 /* {#9} */); :SetOrigin(0, viewOriginY + fLastScrollAmount); :SyncView() end; else @657 /* {#8} >@567 */:PlayStopSound() end, fReadCount: nil, instantiate: func(Arg1) begin if fImaging then Throw('|evt.ex.fr|, -100001); fTemplateFr := self; fContentFr := Arg1; if fContentFr.type = 'cacheObject then (fImaging := 'readfromcache); else begin fStreamReadCount := 0; fImaging := 'instantiated end end, SetMaxBounds: func(Arg1) begin if fTemplateFr.fMaxBoundsFr and GetAppPrefs('|Image Viewer:NetHopper:ALLPEN|, '{tag: "Image Viewer:NetHopper:ALLPEN", fScaleB: true, fEnableImageMapsB: true}).fScaleB then (if Arg1.bottom - Arg1.top < fTemplateFr.fMaxBoundsFr.bottom - fTemplateFr.fMaxBoundsFr.top and Arg1.right - Arg1.left < fTemplateFr.fMaxBoundsFr.right - fTemplateFr.fMaxBoundsFr.left then (fTemplateFr.fMaxBoundsFr := Arg1)); else (fTemplateFr.fMaxBoundsFr := Arg1); nil end, fFailureCause: nil, textscript: func() begin "[JPEGIMAGE]/n" end, fStartMethod: nil, fError: nil, fImageBin: nil, ViewClickScript: func(Arg1) begin local Local1, Local2, Local3; if fTemplateFr.fViewerContext then (if fViewerContext.hrefOffset then (Local1 := :?GetOffsetText(targetDoc.allHyperLinks, fViewerContext.hrefOffset, fViewerContext.hrefRunLen)); else (Local1 := fViewerContext.href)); if Local1 and StrFilled(TrimString(Local1)) then begin :hilite(true); if fImaging = 'read or fImaging = 'readfromcache then (if fViewerContext.isMap then (if GetAppPrefs('|Image Viewer:NetHopper:ALLPEN|, '{tag: "Image Viewer:NetHopper:ALLPEN", fScaleB: true, fEnableImageMapsB: true}).fEnableImageMapsB then begin Local2 := GetPointsArray(Arg1); Local3 := length(Local2); if Local3 > 1 then :?mDispatchURLandCoords(Local2[Local3 - 1], Local2[Local3 - 2]); end; else GetRoot():Notify(4, "Image Viewer", "Image maps are not supported. Please try to access required information via a text hyperlink.")); else :?DispatchRawURL(Local1)); else begin :stop(); :?DispatchRawURL(Local1); end; :hilite(nil); return true end; else return end, viewClass: 74, debug: "JPEG", fBorder: nil, mCalcScrollAmount: func(Arg1, Arg2, Arg3) begin local Local1; if not viewOriginY then (viewOriginY := 0); if Arg3 <> 'up and Arg3 <> 'down then return 0; if Arg3 = 'down then (Local1 := min(rinttol(Arg2.bottom * 2 / 3), Arg2.bottom - viewOriginY)); else (Local1 := max(rinttol(Arg2.bottom * 2 / 3), Arg2.bottom - viewOriginY)); if Local1 < 0 then (Local1 := 0); if Arg3 = 'up then (Local1 := -1 * Local1); return Local1 end, start: func(Arg1, Arg2) begin local Local1; if fTemplateFr.fImaging <> 'instantiated and fTemplateFr.fImaging <> 'readfromcache then Throw('|evt.ex.fr|, -100002); if fTemplateFr.fImaging = 'readfromcache then begin AddDelayedSend(Arg1, Arg2, [nil], 100); fTemplateFr.icon := fContentFr.cacheObject.icon; :mScaleImage(); :mUpdateView(); return; end; Local1 := fTemplateFr.fContentFr.inputStream:TotalBytesAvailable(); fStartContext := Arg1; fStartMethod := Arg2; fTemplateFr.fReadReq := {_proto: fTemplateFr.fContentFr.inputStream:GetSizedReadRequest(1)}; fTemplateFr.fReadReq.pleaseRead := if Local1 > 0 then Local1; else 32768; fTemplateFr.fReadReq.buffer := fTemplateFr.fImageBin := GetDefaultStore():NewVBO('binary, if Local1 > 0 then Local1; else 32768); fTemplateFr.fReadCount := 0; :SetTransactionStatus(fTemplateFr, {titleText: "JPEG Download Status", icon: kImages.fHealthy, statusText: "Loading JPEG..."}); fTemplateFr.fContentFr.inputStream:read(fTemplateFr.fReadReq, self, 'mReadCb); fTemplateFr.fImaging := 'reading end }; imageView2 := /* child of JPEG */ {viewBounds: {left: 0, top: 0, bottom: -23, right: -26}, viewFlags: 1, viewFormat: 256, icon: BuildPictureViewSlot({ maskOption: 0}), viewJustify: 240, ViewSetupFormScript: // be sure to call inherited:?ViewSetupFormScript() func() begin self.icon:=(:parent()).icon; inherited:?ViewSetupFormScript(); end, debug: "imageView2", viewClass: 76 }; // View imageView2 is declared to JPEG constant |layout_JPEGViewer.lyt| := JPEG; // End of file JPEGViewer.lyt