home *** CD-ROM | disk | FTP | other *** search
- ; $VER: RGBBox-Scope.library 1.12
- ;
-
- INCDIR "Includes3.0:Include3.0/"
- INCLUDE "Exec/Types.i"
- INCLUDE "Own/SystemBases.i"
- INCLUDE "Own/SystemStructures.i"
- INCLUDE "Own/SystemOffsets.i"
- INCLUDE "Own/AccessiblePlayer.i"
- INCLUDE "Own/Reqtools.i"
- INCLUDE "Own/IDCMP.i"
- INCLUDE "Own/Intuitiontags.i"
- INCLUDE "Own/Gadtools.i"
-
-
- VERSION = 1
- REVISION = 12
-
- TRUE = -1
- FALSE = 0
-
- SIGBREAKB_CTRL_C= 12
- SIGBREAK_CTRL_C = 1<<SIGBREAKB_CTRL_C
-
- ; Library Data
-
- LN_Name = 10
- LN_Type = 8
- NT_Library = 9
-
- LIBB_Summing = 0
- LIBB_Changed = 1
- LIBB_SumUsed = 2
- LIBB_DelExp = 3
-
- LIBF_Summing = 1<<LIBB_Summing
- LIBF_Changed = 1<<LIBB_Changed
- LIBF_SumUsed = 1<<LIBB_SumUsed
- LIBF_DelExp = 1<<LIBB_DelExp
-
- ; Macros
-
- INBYTE MACRO
- dc.b %11100000,0
- dc.w \1
- dc.b \2,0
- ENDM
-
- INWORD MACRO
- dc.b %11010000,0
- dc.w \1,\2
- ENDM
-
- INLONG MACRO
- dc.b %11000000,0
- dc.w \1
- dc.l \2
- ENDM
-
- ; Library Base Structure
-
- STRUCTURE LibraryStruct,0
- STRUCT LIB_Node,14
- UBYTE LIB_Flags
- UBYTE LIB_Pad
- UWORD LIB_NegSize
- UWORD LIB_PosSize
- UWORD LIB_Version
- UWORD LIB_Revision
- APTR LIB_IDString
- ULONG LIB_Sum
- UWORD LIB_OpenCnt
-
- LONG LIB_SegList
- APTR LIB_DosBase
- LABEL LibraryStruct_SIZEOF
-
-
- SECTION RGBBox-Scope.library,CODE
-
- START moveq #0,d0
- rts
- ;------------------------------------------------------------------------------
- LIBNAME dc.b "aaRGBBox-Scope.library",0
-
- LIBID dc.b "RGBBox-Scope.library 1.12 (15-August-1995)",0
- even
- ;------------------------------------------------------------------------------
- ; ROMTAG Structure
- ;
-
- ROMTAG dc.w $4afc ;ROMTAG Indentifier
- dc.l romtag
- dc.l slut
- dc.b $80 ;Flags
- dc.b version
- dc.b $09 ;Type Of Module
- dc.b $00 ;Initialization Priority
- dc.l libname
- dc.l libid
- dc.l autinit ;Pointer To AUTOINIT Table
- ;------------------------------------------------------------------------------
- ; AUTOINIT Table
- ;
-
- AUTINIT dc.l LibraryStruct_SIZEOF ;Size Of Structure AFTER Base Address
- dc.l vector ;Pointer To Vector Table
- dc.l inittab ;Pointer To Init Structure
- dc.l init ;Pointer To Init Routine
- ;------------------------------------------------------------------------------
- ; Init Table
- ;
-
- INITTAB INBYTE LN_Type,NT_Library
- INBYTE LIB_Flags,LIBF_SumUsed!LIBF_Changed
- INWORD LIB_Version,version
- INWORD LIB_Revision,revision
- INLONG LN_Name,libname
- INLONG LIB_IDString,libid
- dc.l 0
- ;------------------------------------------------------------------------------
- ; Vector Table
- ;
-
- VECTOR dc.w -1
- dc.w opnlib-vector,clslib-vector,expunge-vector,extfunc-vector
- dc.w RB_GetTags-vector
- dc.w -1
- ;------------------------------------------------------------------------------
- ; Init Routine
- ;
-
- INIT movem.l d1-d7/a0-a6,-(sp)
- move.l d0,a4 ;Base Address
- move.l a0,LIB_SegList(a4)
-
- move.l 4.w,a6
- lea dosnam(pc),a1
- moveq #37,d0
- jsr OpenLibrary(a6) ;Open Dos.library
- move.l d0,LIB_DosBase(a4)
- beq.b inito
-
- move.l d0,a6
- move.l #cfgname,d1
- move.l #1005,d2
- jsr Open(a6) ;Open Config File
- move.l d0,d7
- beq.b init1
-
- move.l d7,d1
- move.l #winpos,d2
- moveq #4*2,d3
- jsr Read(a6) ;Read Config File
-
- move.l d7,d1
- jsr Close(a6) ;Close Config File Again
-
- move.w winpos(pc),wintags+6
- move.w winpos+2(pc),wintags+14
- move.w winpos+4(pc),wintags+22
- move.w winpos+6(pc),wintags+30
-
- INIT1 move.l a4,d0
- INITO movem.l (sp)+,d1-d7/a0-a6
- rts
- ;------------------------------------------------------------------------------
- ; Offset -6: Open Library
- ;
-
- OPNLIB addq.w #1,LIB_OpenCnt(a6)
- bclr #LIBB_DelExp,LIB_Flags(a6)
- move.l a6,d0
- rts
- ;------------------------------------------------------------------------------
- ; Offset -12: Close Library
- ;
-
- CLSLIB moveq #0,d0
- subq.w #1,LIB_OpenCnt(a6)
- bne.b clslibo
- btst #LIBB_DelExp,LIB_Flags(a6)
- bne.b expunge
- CLSLIBO rts
- ;------------------------------------------------------------------------------
- ; Offset -18: Expunge
- ;
-
- EXPUNGE movem.l d1-d7/a0-a6,-(sp)
- move.l a6,a4
- tst.w LIB_OpenCnt(a4)
- beq.b exp1
- bset #LIBB_DelExp,LIB_Flags(a4)
- moveq #0,d0
- bra.w expungo
-
- EXP1 move.w winpos(pc),d0
- cmp.w wintags+6(pc),d0 ;Left
- bne.b exp2
- move.w winpos+2(pc),d0
- cmp.w wintags+14(pc),d0 ;Top
- bne.b exp2
- move.w winpos+4(pc),d0
- cmp.w wintags+22(pc),d0 ;Width
- bne.b exp2
- move.w winpos+6(pc),d0
- cmp.w wintags+30(pc),d0 ;Height
- beq.b exp3
-
- EXP2 move.l LIB_DosBase(a4),a6
- move.l #cfgname,d1
- move.l #1006,d2
- jsr Open(a6) ;Open Config File
- move.l d0,d7
- beq.b exp3
-
- move.w wintags+30(pc),-(sp)
- move.w wintags+22(pc),-(sp)
- move.w wintags+14(pc),-(sp)
- move.w wintags+6(pc),-(sp)
-
- move.l d7,d1
- move.l sp,d2
- moveq #4*2,d3
- jsr Write(a6) ;Write Config File
-
- move.l d7,d1
- jsr Close(a6) ;Close Config File Again
- addq.l #4*2,sp
-
- EXP3 move.l 4.w,a6
- move.l LIB_DosBase(a4),a1
- jsr CloseLibrary(a6) ;Close Dos.library
-
- move.l LIB_SegList(a4),d2
- move.l a4,a1
- jsr Remove(a6)
-
- move.l a4,a1
- moveq #0,d0
- move.w LIB_NegSize(a4),d0
- sub.l d0,a1
- add.w LIB_PosSize(a4),d0
- jsr FreeMem(a6)
- move.l d2,d0
-
- EXPUNGO movem.l (sp)+,d1-d7/a0-a6
- rts
- ;------------------------------------------------------------------------------
- ; Offset -24: ExtFunc
- ;
-
- EXTFUNC moveq #0,d0
- rts
- ;------------------------------------------------------------------------------
- ;******************************************************************************
- ;* RGBBox-Peak Agent
- ;******************************************************************************
- ;------------------------------------------------------------------------------
- ; Offset -30: GetTags
- ;
- ; IN : Nothing
- ;
- ; OUT: A0 = Pointer To A TagList
- ;
-
- RB_GetTags
- lea RB_Tags(pc),a0
- rts
-
- RB_Tags dc.l APT_RequestVersion,6
- dc.l APT_OSVersion,39
-
- dc.l APT_AgentType,AGNT_Scope
- dc.l APT_AgentName,rbname
- dc.l APT_Description,rbdes
-
- dc.l APT_Show,RB_ShowPoi
- dc.l TAG_END
-
- RBNAME dc.b "RGB Box Scope",0
- RBDES dc.b "Coded by Tax.",10,10
- dc.b "This scope will show a RGB box",10
- dc.b "which will change color to the",10
- dc.b "first 3 channels. It requires",10
- dc.b "OS3.0 and one free pen to run.",0
- even
- ;------------------------------------------------------------------------------
- ; Show
- ;
- ; IN : Nothing
- ;
- ; OUT: Nothing
- ;
-
- RB_Show
- move.l glob(pc),a5
-
- move.l APG_GetScreenHD(a5),a4
- jsr (a4)
- move.l d0,scrhd+4
-
- move.l APG_GfxBase(a5),a6
- move.l d0,a0
- move.l Screen_ViewPort+ViewPort_ColorMap(a0),a0
- move.l a0,colmap
- moveq #-1,d0 ;We Accept Any Color Number
- moveq #0,d1 ;Black
- moveq #0,d2 ;
- moveq #0,d3 ;
- moveq #1,d4 ;PEN_EXCLUSIVE
- jsr ObtainPen(a6) ;Allocate Pen
- move.l d0,pennum
- bpl.b .penok
- move.l APG_ReqBase(a5),a6
- lea reqtag(pc),a0
- lea npenerr(pc),a1
- lea okaygad(pc),a2
- sub.l a3,a3
- sub.l a4,a4
- jsr rtEZRequestA(a6) ;Show Allocation Error
- bra.w .exit
-
- ; Setup Window
-
- .PENOK move.l APG_IntBase(a5),a6
- sub.l a0,a0
- lea wintags(pc),a1
- jsr OpenWindowTagList(a6) ;Open Our Window
- move.l d0,winhd
- beq.w .exit1
-
- move.l APG_GadBase(a5),a6
- move.l scrhd+4(pc),a0
- sub.l a1,a1
- jsr GetVisualInfoA(a6)
- move.l d0,bevtags+4
- beq.w .exit2
-
- move.l APG_AllocScopeSignal(a5),a4
- jsr (a4)
- move.l d0,scopstr
- beq.w .exit3
-
- bsr.w drwwin ;Draw Window Box
-
- ; Change Task Priority (This Is Important!!!!!)
-
- move.l 4.w,a6
- sub.l a1,a1
- jsr FindTask(a6)
-
- move.l d0,a1
- moveq #-25,d0 ;New Priority
- jsr SetTaskPri(a6)
-
- ; Message Loop
-
- .LOOP move.l APG_GetScopeSignal(a5),a4
- move.l scopstr(pc),a0
- jsr (a4)
-
- move.l winhd(pc),a0
- move.l Window_UserPort(a0),a0
- moveq #0,d1
- moveq #1,d2
- move.b MsgPort_SigBit(a0),d1
- lsl.l d1,d2
- or.l d2,d0 ;Window Signal
- or.l #SIGBREAK_CTRL_C,d0
-
- move.l 4.w,a6
- jsr Wait(a6)
-
- ; Test For Ctrl-C Signal
-
- moveq #0,d7
- btst #SIGBREAKB_CTRL_C,d0
- beq.b .noctrl
- moveq #-1,d7 ;Set Exit Flag
- .NOCTRL move.l d7,-(sp)
-
- ; Test For Scope Signal
-
- move.l APG_TestScopeSignal(a5),a4
- move.l scopstr(pc),a0
- jsr (a4)
- btst #0,d0
- beq.b .noscop
- bsr.w doscop ;Yeah, We Have To Change The Color
-
- .NOSCOP btst #1,d0
- beq.b .tstwin
- bsr.w dovb
-
- .TSTWIN move.l 4.w,a6
- move.l winhd(pc),a0
- move.l Window_UserPort(a0),a0
- jsr GetMsg(a6) ;Get Message From Window Port
- tst.l d0
- bne.b .msg
- tst.l (sp)+ ;Test Exit Flag
- bne.b .getout
- bra.b .loop
-
- .MSG move.l d0,a1
- move.l IntuiMessage_Class(a1),d2;Get Message
- jsr ReplyMsg(a6)
-
- cmp.l #IC_NewSize,d2
- bne.b .nosize
- bsr.w drwwin ;Draw Window Again
- bra.b .tstwin
-
- .NOSIZE cmp.l #IC_CloseWindow,d2
- bne.b .tstwin
- moveq #-1,d7
- move.l d7,(sp)
- bra.b .tstwin
-
- ; Remember Window Positions To Next Time
-
- .GETOUT moveq #0,d4
- moveq #0,d5
- move.l scrhd+4(pc),a0
- move.b Screen_WBorLeft(a0),d4
- add.b Screen_WBorRight(a0),d4
-
- move.l Screen_Font(a0),a1
- move.w TextAttr_YSize(a1),d5
- addq.w #1,d5
- add.b Screen_WBorTop(a0),d5
- add.b Screen_WBorBottom(a0),d5
-
- move.l winhd(pc),a0
- move.w Window_LeftEdge(a0),d0
- move.w Window_TopEdge(a0),d1
- move.w Window_Width(a0),d2
- move.w Window_Height(a0),d3
- sub.w d4,d2
- sub.w #14,d2 ;Width Of Size Border
- sub.w d5,d3
-
- lea wintags(pc),a0
- move.w d0,6(a0) ;Left
- move.w d1,14(a0) ;Top
- move.w d2,22(a0) ;Width
- move.w d3,30(a0) ;Height
-
- ; Get Out
-
- move.l APG_FreeScopeSignal(a5),a4
- move.l scopstr(pc),a0
- jsr (a4)
-
- .EXIT3 move.l APG_GadBase(a5),a6
- move.l bevtags+4(pc),a0
- jsr FreeVisualInfo(a6)
-
- .EXIT2 move.l APG_IntBase(a5),a6
- move.l winhd(pc),a0
- jsr CloseWindow(a6) ;Close Window
-
- .EXIT1 move.l APG_GfxBase(a5),a6
- move.l colmap(pc),a0
- move.l pennum(pc),d0
- jsr ReleasePen(a6) ;Release Pen Again
-
- .EXIT moveq #0,d0
- rts
- ;------------------------------------------------------------------------------
- ; Draw Window
- ;
-
- DRWWIN moveq #0,d4
- moveq #0,d5
- moveq #0,d6
- moveq #0,d7
- move.l scrhd+4(pc),a0
- move.b Screen_WBorLeft(a0),d4
- move.b Screen_WBorRight(a0),d5
-
- move.l Screen_Font(a0),a1
- move.w TextAttr_YSize(a1),d6
- addq.w #1,d6
- add.b Screen_WBorTop(a0),d6
- move.b Screen_WBorBottom(a0),d7
-
- move.l winhd(pc),a0
- move.w Window_Width(a0),d2
- move.w Window_Height(a0),d3
- sub.w d4,d2
- sub.w d5,d2
- sub.w #14+8,d2 ;Width Of Size Border + 8 Spaces
- sub.w d6,d3
- sub.w d7,d3
- subq.w #4,d3 ;4 Spaces
-
- move.l Window_RPort(a0),a1
- move.l a1,-(sp) ;Store RastPort
-
- move.l d2,-(sp)
- move.l APG_GfxBase(a5),a6
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2 ;JAM1
- jsr SetABPenDrMd(a6)
- move.l (sp)+,d2
-
- movem.l d2-d3,-(sp)
- move.l 8(sp),a1 ;RastPort
- moveq #4,d0
- add.w d4,d0
- moveq #2,d1
- add.w d6,d1
- add.w d0,d2
- addq.w #3,d2
- add.w d1,d3
- addq.w #1,d3
- jsr RectFill(a6) ;Clear Window
- movem.l (sp)+,d2-d3
-
- move.l APG_GadBase(a5),a6
- move.l (sp),a0
- moveq #4,d0
- add.w d4,d0
- moveq #2,d1
- add.w d6,d1
- lea bevtags(pc),a1
- jsr DrawBevelBoxA(a6)
-
- move.l d2,-(sp)
- move.l APG_GfxBase(a5),a6
- move.l 4(sp),a1 ;RastPort
- move.l pennum(pc),d0
- moveq #0,d1
- moveq #0,d2 ;JAM1
- jsr SetABPenDrMd(a6)
- move.l (sp)+,d2
-
- move.l (sp)+,a1 ;RastPort
- moveq #4+2,d0
- add.w d4,d0
- moveq #2+1,d1
- add.w d6,d1
- subq.w #4+1,d2
- add.w d0,d2
- subq.w #2+1,d3
- add.w d1,d3
- jsr RectFill(a6)
- rts
- ;------------------------------------------------------------------------------
- ; Change The Color Of The Box
- ;
-
- DOSCOP movem.l d0-d7/a0-a6,-(sp)
- move.l APG_ChannelInfo(a5),a0
- move.l APG_ChannelFlags(a5),a1
- lea cols(pc),a2
- move.l APG_UtiBase(a5),a6
-
- moveq #3-1,d6 ;Number Of Channels - 1
- DOSCOP1 moveq #-1,d2 ;Full Color Power
- move.b (a1)+,d3
- btst #NPCFB_Volume,d3
- beq.b doscop3
- lea coltab(pc),a3
- move.w NPC_Volume(a0),d0
- lsl.w #2,d0
- move.l (a3,d0.w),d2
-
- DOSCOP3 btst #NPCFB_Sample,d3
- beq.b doscop4
- move.l d2,(a2)
- move.l #$0f000000,4(a2)
-
- DOSCOP4 move.w NPC_Period(a0),d0
- btst #NPCFB_Period,d3
- bne.b doscop5
- btst #NPCFB_QuadroPeriod,d3
- beq.b doscop6
- lsr.w #2,d0
- DOSCOP5 move.w #$2000,d1 ;Maximum Period
- sub.w d0,d1
- mulu #$6000,d1 ;Guess Value
- move.l d1,4(a2)
-
- DOSCOP6 addq.l #8,a2
- lea NPChannel_SIZEOF(a0),a0
- dbra d6,doscop1
- bra.b setcols
- ;------------------------------------------------------------------------------
- ; Flash Colors Down
- ;
-
- DOVB movem.l d0-d7/a0-a6,-(sp)
- lea cols(pc),a0
- moveq #3-1,d6
- DOVB1 move.l (a0),d0
- beq.b dovb3
- cmp.l 4(a0),d0
- bhi.b dovb2
- moveq #0,d0
- bra.b dovb3
-
- DOVB2 sub.l 4(a0),d0
- DOVB3 move.l d0,(a0)
- addq.l #8,a0
- dbra d6,dovb1
-
- SETCOLS move.l APG_GfxBase(a5),a6
- move.l scrhd+4(pc),a0
- lea Screen_ViewPort(a0),a0
- move.l pennum(pc),d0
- move.l cols(pc),d1 ;Red
- move.l cols+8(pc),d2 ;Green
- move.l cols+16(pc),d3 ;Blue
- jsr SetRGB32(a6) ;Set New Color
-
- movem.l (sp)+,d0-d7/a0-a6
- rts
- ;------------------------------------------------------------------------------
- ; Data Area
- ;
-
- RB_ShowPoi
- dc.l RB_Show
- GLOB dc.l 0
-
- COLS blk.l 3*2,0
-
- COLMAP dc.l 0
- PENNUM dc.l 0
- WINHD dc.l 0
- SCOPSTR dc.l 0
-
- WINPOS blk.w 4,0
-
- WINTAGS dc.l WA_Left,0,WA_Top,0,WA_InnerWidth,150,WA_InnerHeight,75
- dc.l WA_MinWidth,90,WA_MinHeight,45,WA_MaxWidth,-1,WA_MaxHeight,-1
- dc.l WA_IDCMP,IC_CloseWindow!IC_NewSize,WA_Flags,$1000f
- dc.l WA_AutoAdjust,TRUE,WA_Title,wintit
- SCRHD dc.l WA_PubScreen,0,WA_PubScreenFallBack,TRUE
- dc.l TAG_END
-
- REQTAG dc.l RT_LockWindow,TRUE,TAG_END
-
- BEVTAGS dc.l GT_VisualInfo,0,TAG_END
-
- OKAYGAD dc.b "Okay",0
- NPENERR dc.b "Couldn't allocate pen!!",0
-
- WINTIT dc.b "RGB-Box",0
-
- DOSNAM dc.b "dos.library",0
- CFGNAME dc.b "ENVARC:APlayer/Agents/RGBBox-Scope.cfg",0
- even
- ;------------------------------------------------------------------------------
- ; Volume Color Table
- ;
-
- COLTAB dc.l $00000000,$04000000,$08000000,$0c000000
- dc.l $10000000,$14000000,$18000000,$1c000000
- dc.l $20000000,$24000000,$28000000,$2c000000
- dc.l $30000000,$34000000,$38000000,$3c000000
- dc.l $40000000,$44000000,$48000000,$4c000000
- dc.l $50000000,$54000000,$58000000,$5c000000
- dc.l $60000000,$64000000,$68000000,$6c000000
- dc.l $70000000,$74000000,$78000000,$7c000000
- dc.l $80000000,$83ffffff,$87ffffff,$8bffffff
- dc.l $8fffffff,$93ffffff,$97ffffff,$9bffffff
- dc.l $9fffffff,$a3ffffff,$a7ffffff,$abffffff
- dc.l $afffffff,$b3ffffff,$b7ffffff,$bbffffff
- dc.l $bfffffff,$c3ffffff,$c7ffffff,$cbffffff
- dc.l $cfffffff,$d3ffffff,$d7ffffff,$dbffffff
- dc.l $dfffffff,$e3ffffff,$e7ffffff,$ebffffff
- dc.l $efffffff,$f3ffffff,$f7ffffff,$fbffffff
- dc.l $ffffffff
- ;------------------------------------------------------------------------------
- SLUT
-