home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
dev
/
tbsource.lha
/
TBSource
/
V舐iPaletti
/
VP.S
Wrap
Text File
|
1993-12-21
|
18KB
|
916 lines
*************************************************
* *
* (C)opyright 1993 *
* *
* Tomi Blinnikka *
* *
* Don't try to understand the code *
* *
* Version 1.00 15/04/1993 *
* -18/04/1993 *
* *
* BUGS: Command Line Option '?' caused error. *
* Display problems under 2.04. *
* *
* Version 1.01 18/04/1993 *
* *
*************************************************
INCLUDE "JMPLibs.i"
INCLUDE "libraries/dos.i"
INCLUDE "libraries/dosextens.i"
INCLUDE "graphics/rastport.i"
INCLUDE "libraries/gadtools.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:gfx.xref"
INCLUDE "XREF:intuition.xref"
INCLUDE "XREF:exec.xref"
INCLUDE "XREF:dos.xref"
MainLeft: EQU 17
MainTop: EQU 10
SliderWidth: EQU 200
SliderHeight: EQU 24
SliderTxtWidth: EQU 160
HelpTop: EQU MainTop+3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT
HelpHeight: EQU 80
TRUE: EQU 1
FALSE: EQU 0
Depth: EQU 3
BGPen: EQU 4
section VP,CODE
Start: push d2-d7/a2-a6
push a0
sub.l a1,a1 ;Find our task
lib Exec,FindTask
move.l d0,OurTask
move.l d0,a4
move.l pr_CLI(a4),d0
bne OpenDos
lea.l pr_MsgPort(a4),a0
lib Exec,WaitPort
lea.l pr_MsgPort(a4),a0
lib Exec,GetMsg
move.l d0,WBMsg
OpenDos: openlib Dos,NoDos
tst.l WBMsg
beq CLIStart
pull a0
lea.l CONName,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,CONFile
move.l d0,_stdout
beq NoCON
bra MainStart
CLIStart: lib Dos,Output
move.l d0,_stdout
pull a0
cmp.b #'?',(a0)
beq Usage
MainStart: openlib GadTools,NoGT
openlib Intuition,NoInt
openlib Gfx,NoGfx
;Close Workbench screen
lib Intuition,CloseWorkBench
;Open screen and main window
lea.l NewScreen1,a0
lea.l Screen1TagList,a1
lib Intuition,OpenScreenTagList
move.l d0,Screen1
beq NoScreen
;Get ViewPort
move.l Screen1,d0
add.l #$2c,d0
move.l d0,VP1
;Set sizes etc
lea.l NewWindow1,a0
move.l Screen1,a1
move.l a1,nw_Screen(a0)
move.l sc_Width(a1),nw_Width(a0)
clr.l d0
move.b sc_BarHeight(a1),d0
add.b #1,d0
add.w d0,nw_TopEdge(a0)
sub.w d0,nw_Height(a0)
;Do GadTools preparations, gadgets and menus
;Get visualinfo
move.l Screen1,a0
lea.l Screen1TagList,a1
lib GadTools,GetVisualInfoA
move.l d0,vi
;Make gadget stuff
lea.l glist,a0
lib GadTools,CreateContext
move.l d0,ContextGad
beq NoContextGad
move.l glist,a0
lea.l NGSliderGad1,a1
move.l #SLIDER_KIND,d0
move.l vi,gng_VisualInfo(a1)
lea.l SliderTagList1,a2
lib GadTools,CreateGadgetA
move.l d0,SliderGad1
move.l d0,a0
lea.l NGSliderGad2,a1
move.l #SLIDER_KIND,d0
move.l vi,gng_VisualInfo(a1)
lea.l SliderTagList2,a2
lib GadTools,CreateGadgetA
move.l d0,SliderGad2
move.l d0,a0
lea.l NGSliderGad3,a1
move.l #SLIDER_KIND,d0
move.l vi,gng_VisualInfo(a1)
lea.l SliderTagList3,a2
lib GadTools,CreateGadgetA
move.l d0,SliderGad3
move.l d0,a0
;Do the menu stuff
lea.l MNProjectMenu1,a0
lea.l MenuTagList,a1
lib GadTools,CreateMenusA
move.l d0,mlist
beq NoMenus
move.l mlist,a0
move.l vi,a1
lea.l MenuTagList,a2
lib GadTools,LayoutMenusA
lea.l NewWindow1,a0
lib Intuition,OpenWindow
move.l d0,Window1
beq NoWindow
move.l d0,a0
move.l $32(a0),RP1
;move requesters to Window1
move.l OurTask,a0
move.l pr_WindowPtr(a0),OldTaskWinPtr
move.l Window1,$b8(a0)
;Add menus to window 1
move.l Window1,a0
move.l mlist,a1
lib Intuition,SetMenuStrip
;Fill window with BGPen
move.l RP1,a1
move.l #BGPen,d0
lib Gfx,SetRast
;Re-draw window frame
move.l Window1,a0
lib Intuition,RefreshWindowFrame
;Set APen to background color
move.l RP1,a1
clr.l d0
lib Gfx,SetAPen
;Clear area for gadgets
move.l RP1,a1
move.l #MainLeft-INTERWIDTH,d0
move.l #MainTop-INTERHEIGHT,d1
move.l #MainLeft-INTERWIDTH+SliderWidth+SliderTxtWidth+INTERWIDTH-1,d2
move.l #MainTop-INTERHEIGHT+3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT-1,d3
lib Gfx,RectFill
;Draw a box around sliders
move.l RP1,a0
move.l #MainLeft-INTERWIDTH,d0
move.l #MainTop-INTERHEIGHT,d1
move.l #SliderWidth+SliderTxtWidth+INTERWIDTH,d2
move.l #3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT,d3
move.l vi,BevelBoxTags+4
lea.l BevelBoxTags,a1
lib GadTools,DrawBevelBoxA
;Clear area for help text
move.l RP1,a1
move.l #MainLeft-INTERWIDTH,d0
move.l #HelpTop,d1
move.l #MainLeft-INTERWIDTH+SliderWidth+SliderTxtWidth+INTERWIDTH-1,d2
move.l #HelpTop+HelpHeight,d3
lib Gfx,RectFill
;Draw a box around help text
move.l RP1,a0
move.l #MainLeft-INTERWIDTH,d0
move.l #HelpTop,d1
move.l #INTERWIDTH+SliderWidth+SliderTxtWidth,d2
move.l #HelpHeight+INTERHEIGHT-2,d3
move.l vi,BevelBoxTags+4
lea.l BevelBoxTags,a1
lib GadTools,DrawBevelBoxA
;Set APen to color 1
move.l RP1,a1
move.l #1,d0
lib Gfx,SetAPen
;Print help text
move.l RP1,a0
lea.l HelpTxt1,a1
move.l #MainLeft+2,d0
move.l #HelpTop+8,d1
lib Intuition,PrintIText
;Add gadgets to Window 1
move.l Window1,a0
move.l glist,a1
sub.l a2,a2
move.l #-1,d0
move.l #-1,d1
lib Intuition,AddGList
bsr RefreshGads
;Start of main loop
Window1IDCMP: move.l Window1,a0
bsr CheckIDCMP
cmp.l #CLOSEWINDOW,d2 ;gets fake closewindow only...
beq ShutDown
cmp.l #MENUPICK,d2
beq Win1Menus
bra Window1IDCMP
Win1Menus: bsr MenuNull
cmp.w #$00,d6
beq Win1Menus1
bra Window1IDCMP
Win1Menus1: cmp.w #$00,d5
beq About
cmp.w #$02,d5
beq ShutDown
bra Window1IDCMP
SliderHook1: push d2-d7/a2-a6
clr.l d4
move.w d0,d4
move.l d4,Red
bra SliderHook_OUT
SliderHook2: push d2-d7/a2-a6
clr.l d4
move.w d0,d4
move.l d4,Green
bra SliderHook_OUT
SliderHook3: push d2-d7/a2-a6
clr.l d4
move.w d0,d4
move.l d4,Blue
bra SliderHook_OUT
SliderHook_OUT: move.l VP1,a0
move.l #BGPen,d0
move.l Red,d1
move.l Green,d2
move.l Blue,d3
lib Gfx,SetRGB4
move.l d4,d0
pull d2-d7/a2-a6
rts
About: bsr SleepPointer
bsr MenusOff
move.l Window1,a0
lea.l AboutTxt1,a1
sub.l a2,a2 ;positive text
lea.l OKTxt,a3 ;a bit the wrong way around but...
move.l #$00,d0
move.l #$00,d1
move.l #320,d2
move.l #$50,d3
lib Intuition,AutoRequest
bsr MenusOn
bsr NormalPointer
bra Window1IDCMP
ShutDown: tst.l OldTaskWinPtr
beq ShutDown3000
move.l OurTask,a0
move.l OldTaskWinPtr,pr_WindowPtr(a0)
ShutDown3000: tst.l CONFile
beq ShutDown2000
move.l CONFile,d1
lib Dos,Close
ShutDown2000: tst.l _IntuitionBase
beq ShutDown1950
lib Intuition,OpenWorkBench
ShutDown1950: tst.l Window1
beq ShutDown1900
move.l Window1,a0
lib Intuition,ClearMenuStrip
move.l Window1,a0
bsr ClearMSGs
ShutDown1900: bsr Clean2.0Magic
tst.l Screen1
beq ShutDown1000
move.l Screen1,a0
lib Intuition,CloseScreen
ShutDown1100:
ShutDown1000: move.l WBMsg,d2
beq ShutDown_OUT
lib Exec,Forbid
move.l d2,a1
flib Exec,ReplyMsg
ShutDown_OUT: closlib GadTools
closlib Gfx
closlib Intuition
closlib Dos
pull d2-d7/a2-a6
move.l #RETURN_OK,d0
rts
;Subroutines should be here...
RefreshGads: move.l glist,a0
move.l Window1,a1
sub.l a2,a2
move.l #-1,d0
lib Intuition,RefreshGList
move.l Window1,a0
sub.l a1,a1
lib GadTools,GT_RefreshWindow
rts
SleepPointer: move.l Window1,a0
lea.l ClockPointer1,a1
move.l #16,d0
move.l #16,d1 ;WHAT-THE-HECK IS THIS FOR?
move.l #-6,d2
move.l #0,d3
lib Intuition,SetPointer
rts
NormalPointer: move.l Window1,a0
lib Intuition,ClearPointer
rts
MenusOn: move.l Window1,a0
move.l mlist,a1
lib Intuition,SetMenuStrip
rts
MenusOff: move.l Window1,a0
lib Intuition,ClearMenuStrip
rts
;CheckIDCMP gets messages from both the CTRL_C bit and Intuition.
; a0 = window structure
CheckIDCMP: move.l $56(a0),a2 ;Get window's port
move.l #0,d1 ;Set signals for
move.b $0f(a2),d1 ;IntuiMessages
move.l #SIGBREAKF_CTRL_C,d0 ;and for CTRL_C check
bset.l d1,d0
lib Exec,Wait
cmp.l #SIGBREAKF_CTRL_C,d0
beq Break
GetMsg1: move.l a2,a0
lib GadTools,GT_GetIMsg
tst.l d0
beq GetMsg2
move.l d0,a1
move.l $14(a1),d2 ;answers with Class in d2,
move.w $18(a1),d3 ;Code in d3 and
move.w $1a(a1),a4 ;Qualifier in a4
move.l $1c(a1),a5