home *** CD-ROM | disk | FTP | other *** search
- opt AMIGA
- ;* $Revision Header built automatically *************** (do not edit) ************
- ;*
- ;* © Copyright by F.Delacroix
- ;*
- ;* File : DH0{42MB}:Progs/ScreenSaver/Screen2IFF.s
- ;* Created on : Samedi, 22-Jan-94 16:47:02
- ;* Created by : Frédéric DELACROIX
- ;* Current revision : V1.00
- ;*
- ;*
- ;* Purpose
- ;* -------
- ;* This commodity saves the front screen to disk (in IFF ILBM
- ;* format) when hotkey is pressed. Supports some WB & CLI
- ;* options. Written on Hisoft's Devpac 3.
- ;*
- ;* Revision V1.00
- ;* --------------
- ;* --- Initial release ---
- ;*
- ;*********************************************************************************
- REVISION MACRO
- dc.b "1.00"
- ENDM
- REVDATE MACRO
- dc.b "22-Jan-94 "
- ENDM
- REVTIME MACRO
- dc.b "16:47:02"
- ENDM
- AUTHOR MACRO
- dc.b "Frédéric DELACROIX"
- ENDM
- VERNUM EQU 01
- REVNUM EQU 00
-
- include exec/execbase.i
- include exec/alerts.i
- include libraries/commodities.i
- include libraries/commodities_lib.i
- include dos/dostags.i
- include workbench/icon_lib.i
- include workbench/workbench.i
- include libraries/iffparse.i
- include libraries/iffparse_lib.i
- include graphics/layers_lib.i
-
- IE_SAVESCREEN EQU 1
- ;DEBUG SET 1
-
- Start move.l 4.w,a6
- move.l ThisTask(a6),a4
- tst.l pr_CLI(a4)
- bne.s FromCLI
- lea pr_MsgPort(a4),a0
- jsr _LVOWaitPort(a6)
- lea pr_MsgPort(a4),a0
- jsr _LVOGetMsg(a6)
- move.l d0,WB.Startup
-
- FromCLI lea Intuition.Name(pc),a1
- jsr _LVOOldOpenLibrary(a6)
- move.l d0,Intuition.Base
- bne.s IntuitionOK
- move.l #AT_Recovery!AG_OpenLib!AO_Intuition,d7
- jsr _LVOAlert(a6)
- bra exit
- IntuitionOK
- move.l d0,a1
- cmp.w #37,LIB_VERSION(a1)
- bge.s KickOK
- move.l a1,a6
- move.l #RECOVERY_ALERT,d0
- lea BadKickstart.ALT,a0
- move.l #BadKickstart.HGT,d1
- jsr _LVODisplayAlert(a6)
- bra.s CloseIntuition
-
- KickOK lea DOS.Name(pc),a1
- moveq #37,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,DOS.Base
- bne.s DOSOK
- move.l #AT_Recovery!AG_OpenLib!AO_DOSLib,d7
- jsr _LVOAlert(a6)
- bra.s CloseIntuition
-
- DOSOK bsr.s ReadArgs
- IFD DEBUG
- jmp Resident
- ENDC
- lea Start-4(pc),a0
- move.l (a0),Child.SegList
- clr.l (a0)
- move.l #NewProc.Tags,d1
- move.l DOS.Base,a6
- jsr _LVOCreateNewProc(a6)
- tst.l d0
- beq.s CloseDOS
- bra.s exit
- CloseDOS
- bsr SmallCleanUp
- move.l DOS.Base,a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- CloseIntuition
- move.l Intuition.Base,a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- exit move.l WB.Startup(pc),d0
- beq.s ExitToCLI
- move.l 4.w,a6
- jsr _LVOForbid(a6)
- move.l d0,a1
- jsr _LVOReplyMsg(a6)
- ExitToCLI
- moveq #0,d0
- rts
-
- ReadArgs
- tst.l WB.Startup
- bne.s .WBArgs
- move.l #Args.Template,d1
- move.l #Args.Array,d2
- moveq #0,d3
- move.l DOS.Base,a6
- jsr _LVOReadArgs(a6)
- move.l d0,Args.RDArgs
- rts
-
- .WBArgs lea Icon.Name,a1
- moveq #37,d0
- move.l 4.w,a6
- jsr _LVOOpenLibrary(a6)
- move.l d0,Icon.Base
- beq.s .NoIconLib
- move.l WB.Startup(pc),a2
- tst.l sm_NumArgs(a2)
- beq.s .NoIconLib
- move.l sm_ArgList(a2),d0
- beq.s .NoIconLib
- move.l d0,a2
- move.l wa_Lock(a2),d1
- move.l DOS.Base,a6
- jsr _LVOCurrentDir(a6)
- move.l wa_Name(a2),a0
- move.l Icon.Base,a6
- jsr _LVOGetDiskObject(a6)
- move.l d0,Program.DiskObject
- beq.s .NoIconLib
- move.l d0,a2
-
- lea HotKey.TT(pc),a1
- move.l do_ToolTypes(a2),a0
- jsr _LVOFindToolType(a6)
- move.l d0,SaveScreen.Descr
-
- lea BaseName.TT(pc),a1
- move.l do_ToolTypes(a2),a0
- jsr _LVOFindToolType(a6)
- move.l d0,BaseName
-
- lea CXPri.TT(pc),a1
- move.l do_ToolTypes(a2),a0
- jsr _LVOFindToolType(a6)
- move.l d0,d1
- move.l #CXPri,d2
- move.l DOS.Base,a6
- jsr _LVOStrToLong(a6)
- .NoIconLib
- rts
-
- SmallCleanUp
- move.l Program.DiskObject,d0
- beq.s .NoDiskOb
- move.l Icon.Base,a6
- move.l d0,a0
- jsr _LVOFreeDiskObject(a6)
- .NoDiskOb
- move.l Args.RDArgs,d1
- beq.s .NoRDArgs
- move.l DOS.Base,a6
- jsr _LVOFreeArgs(a6)
- .NoRDArgs
- move.l Icon.Base,d0
- beq.s .NoIcon
- move.l d0,a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- .NoIcon rts
-
-
- WB.Startup dc.l 0
- NewProc.Tags dc.l NP_Seglist
- Child.SegList dc.l 0
- dc.l NP_Name,Screen2IFF.Name
- dc.l NP_Priority,2
- dc.l NP_WindowPtr,0
- dc.l TAG_DONE
-
- DOS.Name dc.b 'dos.library',0
- Intuition.Name dc.b 'intuition.library',0
- Args.Template dc.b 'HOTKEY,BASENAME,CXPRI/N',0
- HotKey.TT dc.b 'HOTKEY',0
- BaseName.TT dc.b 'BASENAME',0
- CXPri.TT dc.b 'CXPRI',0
-
- section Resident,CODE
- Resident
- lea Graphics.Name(pc),a1
- moveq #37,d0
- move.l 4.w,a6
- jsr _LVOOpenLibrary(a6)
- move.l d0,Graphics.Base
- bne.s GraphicsOK
- move.l #AT_Recovery!AG_OpenLib!AO_GraphicsLib,d7
- jsr _LVOAlert(a6)
- bra CloseDOSResident
-
- GraphicsOK
- lea Layers.Name(pc),a1
- moveq #37,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,Layers.Base
- bne.s LayersOK
- move.l #AT_Recovery!AG_OpenLib!AO_LayersLib,d7
- jsr _LVOAlert(a6)
- bra CloseGraphics
-
- LayersOK
- lea Commodities.Name(pc),a1
- moveq #37,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,Commodities.Base
- bne.s CommoditiesOK
- lea NoCommodities.MSG(pc),a0
- bsr Print
- bra.s CloseLayers
- CommoditiesOK
- lea IFFParse.Name(pc),a1
- moveq #37,d0
- jsr _LVOOpenLibrary(a6)
- move.l d0,IFFParse.Base
- bne.s IFFParseOK
- lea NoIFFParse.MSG(pc),a0
- bsr Print
- bra.s CloseCommodities
- IFFParseOK
- move.l d0,a6
- jsr _LVOAllocIFF(a6)
- move.l d0,SaveFile.IFF
- bne.s IFFOK
- lea NotEnoughMem.MSG(pc),a0
- bsr.s Print
- bra.s CloseIFFParse
- IFFOK move.l d0,a0
- jsr _LVOInitIFFasDOS(a6)
-
- bsr SetCommodity
- tst.l d0
- beq.s CloseCommodities
- bsr ProcessMessages
- bsr RemCommodity
-
- FreeIFF move.l SaveFile.IFF(pc),a0
- move.l IFFParse.Base(pc),a6
- jsr _LVOFreeIFF(a6)
- CloseIFFParse
- move.l IFFParse.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- CloseCommodities
- move.l Commodities.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- CloseLayers
- move.l Layers.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- CloseGraphics
- move.l Graphics.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- CloseDOSResident
- move.l DOS.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- move.l Intuition.Base(pc),a1
- move.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- moveq #0,d0
- rts
-
- Print movem.l d0-d1/a0-a3/a6,-(sp) ; Print(Message)(A0)
- lea EasyPrint(pc),a1
- move.l a0,es_TextFormat(a1)
- suba.l a0,a0
- move.l a0,a2
- move.l a2,a3
- move.l Intuition.Base(pc),a6
- jsr _LVOEasyRequestArgs(a6)
- movem.l (sp)+,d0-d1/a0-a3/a6
- rts
-
- SetCommodity ; (D0)Success=SetCommodity()
- move.l 4.w,a6
- jsr _LVOCreateMsgPort(a6)
- lea Screen2IFF.NewBroker(pc),a0
- move.l d0,nb_Port(a0)
- bne.s .PortOK
- lea NotEnoughMem.MSG(pc),a0
- bsr Print
- bra.s .Failure
-
- .PortOK move.l CXPri(pc),d0
- beq.s .NoPri
- move.l d0,a1
- move.b 3(a1),nb_Pri(a0)
- .NoPri move.l #CXError,d0
- move.l Commodities.Base(pc),a6
- jsr _LVOCxBroker(a6)
- move.l d0,CXBroker
- bne.s .BrokerOK
- move.l CXError(pc),d0
- cmp.l #CBERR_SYSERR,d0
- beq.s .NoMem
- cmp.l #CBERR_DUP,d0
- beq.s .Removed
- lea UnknownCXError.MSG(pc),a0
- bra.s .ErrorDone
- .Removed
- lea Removed.MSG(pc),a0
- bra.s .ErrorDone
- .NoMem lea NotEnoughMem.MSG(pc),a0
- .ErrorDone
- bsr Print
- bra.s .Failure
-
- .BrokerOK
- lea SaveScreen.HKD(pc),a0
- bsr.s CreateHotKey
- move.l d0,SaveScreen.HK
- beq.s .Failure
-
- move.l CXBroker(pc),a0
- moveq #-1,d0
- move.l Commodities.Base(pc),a6
- jsr _LVOActivateCxObj(a6)
-
- moveq #-1,d0
- rts
-
- .Failure
- move.l CXBroker(pc),a0
- bsr DeleteObj
- move.l CXPort(pc),d0
- beq.s .NoPortToRemove
- move.l d0,a0
- move.l 4.w,a6
- jsr _LVODeleteMsgPort(a6)
- .NoPortToRemove
- moveq #0,d0
- rts
-
- ; hotkey description structure
- rsreset
- HKD_ID rs.l 1
- HKD_Current rs.l 1 ; (pointer to pointer to string)
- HKD_Default rs.l 1
- HKD_SIZEOF rs.w 0
-
- CreateHotKey ; (D0)(Filter)=CreateHotKey(Descr)(A0)
- movem.l d2/a0-a3/a6,-(sp)
- move.l a0,a2
- moveq #CX_FILTER,d0
- move.l HKD_Current(a2),a0
- move.l (a0),d1
- bne.s .DescOK
- move.l HKD_Default(a2),d1
- .DescOK move.l d1,a0
- suba.l a1,a1
- move.l Commodities.Base(pc),a6
- jsr _LVOCreateCxObj(a6)
- move.l d0,d2
- beq.s .NoFilter
- move.l d2,a0
- jsr _LVOCxObjError(a6)
- cmp.l #COERR_BADFILTER,d0
- bne.s .DescrOK
- lea BadHotKeyDescr.MSG(pc),a0
- bsr Print
- move.l HKD_Default(a2),a1
- move.l d2,d0
- jsr _LVOSetFilter(a6)
- .DescrOK
- moveq #CX_SEND,d0
- move.l CXPort(pc),a0
- move.l HKD_ID(a2),a1
- jsr _LVOCreateCxObj(a6)
- move.l d0,a1
- move.l a1,d0
- beq.s .NoSender
- move.l d2,a0
- jsr _LVOAttachCxObj(a6)
- moveq #CX_TRANSLATE,d0
- suba.l a0,a0
- move.l a0,a1
- jsr _LVOCreateCxObj(a6)
- move.l d2,a0
- move.l d0,a1
- move.l a1,d0
- beq.s .NoTranslate
- jsr _LVOAttachCxObj(a6)
- move.l d2,a1
- move.l CXBroker(pc),a0
- jsr _LVOAttachCxObj(a6)
- move.l d2,d0
- movem.l (sp)+,d2/a0-a3/a6
- rts
-
- .NoTranslate
- .NoSender
- move.l d2,a0
- jsr _LVODeleteCxObjAll(a6)
- .NoFilter
- lea NotEnoughMem.MSG(pc),a0
- bsr Print
- movem.l (sp)+,d2-d3/a0-a3/a6
- moveq #0,d0
- move.l d0,d1
- rts
-
- DeleteObj ; DeleteObj(Object)(A0)
- movem.l d0-d1/a0-a1/a6,-(sp)
- move.l Commodities.Base(pc),a6
- jsr _LVODeleteCxObjAll(a6)
- movem.l (sp)+,d0-d1/a0-a1/a6
- rts
-
- RemCommodity
- move.l CXBroker(pc),a0
- bsr DeleteObj
- move.l 4.w,a6
- .MsgLoop
- move.l CXPort(pc),a0
- jsr _LVOGetMsg(a6)
- move.l d0,a1
- move.l a1,d0
- beq.s .EndOfMsg
- jsr _LVOReplyMsg(a6)
- bra.s .MsgLoop
- .EndOfMsg
- move.l CXPort(pc),a0
- jsr _LVODeleteMsgPort(a6)
- rts
-
- ProcessMessages
- move.l CXPort(pc),a0
- move.l 4.w,a6
- jsr _LVOWaitPort(a6)
- GetCXMessage
- move.l CXPort(pc),a0
- move.l 4.w,a6
- jsr _LVOGetMsg(a6)
- move.l d0,a2
- move.l a2,d0
- beq.s ProcessMessages
- move.l a2,a0
- move.l Commodities.Base(pc),a6
- jsr _LVOCxMsgType(a6)
- move.l d0,d2
- move.l a2,a0
- jsr _LVOCxMsgID(a6)
- move.l d0,d3
- move.l a2,a1
- move.l 4.w,a6
- jsr _LVOReplyMsg(a6)
- cmp.l #CXM_COMMAND,d2
- beq.s ProcessCommand
- cmp.l #CXM_IEVENT,d2
- beq.s ProcessEvent
- lea UnknownCXMessage.MSG,a0
- bsr Print
- bra.s GetCXMessage
- ProcessCommand
- cmp.l #CXCMD_DISABLE,d3
- beq.s .Disable
- cmp.l #CXCMD_ENABLE,d3
- beq.s .Enable
- cmp.l #CXCMD_UNIQUE,d3
- beq.s .Kill
- cmp.l #CXCMD_KILL,d3
- beq.s .Kill
- lea UnknownCXMessage.MSG,a0
- bsr Print
- bra.s GetCXMessage
- .Disable
- moveq #0,d0
- bra.s .ActBro
- .Enable moveq #-1,d0
- .ActBro move.l CXBroker(pc),a0
- move.l Commodities.Base(pc),a6
- jsr _LVOActivateCxObj(a6)
- bra GetCXMessage
- .Kill rts
-
- ProcessEvent
- cmp.l #IE_SAVESCREEN,d3
- bne.s .NoSaveScreen
- bsr.s SaveScreen
- .NoSaveScreen
- bra GetCXMessage
-
-
- SaveScreen
- move.l Intuition.Base(pc),a6
- IFND DEBUG
- moveq #0,d0
- jsr _LVOLockIBase(a6)
- move.l d0,d2
- ENDC
- move.l ib_FirstScreen(a6),a5
- IFND DEBUG
- move.l 4.w,a6
- jsr _LVOForbid(a6)
- move.l Intuition.Base(pc),a6
- move.l d2,a0
- jsr _LVOUnlockIBase(a6)
-
- lea sc_LayerInfo(a5),a0
- move.l Layers.Base(pc),a6
- jsr _LVOLockLayerInfo(a6)
- move.l 4.w,a6
- jsr _LVOPermit(a6)
- ENDC
-
- ; lets copy the bitplanes into fresh memory while screen is locked
- DebugHere
- move.l sc_RastPort+rp_BitMap(a5),a4
- moveq #0,d0
- move.l d0,d1
- move.w bm_BytesPerRow(a4),d0
- move.w bm_Rows(a4),d1
- mulu d1,d0
- move.l d0,d7 ; d7= Plane size
- moveq #0,d6
- move.b bm_Depth(a4),d6 ; d6= Depth
- lsl.l d6,d0
- move.l d0,Body.Size
- move.l #MEMF_PUBLIC,d1
- move.l 4.w,a6
- jsr _LVOAllocVec(a6)
- move.l d0,a3 ; a3= Copy of bitplanes (interleaved)
- move.l a3,Bitplanes.Copy
- bne.s .MemOK
- bsr SurrenderLI
- lea NotEnoughMem.MSG(pc),a0
- bra Print
- .MemOK
- moveq #0,d7 ; line offset
- move.l d7,d6
- move.w bm_BytesPerRow(a4),d6 ; byte counter
- move.w bm_Rows(a4),d5 ; line counter
- subq.w #1,d5
- .NextLine
- moveq #0,d4 ; plane counter
- move.b bm_Depth(a4),d4
- subq.w #1,d4
- lea bm_Planes(a4),a0 ; plane pointer pointer
- .NextPlane
- move.l (a0)+,a1 ; plane pointer
- add.l d7,a1 ; point right line
- move.l d6,d3 ; number of bytes to transfer
- subq.l #1,d3
- .CopyLoop
- move.b (a1)+,(a3)+
- dbra d3,.CopyLoop
- dbra d4,.NextPlane
- add.l d6,d7
- dbra d5,.NextLine
-
- moveq #0,d0
- move.w bm_BytesPerRow(a4),d0
- lsl.l #3,d0
- move.w d0,BMHD.Wid
- move.w d0,BMHD.pageWidth
- moveq #0,d1
- move.w bm_Rows(a4),BMHD.H
- move.w bm_Rows(a4),BMHD.pageHeight
- move.b bm_Depth(a4),BMHD.nPlanes
-
- moveq #1,d3
- moveq #0,d1
- move.b bm_Depth(a4),d1
- lsl.l d1,d3
- move.l d3,NColors
- move.l d3,d0
- mulu #3,d0
- move.l #MEMF_CLEAR,d1
- move.l 4.w,a6
- jsr _LVOAllocVec(a6)
- move.l d0,CMap
- bne.s .CMAPAllocated
- bsr SurrenderLI
- lea NotEnoughMem.MSG(pc),a0
- bsr Print
- bra .FreeBODY
- .CMAPAllocated
- move.l d0,a2
- move.l sc_ViewPort+vp_ColorMap(a5),a3
- move.l Graphics.Base(pc),a6
- subq.l #1,d3
- .FillCMap
- move.l NColors(pc),d0
- sub.l d3,d0
- subq.l #1,d0
- move.l a3,a0
- jsr _LVOGetRGB4(a6)
- move.l d0,d1
- and.l #%0000111100000000,d0
- lsr.l #4,d0
- move.b d0,(a2)+
- move.l d1,d0
- and.l #%0000000011110000,d0
- move.b d0,(a2)+
- move.l d1,d0
- and.l #%0000000000001111,d0
- lsl.l #4,d0
- move.b d0,(a2)+
- dbra d3,.FillCMap
-
- move.w sc_ViewPort+vp_Modes(a5),d0
- and.l #(~(V_SPRITES|GENLOCK_VIDEO))&$FFFF,d0
- move.l d0,CAMG
- bsr SurrenderLI
-
- .TryThisFile
- move.l BaseName(pc),d1
- move.l #MODE_OLDFILE,d2
- move.l DOS.Base(pc),a6
- jsr _LVOOpen(a6)
- move.l d0,d1
- beq.s .ThisFile
- jsr _LVOClose(a6)
- move.l BaseName(pc),a0
- bsr StrLen
- move.b -1(a0,d0),d1
- addq.b #1,d1
- cmp.b #'Z',d1
- ble.s .NotZ
- move.b #'A',d1
- .NotZ move.b d1,-1(a0,d0)
- bra.s .TryThisFile
-
- .ThisFile
- move.l BaseName(pc),d1
- move.l #MODE_NEWFILE,d2
- jsr _LVOOpen(a6)
- move.l d0,SaveFile.Handle
- bne.s .SaveFileOpened
- lea CantOpenSaveFile.MSG(pc),a0
- bsr Print
- bra .FreeCMAP
- .SaveFileOpened
- move.l SaveFile.IFF(pc),a0
- move.l d0,iff_Stream(a0)
- move.l #IFFF_WRITE,d0
- move.l IFFParse.Base(pc),a6
- jsr _LVOOpenIFF(a6)
- tst.l d0
- beq.s .IFFOpened
- lea CantOpenSaveFile.MSG(pc),a0
- bsr Print
- bra .CloseFile
- .IFFOpened
- move.l SaveFile.IFF(pc),a0
- move.l #'ILBM',d0
- move.l #'FORM',d1
- move.l #IFFSIZE_UNKNOWN,d2
- jsr _LVOPushChunk(a6)
- tst.l d0
- beq.s .FORMPushed
- .IFFError
- lea ErrorWriting.MSG(pc),a0
- bsr Print
- bra .CloseIFF
- .FORMPushed
- move.l SaveFile.IFF(pc),a0 ; let's create BMHD
- move.l #'BMHD',d1
- move.l #BMHD.SIZEOF,d2
- jsr _LVOPushChunk(a6)
- tst.l d0
- bne.s .IFFError
- lea BMHD.Buffer(pc),a1
- move.l SaveFile.IFF(pc),a0
- move.l d2,d0
- jsr _LVOWriteChunkBytes(a6)
- cmp.l d0,d2
- bne.s .IFFError
- move.l SaveFile.IFF(pc),a0
- jsr _LVOPopChunk(a6)
- tst.l d0
- bne.s .IFFError
-
- move.l SaveFile.IFF(pc),a0 ; go CAMG
- move.l #'CAMG',d1
- move.l #4,d2
- jsr _LVOPushChunk(a6)
- tst.l d0
- bne.s .IFFError
- lea CAMG(pc),a1
- move.l SaveFile.IFF(pc),a0
- move.l d2,d0
- jsr _LVOWriteChunkBytes(a6)
- cmp.l d0,d2
- bne.s .IFFError
- move.l SaveFile.IFF(pc),a0
- jsr _LVOPopChunk(a6)
- tst.l d0
- bne.s .IFFError
-
- move.l SaveFile.IFF(pc),a0 ; we're going to write the CMAP
- move.l #'CMAP',d1
- move.l NColors(pc),d2
- mulu #3,d2
- jsr _LVOPushChunk(a6)
- tst.l d0
- bne .IFFError
- move.l SaveFile.IFF(pc),a0
- move.l CMap(pc),a1
- move.l d2,d0
- jsr _LVOWriteChunkBytes(a6)
- cmp.l d0,d2
- bne .IFFError
- move.l SaveFile.IFF(pc),a0
- jsr _LVOPopChunk(a6)
- tst.l d0
- bne .IFFError
-
- move.l SaveFile.IFF(pc),a0 ; the big one: BODY
- move.l #'BODY',d1
- move.l Body.Size(pc),d2
- jsr _LVOPushChunk(a6)
- tst.l d0
- bne .IFFError
- move.l SaveFile.IFF(pc),a0
- move.l Bitplanes.Copy(pc),a1
- move.l d2,d0
- jsr _LVOWriteChunkBytes(a6)
- cmp.l d2,d0
- bne .IFFError
- move.l SaveFile.IFF(pc),a0
- jsr _LVOPopChunk(a6)
- tst.l d0
- bne .IFFError
-
- move.l SaveFile.IFF(pc),a0
- jsr _LVOPopChunk(a6)
- tst.l d0
- bne .IFFError
-
- .CloseIFF
- move.l SaveFile.IFF(pc),a0
- move.l IFFParse.Base(pc),a6
- jsr _LVOCloseIFF(a6)
- .CloseFile
- move.l SaveFile.Handle(pc),d1
- move.l DOS.Base(pc),a6
- jsr _LVOClose(a6)
- .FreeCMAP
- move.l CMap(pc),a1
- move.l 4.w,a6
- jsr _LVOFreeVec(a6)
- .FreeBODY
- move.l Bitplanes.Copy(pc),a1
- move.l 4.w,a6
- jsr _LVOFreeVec(a6)
- rts
-
- SurrenderLI
- IFND DEBUG
- movem.l d0-d1/a0-a1/a6,-(sp)
- lea sc_LayerInfo(a5),a0
- move.l Layers.Base(pc),a6
- jsr _LVOUnlockLayerInfo(a6)
- movem.l (sp)+,d0-d1/a0-a1/a6
- ENDC
- rts
-
- StrLen ; (D0,Z)Len=StrLen(String)(A0)
- move.l a0,-(sp)
- move.l a0,d0
- .Loop tst.b (a0)+
- bne.s .Loop
- sub.l d0,a0
- move.l a0,d0
- move.l (sp)+,a0
- subq.l #1,d0
- rts
-
- EasyPrint dc.l es_SIZEOF
- dc.l 0
- dc.l EasyPrint.Title
- dc.l 0
- dc.l EasyPrint.Gad
-
- Screen2IFF.NewBroker
- dc.b NB_VERSION,0
- dc.l Screen2IFF.Name
- dc.l Screen2IFF.Title
- dc.l Screen2IFF.Descr
- dc.w NBU_UNIQUE!NBU_NOTIFY
- dc.w 0
- dc.b 10,0
- CXPort dc.l 0
- dc.w 0
-
- CXBroker dc.l 0
- CXError dc.l 0
-
- SaveScreen.HKD dc.l IE_SAVESCREEN,SaveScreen.Descr,SaveScreen.Def
-
- Args.Array
- SaveScreen.Descr
- dc.l 0
- BaseName
- dc.l DefaultFile.Name
- CXPri dc.l 0
-
- SaveScreen.HK dc.l 0
-
- BMHD.Buffer
- BMHD.Wid dc.w 0
- BMHD.H dc.w 0
- dc.w 0,0
- BMHD.nPlanes dc.b 0,0
- BMHD.Compression dc.b 0,0 ; not compressed (yet?)
- dc.w 0,$0101
- BMHD.pageWidth dc.w 0
- BMHD.pageHeight dc.w 0
- BMHD.SIZEOF=*-BMHD.Buffer
-
- NColors dc.l 0
- CMap dc.l 0
-
- CAMG dc.l 0
-
- Bitplanes.Copy dc.l 0
- Body.Size dc.l 0
-
- Args.RDArgs dc.l 0
- Program.DiskObject dc.l 0
-
- SaveFile.Handle dc.l 0
- SaveFile.IFF dc.l 0
-
- Intuition.Base dc.l 0
- DOS.Base dc.l 0
- Icon.Base dc.l 0
- Graphics.Base dc.l 0
- Layers.Base dc.l 0
- Commodities.Base dc.l 0
- IFFParse.Base dc.l 0
-
- Graphics.Name dc.b 'graphics.library',0
- Layers.Name dc.b 'layers.library',0
- Commodities.Name dc.b 'commodities.library',0
- IFFParse.Name dc.b 'iffparse.library',0
- Icon.Name dc.b 'icon.library',0
- Screen2IFF.Name dc.b 'Screen2IFF',0
- DefaultFile.Name dc.b 'ScreenA',0
-
- NoCommodities.MSG dc.b 'Unable to open commodities.library V37+ !',0
- NoIFFParse.MSG dc.b 'Unable to open iffparse.library V37+ !',0
- NotEnoughMem.MSG dc.b 'Not enough memory !',0
- UnknownCXError.MSG dc.b 'Commodities reports an unknown error !',0
- Removed.MSG dc.b 'Removed Screen2IFF',0
- BadHotKeyDescr.MSG dc.b 'Bad hotkey description string.',10
- dc.b 'Default used.',0
- UnknownCXMessage.MSG dc.b 'Unknown Commodities message received !',10
- dc.b '(This is VERY strange !)',0
- CantOpenSaveFile.MSG dc.b 'Cannot open save file !',0
- ErrorWriting.MSG dc.b 'Error writing output file !',0
-
- EasyPrint.Title dc.b 'Message from Screen2IFF:',0
- EasyPrint.Gad dc.b 'Aha.',0
- Screen2IFF.Title dc.b 'Screen2IFF '
- REVISION
- dc.b ' © 1994 F.Delacroix',0
- Screen2IFF.Descr dc.b 'Saves screen when hotkey pressed.',0
-
- SaveScreen.Def dc.b 'lcommand rcommand f10',0
-
- BadKickstart.ALT dc.b 0,176,14
- dc.b 'You need kickstart V37.175 (2.04) !',0,0
- BadKickstart.HGT EQU 24
-