home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / tbsource.lha / TBSource / RM / RM.S
Text File  |  1993-12-21  |  22KB  |  1,095 lines

  1. ***********************************************
  2. *                                             *
  3. *              (C)opyright 1991               *
  4. *                                             *
  5. *             by  Tomi Blinnikka              *
  6. *                                             *
  7. *      Don´t try to understand the code       *
  8. *                                             *
  9. *    Raw-Master -The Amiga version-          *
  10. *                                             *
  11. ***********************************************
  12.  
  13.     INCLUDE    "JMPLibs.i"
  14.     INCLUDE    "libraries/dos.i"
  15.     INCLUDE    "libraries/dosextens.i"
  16.     INCLUDE    "libraries/iff.i"        ;includes "XREFS"
  17. ;    INCLUDE    "graphics/gfx.i"
  18. ;    INCLUDE    "intuition/intuition.i"
  19. ;    INCLUDE    "intuition/gadgetclass.i"
  20.     INCLUDE    "libraries/gadtools.i"
  21.  
  22.     INCLUDE    "XREF:2.0.xref"
  23.  
  24.     INCLUDE    "XREF:gfx.xref"
  25. ;    INCLUDE    "XREF:mathffp.xref"
  26.     INCLUDE    "XREF:intuition.xref"
  27.     INCLUDE    "XREF:exec.xref"
  28.     INCLUDE    "XREF:dos.xref"
  29. ;    INCLUDE    "XREF:diskfont.xref"
  30.  
  31.  
  32. MainMTop:    EQU    150
  33.  
  34. TRUE:        EQU    1
  35. FALSE:        EQU    0
  36.  
  37.         section    RM,CODE
  38.  
  39. Start:        push    d2-d7/a2-a6
  40.         push    a0
  41.  
  42.         sub.l    a1,a1            ;Find our task
  43.         lib    Exec,FindTask
  44.         move.l    d0,OurTask
  45.         move.l    d0,a4
  46.  
  47.         move.l    pr_CLI(a4),d0
  48.         bne    OpenDos
  49.  
  50.         add.l    #8,sp
  51.         lea.l    pr_MsgPort(a4),a0
  52.         lib    Exec,WaitPort
  53.         lea.l    pr_MsgPort(a4),a0
  54.         lib    Exec,GetMsg
  55.         move.l    d0,WBMsg
  56.  
  57. OpenDos:    openlib    Dos,NoDos
  58.         pull    a0
  59.  
  60.         cmp.b    #'?',(a0)
  61.         beq    Usage
  62.  
  63.         tst.l    WBMsg
  64.         beq    CLIStart
  65.  
  66.         lea.l    NILName,a0
  67.         move.l    a0,d1
  68.         move.l    #MODE_NEWFILE,d2
  69.         lib    Dos,Open
  70.         move.l    d0,NILFile
  71.         beq    ShutDown
  72.         move.l    NILFile,_stdout
  73.         bra    MainStart
  74.  
  75. CLIStart:    lib    Dos,Output
  76.         move.l    d0,_stdout
  77.  
  78. MainStart:    lea.l    CONName,a0
  79.         move.l    a0,d1
  80.         move.l    #MODE_OLDFILE,d2
  81.         lib    Dos,Open
  82.         move.l    d0,CONFile
  83.         beq    NoCON
  84.  
  85.         openlib    GadTools,NoGT
  86.         openlib    Intuition,NoInt
  87.         openlib    Gfx,NoGfx
  88.         oldlib    Iff,NoIff
  89.  
  90. ;Open screen and main window
  91.  
  92.         lea.l    NewScreen1,a0
  93.         lea.l    Screen1TagList,a1
  94.         lib    Intuition,OpenScreenTagList
  95.         move.l    d0,Screen1
  96.         beq    NoScreen
  97.  
  98.         move.l    Screen1,d0
  99.         move.l    d0,SToW2
  100.         lea.l    NewWindow1,a0
  101.         move.l    d0,nw_Screen(a0)
  102.         move.l    d0,a1
  103.         move.l    sc_Width(a1),nw_Width(a0)
  104. ;        sub.w    #11,nw_Height(a0)
  105.         add.l    #$2c,d0
  106.         move.l    d0,VP1
  107.  
  108. ;Hide Title
  109.  
  110.         move.l    Screen1,a0
  111.         move.l    #FALSE,d0
  112.         lib    Intuition,ShowTitle
  113.  
  114. ;Set colors
  115.  
  116.         move.l    VP1,a0
  117.         lea.l    ShipColors1,a1
  118.         move.l    #32,d0
  119.         lib    Gfx,LoadRGB4
  120.  
  121. ;load picture
  122.  
  123.         lea.l    FileName1,a0
  124.         lib    Iff,OpenIFF
  125.         move.l    d0,LogoFile
  126.         beq    NoIFFPic
  127.  
  128. ;get sprites and do sprite stuff
  129.  
  130.         lea    Sprite1,a0
  131.         move.l    #-1,d0
  132.         lib    Gfx,GetSprite
  133.         move.l    d0,Sprite1Num
  134.         cmp.l    #-1,d0
  135.         beq    NoSprite
  136.  
  137.         lea    Sprite2,a0
  138.         move.l    #-1,d0
  139.         lib    Gfx,GetSprite
  140.         move.l    d0,Sprite2Num
  141.         cmp.l    #-1,d0
  142.         beq    NoSprite
  143.  
  144.         move.l    VP1,a0
  145.         lea.l    Sprite1,a1
  146.         lea.l    ShipData1,a2
  147.         lib    Gfx,ChangeSprite
  148.  
  149.         move.l    VP1,a0
  150.         lea.l    Sprite1,a1
  151.         move.l    #100,d0
  152.         move.l    #50,d1
  153.         lib    Gfx,MoveSprite
  154.  
  155.         move.l    VP1,a0
  156.         lea.l    Sprite2,a1
  157.         lea.l    ShipData2,a2
  158.         lib    Gfx,ChangeSprite
  159.  
  160.         move.l    VP1,a0
  161.         lea.l    Sprite2,a1
  162.         move.l    #200,d0
  163.         move.l    #50,d1
  164.         lib    Gfx,MoveSprite
  165.  
  166. ;Do GadTools preparations, gadgets and menus
  167.  
  168.         lea.l    glist,a0
  169.         lib    GadTools,CreateContext
  170.         move.l    d0,ContextGad
  171.         beq    NoContextGad
  172.  
  173.         move.l    Screen1,a0
  174.         lea.l    Screen1TagList,a1
  175.         lib    GadTools,GetVisualInfoA
  176.         move.l    d0,vi
  177.  
  178. ;        move.l    glist,a0
  179. ;        lea.l    NGGad,a1
  180. ;        move.l    #_KIND,d0
  181. ;        move.l    vi,gng_VisualInfo(a1)
  182. ;        lea.l    NumGadTagList,a2
  183. ;        lib    GadTools,CreateGadgetA
  184.  
  185. ;        move.l    d0,a0
  186. ;        move.l    a0,Gad1
  187.  
  188.         lea.l    MNProjectMenu1,a0
  189.         lea.l    MenuTagList,a1
  190.         lib    GadTools,CreateMenusA
  191.         move.l    d0,mlist
  192.         beq    NoMenus
  193.  
  194.         move.l    mlist,a0
  195.         move.l    vi,a1
  196.         lea.l    MenuTagList,a2
  197.         lib    GadTools,LayoutMenusA
  198.  
  199.         lea.l    NewWindow1,a0
  200.         lib    Intuition,OpenWindow
  201.         move.l    d0,Window1
  202.         beq    NoWindow
  203.         move.l    d0,a0
  204.         move.l    $32(a0),RP1
  205.  
  206. ;move requesters to Window1
  207.  
  208.         move.l    OurTask,a0
  209.         move.l    $b8(a0),OldTaskWinPtr
  210.         move.l    Window1,$b8(a0)
  211.  
  212. ;Draw main logo
  213.  
  214.         move.l    RP1,a0
  215.         move.l    $4(a0),a0
  216.         move.l    LogoFile,a1
  217.         lib    Iff,DecodePic
  218.         tst.l    d0
  219.         beq    NoPic
  220.  
  221.  
  222.         move.l    RP1,a0
  223.         lea.l    MainMBorder1,a1
  224.         move.l    #50,d0            ;*1
  225.         move.l    #MainMTop,d1        ;*2
  226.         lib    Intuition,DrawBorder
  227.  
  228. ;Add menus to window 1
  229.  
  230.         move.l    Window1,a0
  231.         move.l    mlist,a1
  232.         lib    Intuition,SetMenuStrip
  233.  
  234.         bsr    AddMGads
  235.  
  236. ;Start of main loop
  237.  
  238. Window1IDCMP:    move.l    Window1,a0
  239.         bsr    CheckIDCMP
  240.         cmp.l    #REFRESHWINDOW,d2
  241.         beq    Refresher
  242.         cmp.l    #VANILLAKEY,d2
  243.         beq    VanillaKeys
  244.         cmp.l    #MENUPICK,d2
  245.         beq    Win1Menus
  246.         cmp.l    #RAWKEY,d2
  247.         beq    RawKeys
  248.         cmp.l    #GADGETUP,d2
  249.         beq    GadgetPick
  250.         cmp.l    #ACTIVEWINDOW,d2
  251. ;        beq    ActivateGads
  252.         bra    Window1IDCMP
  253.  
  254. Refresher:    move.l    Window1,a0
  255.         lib    GadTools,GT_BeginRefresh
  256.         move.l    Window1,a0
  257.         move.l    #TRUE,d0
  258.         lib    GadTools,GT_EndRefresh
  259.         bra    Window1IDCMP
  260.  
  261. VanillaKeys:    cmp.w    #$1b,d3
  262.         beq    ShutDown
  263.         cmp.w    #'1',d3
  264. ;        beq    Start
  265.         cmp.w    #'2',d3
  266.         beq    About
  267.         cmp.w    #'3',d3
  268.         beq    ShutDown
  269.         bra    Window1IDCMP
  270. RawKeys:    cmp.w    #$5f,d3
  271.         beq    Help
  272.         bra    Window1IDCMP
  273.  
  274. GadgetPick:    cmp.w    #70,$26(a5)
  275. ;        beq    StartGame
  276.         cmp.w    #71,$26(a5)
  277.         beq    About
  278.         cmp.w    #72,$26(a5)
  279.         beq    ShutDown
  280.         bra    Window1IDCMP
  281.  
  282. Win1Menus:    bsr    MenuNull
  283.         cmp.w    #$00,d6
  284.         beq    Win1Menus1
  285.         cmp.w    #$01,d6
  286.         beq    Win1Menus2
  287.         bra    Window1IDCMP
  288. Win1Menus1:    cmp.w    #$00,d5
  289. ;        beq    StartGame
  290.         cmp.w    #$01,d5
  291.         beq    About
  292.         cmp.w    #$03,d5
  293.         beq    ShutDown
  294.         bra    Window1IDCMP
  295. Win1Menus2:    bra    Window1IDCMP
  296.  
  297. About:        bsr    SleepPointer
  298.         bsr    MenusOff
  299.  
  300.         move.l    Window1,a0
  301.         lea.l    AboutTxt1,a1
  302.         move.l    #$00,a2        ;positive text
  303.         lea.l    OKTxt,a3    ;a bit the wrong way around but...
  304.         move.l    #$00,d0
  305.         move.l    #$00,d1
  306.         move.l    #320,d2
  307.         move.l    #$50,d3
  308.         lib    Intuition,AutoRequest
  309.         bsr    MenusOn
  310.         bsr    NormalPointer
  311.         bra    Window1IDCMP
  312.  
  313. Help:        bra    Window1IDCMP
  314.  
  315. ShutDown:    move.l    OurTask,a0
  316.         move.l    OldTaskWinPtr,$b8(a0)
  317.  
  318. ShutDown4100:    move.l    Sprite1Num,d0
  319.         beq    ShutDown4000
  320.         lib    Gfx,FreeSprite
  321.  
  322. ShutDown4000:    move.l    Sprite2Num,d0
  323.         beq    ShutDown3500
  324.         lib    Gfx,FreeSprite
  325.  
  326. ShutDown3500:    tst.l    NILFile
  327.         beq    ShutDown3400
  328.         move.l    NILFile,d1
  329.         lib    Dos,Close
  330.  
  331. ShutDown3400:    tst.l    LogoFile
  332.         beq    ShutDown3000
  333.         move.l    LogoFile,a1
  334.         lib    Iff,CloseIFF
  335.  
  336. ShutDown3000:    tst.l    CONFile
  337.         beq    ShutDown2000
  338.         move.l    CONFile,d1
  339.         lib    Dos,Close
  340.  
  341. ShutDown2100:    tst.l    Window2
  342.         beq    ShutDown2000
  343.         move.l    Window2,a0
  344.         lib    Intuition,CloseWindow
  345.  
  346. ShutDown2000:    tst.l    Window1
  347.         beq    ShutDown1900
  348.         move.l    Window1,a0
  349.         lib    Intuition,ClearMenuStrip
  350.         move.l    Window1,a0
  351.         bsr    ClearMSGs
  352.  
  353. ShutDown1900:    bsr    Clean2.0Magic
  354.  
  355.         tst.l    Screen1
  356.         beq    ShutDown1000
  357.         move.l    Screen1,a0
  358.         lib    Intuition,CloseScreen
  359.  
  360. ShutDown1100:
  361. ShutDown1000:    move.l    WBMsg,d2
  362.         beq    ShutDown_OUT
  363.         lib    Exec,Forbid
  364.         move.l    d2,a1
  365.         flib    Exec,ReplyMsg
  366.  
  367. ShutDown_OUT:    closlib    GadTools
  368.         closlib    Iff
  369.         closlib    Gfx
  370.         closlib    Intuition
  371.         closlib    Dos
  372.  
  373.         pull    d2-d7/a2-a6
  374.         move.l    #RETURN_OK,d0
  375.         rts
  376.  
  377. ;Subroutines atleast should be here...
  378.  
  379. AddMGads:    move.l    Window1,a0
  380.         lea.l    MainMGad1,a1
  381.         move.l    #00,a2
  382.         move.l    #-1,d0
  383.         move.l    #4,d1
  384.         lib    Intuition,AddGList
  385.  
  386. ;Refresh gadgets so they're drawn on the screen
  387.  
  388.         lea.l    MainMGad1,a0
  389.         move.l    Window1,a1
  390.         sub.l    a2,a2
  391.         move.l    #4,d0
  392.         lib    Intuition,RefreshGList
  393.         rts
  394.  
  395. RemMGads:    move.l    Window1,a0        ;Remove Main menu's gadgets
  396.         lea.l    MainMGad1,a1
  397.         move.l    #4,d0
  398.         lib    Intuition,RemoveGList
  399.         rts
  400.  
  401. OpenWaitWin1:    lea.l    WaitWindow1,a0
  402.         lib    Intuition,OpenWindow
  403.         move.l    d0,Window2
  404.         beq    OpenWaitWin_ERR1
  405.         move.l    d0,a0
  406.         move.l    $32(a0),a0
  407.         lea.l    PleaseWaitTxt1,a1
  408.         clr.l    d0
  409.         clr.l    d1
  410.         lib    Intuition,PrintIText
  411.         move.l    #-1,d0
  412.         rts
  413. OpenWaitWin_ERR1: clr.l    d0
  414.         rts
  415.  
  416. CloseWaitWin1:    tst.l    Window2
  417.         beq    CloseWaitWin2
  418.         move.l    Window2,a0
  419.         lib    Intuition,CloseWindow
  420.         clr.l    Window2
  421. CloseWaitWin2:    rts
  422.  
  423. SleepPointer:    move.l    Window1,a0
  424.         lea.l    ClockPointer1,a1
  425.         move.l    #16,d0
  426.         move.l    #16,d1            ;WHAT-THE-HECK IS THIS FOR?
  427.         move.l    #-6,d2
  428.         move.l    #0,d3
  429.         lib    Intuition,SetPointer
  430.         rts
  431.  
  432. NormalPointer:    move.l    Window1,a0
  433.         lib    Intuition,ClearPointer
  434.         rts
  435.  
  436. MenusOn:    move.l    Window1,a0
  437.         move.l    mlist,a1
  438.         lib    Intuition,SetMenuStrip
  439.         rts
  440.  
  441. MenusOff:    move.l    Window1,a0
  442.         lib    Intuition,ClearMenuStrip
  443.         rts
  444.  
  445. ;CheckIDCMP gets messages from both our Input-Handler and Intuition.
  446. ; a0 = window structure
  447.  
  448. CheckIDCMP:    move.l    $56(a0),a2        ;Get window's port
  449.         move.l    #0,d1            ;Set signals for
  450.         move.b    $0f(a2),d1        ;IntuiMessages
  451.         move.l    #SIGBREAKF_CTRL_C,d0    ;and for CTRL_C c