home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
dev
/
tbsource.lha
/
TBSource
/
RM
/
RM.S
Wrap
Text File
|
1993-12-21
|
22KB
|
1,095 lines
***********************************************
* *
* (C)opyright 1991 *
* *
* by Tomi Blinnikka *
* *
* Don´t try to understand the code *
* *
* Raw-Master -The Amiga version- *
* *
***********************************************
INCLUDE "JMPLibs.i"
INCLUDE "libraries/dos.i"
INCLUDE "libraries/dosextens.i"
INCLUDE "libraries/iff.i" ;includes "XREFS"
; INCLUDE "graphics/gfx.i"
; INCLUDE "intuition/intuition.i"
; INCLUDE "intuition/gadgetclass.i"
INCLUDE "libraries/gadtools.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:gfx.xref"
; INCLUDE "XREF:mathffp.xref"
INCLUDE "XREF:intuition.xref"
INCLUDE "XREF:exec.xref"
INCLUDE "XREF:dos.xref"
; INCLUDE "XREF:diskfont.xref"
MainMTop: EQU 150
TRUE: EQU 1
FALSE: EQU 0
section RM,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
add.l #8,sp
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
pull a0
cmp.b #'?',(a0)
beq Usage
tst.l WBMsg
beq CLIStart
lea.l NILName,a0
move.l a0,d1
move.l #MODE_NEWFILE,d2
lib Dos,Open
move.l d0,NILFile
beq ShutDown
move.l NILFile,_stdout
bra MainStart
CLIStart: lib Dos,Output
move.l d0,_stdout
MainStart: lea.l CONName,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
move.l d0,CONFile
beq NoCON
openlib GadTools,NoGT
openlib Intuition,NoInt
openlib Gfx,NoGfx
oldlib Iff,NoIff
;Open screen and main window
lea.l NewScreen1,a0
lea.l Screen1TagList,a1
lib Intuition,OpenScreenTagList
move.l d0,Screen1
beq NoScreen
move.l Screen1,d0
move.l d0,SToW2
lea.l NewWindow1,a0
move.l d0,nw_Screen(a0)
move.l d0,a1
move.l sc_Width(a1),nw_Width(a0)
; sub.w #11,nw_Height(a0)
add.l #$2c,d0
move.l d0,VP1
;Hide Title
move.l Screen1,a0
move.l #FALSE,d0
lib Intuition,ShowTitle
;Set colors
move.l VP1,a0
lea.l ShipColors1,a1
move.l #32,d0
lib Gfx,LoadRGB4
;load picture
lea.l FileName1,a0
lib Iff,OpenIFF
move.l d0,LogoFile
beq NoIFFPic
;get sprites and do sprite stuff
lea Sprite1,a0
move.l #-1,d0
lib Gfx,GetSprite
move.l d0,Sprite1Num
cmp.l #-1,d0
beq NoSprite
lea Sprite2,a0
move.l #-1,d0
lib Gfx,GetSprite
move.l d0,Sprite2Num
cmp.l #-1,d0
beq NoSprite
move.l VP1,a0
lea.l Sprite1,a1
lea.l ShipData1,a2
lib Gfx,ChangeSprite
move.l VP1,a0
lea.l Sprite1,a1
move.l #100,d0
move.l #50,d1
lib Gfx,MoveSprite
move.l VP1,a0
lea.l Sprite2,a1
lea.l ShipData2,a2
lib Gfx,ChangeSprite
move.l VP1,a0
lea.l Sprite2,a1
move.l #200,d0
move.l #50,d1
lib Gfx,MoveSprite
;Do GadTools preparations, gadgets and menus
lea.l glist,a0
lib GadTools,CreateContext
move.l d0,ContextGad
beq NoContextGad
move.l Screen1,a0
lea.l Screen1TagList,a1
lib GadTools,GetVisualInfoA
move.l d0,vi
; move.l glist,a0
; lea.l NGGad,a1
; move.l #_KIND,d0
; move.l vi,gng_VisualInfo(a1)
; lea.l NumGadTagList,a2
; lib GadTools,CreateGadgetA
; move.l d0,a0
; move.l a0,Gad1
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 $b8(a0),OldTaskWinPtr
move.l Window1,$b8(a0)
;Draw main logo
move.l RP1,a0
move.l $4(a0),a0
move.l LogoFile,a1
lib Iff,DecodePic
tst.l d0
beq NoPic
move.l RP1,a0
lea.l MainMBorder1,a1
move.l #50,d0 ;*1
move.l #MainMTop,d1 ;*2
lib Intuition,DrawBorder
;Add menus to window 1
move.l Window1,a0
move.l mlist,a1
lib Intuition,SetMenuStrip
bsr AddMGads
;Start of main loop
Window1IDCMP: move.l Window1,a0
bsr CheckIDCMP
cmp.l #REFRESHWINDOW,d2
beq Refresher
cmp.l #VANILLAKEY,d2
beq VanillaKeys
cmp.l #MENUPICK,d2
beq Win1Menus
cmp.l #RAWKEY,d2
beq RawKeys
cmp.l #GADGETUP,d2
beq GadgetPick
cmp.l #ACTIVEWINDOW,d2
; beq ActivateGads
bra Window1IDCMP
Refresher: move.l Window1,a0
lib GadTools,GT_BeginRefresh
move.l Window1,a0
move.l #TRUE,d0
lib GadTools,GT_EndRefresh
bra Window1IDCMP
VanillaKeys: cmp.w #$1b,d3
beq ShutDown
cmp.w #'1',d3
; beq Start
cmp.w #'2',d3
beq About
cmp.w #'3',d3
beq ShutDown
bra Window1IDCMP
RawKeys: cmp.w #$5f,d3
beq Help
bra Window1IDCMP
GadgetPick: cmp.w #70,$26(a5)
; beq StartGame
cmp.w #71,$26(a5)
beq About
cmp.w #72,$26(a5)
beq ShutDown
bra Window1IDCMP
Win1Menus: bsr MenuNull
cmp.w #$00,d6
beq Win1Menus1
cmp.w #$01,d6
beq Win1Menus2
bra Window1IDCMP
Win1Menus1: cmp.w #$00,d5
; beq StartGame
cmp.w #$01,d5
beq About
cmp.w #$03,d5
beq ShutDown
bra Window1IDCMP
Win1Menus2: bra Window1IDCMP
About: bsr SleepPointer
bsr MenusOff
move.l Window1,a0
lea.l AboutTxt1,a1
move.l #$00,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
Help: bra Window1IDCMP
ShutDown: move.l OurTask,a0
move.l OldTaskWinPtr,$b8(a0)
ShutDown4100: move.l Sprite1Num,d0
beq ShutDown4000
lib Gfx,FreeSprite
ShutDown4000: move.l Sprite2Num,d0
beq ShutDown3500
lib Gfx,FreeSprite
ShutDown3500: tst.l NILFile
beq ShutDown3400
move.l NILFile,d1
lib Dos,Close
ShutDown3400: tst.l LogoFile
beq ShutDown3000
move.l LogoFile,a1
lib Iff,CloseIFF
ShutDown3000: tst.l CONFile
beq ShutDown2000
move.l CONFile,d1
lib Dos,Close
ShutDown2100: tst.l Window2
beq ShutDown2000
move.l Window2,a0
lib Intuition,CloseWindow
ShutDown2000: 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 Iff
closlib Gfx
closlib Intuition
closlib Dos
pull d2-d7/a2-a6
move.l #RETURN_OK,d0
rts
;Subroutines atleast should be here...
AddMGads: move.l Window1,a0
lea.l MainMGad1,a1
move.l #00,a2
move.l #-1,d0
move.l #4,d1
lib Intuition,AddGList
;Refresh gadgets so they're drawn on the screen
lea.l MainMGad1,a0
move.l Window1,a1
sub.l a2,a2
move.l #4,d0
lib Intuition,RefreshGList
rts
RemMGads: move.l Window1,a0 ;Remove Main menu's gadgets
lea.l MainMGad1,a1
move.l #4,d0
lib Intuition,RemoveGList
rts
OpenWaitWin1: lea.l WaitWindow1,a0
lib Intuition,OpenWindow
move.l d0,Window2
beq OpenWaitWin_ERR1
move.l d0,a0
move.l $32(a0),a0
lea.l PleaseWaitTxt1,a1
clr.l d0
clr.l d1
lib Intuition,PrintIText
move.l #-1,d0
rts
OpenWaitWin_ERR1: clr.l d0
rts
CloseWaitWin1: tst.l Window2
beq CloseWaitWin2
move.l Window2,a0
lib Intuition,CloseWindow
clr.l Window2
CloseWaitWin2: 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 our Input-Handler 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 c