home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / tbsource.lha / TBSource / V舐iPaletti / VP.S
Text File  |  1993-12-21  |  18KB  |  916 lines

  1. *************************************************
  2. *                        *
  3. *         (C)opyright 1993        *
  4. *                        *
  5. *          Tomi Blinnikka        *
  6. *                        *
  7. *    Don't try to understand the code    *
  8. *                        *
  9. * Version 1.00    15/04/1993            *
  10. *           -18/04/1993            *
  11. *                        *
  12. * BUGS:    Command Line Option '?' caused error.    *
  13. *    Display problems under 2.04.        *
  14. *                        *
  15. * Version 1.01    18/04/1993            *
  16. *                        *
  17. *************************************************
  18.  
  19.     INCLUDE    "JMPLibs.i"
  20.     INCLUDE    "libraries/dos.i"
  21.     INCLUDE    "libraries/dosextens.i"
  22.     INCLUDE    "graphics/rastport.i"
  23.     INCLUDE    "libraries/gadtools.i"
  24.  
  25.     INCLUDE    "XREF:2.0.xref"
  26.  
  27.     INCLUDE    "XREF:gfx.xref"
  28.     INCLUDE    "XREF:intuition.xref"
  29.     INCLUDE    "XREF:exec.xref"
  30.     INCLUDE    "XREF:dos.xref"
  31.  
  32.  
  33. MainLeft:    EQU    17
  34. MainTop:    EQU    10
  35. SliderWidth:    EQU    200
  36. SliderHeight:    EQU    24
  37. SliderTxtWidth:    EQU    160
  38.  
  39. HelpTop:    EQU    MainTop+3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT
  40. HelpHeight:    EQU    80
  41.  
  42. TRUE:        EQU    1
  43. FALSE:        EQU    0
  44.  
  45. Depth:        EQU    3
  46. BGPen:        EQU    4
  47.  
  48.         section    VP,CODE
  49.  
  50. Start:        push    d2-d7/a2-a6
  51.         push    a0
  52.  
  53.         sub.l    a1,a1            ;Find our task
  54.         lib    Exec,FindTask
  55.         move.l    d0,OurTask
  56.         move.l    d0,a4
  57.  
  58.         move.l    pr_CLI(a4),d0
  59.         bne    OpenDos
  60.  
  61.         lea.l    pr_MsgPort(a4),a0
  62.         lib    Exec,WaitPort
  63.         lea.l    pr_MsgPort(a4),a0
  64.         lib    Exec,GetMsg
  65.         move.l    d0,WBMsg
  66.  
  67. OpenDos:    openlib    Dos,NoDos
  68.  
  69.         tst.l    WBMsg
  70.         beq    CLIStart
  71.  
  72.         pull    a0
  73.         lea.l    CONName,a0
  74.         move.l    a0,d1
  75.         move.l    #MODE_OLDFILE,d2
  76.         lib    Dos,Open
  77.         move.l    d0,CONFile
  78.         move.l    d0,_stdout
  79.         beq    NoCON
  80.  
  81.         bra    MainStart
  82.  
  83. CLIStart:    lib    Dos,Output
  84.         move.l    d0,_stdout
  85.  
  86.         pull    a0
  87.         cmp.b    #'?',(a0)
  88.         beq    Usage
  89.  
  90. MainStart:    openlib    GadTools,NoGT
  91.         openlib    Intuition,NoInt
  92.         openlib    Gfx,NoGfx
  93.  
  94. ;Close Workbench screen
  95.  
  96.         lib    Intuition,CloseWorkBench
  97.  
  98. ;Open screen and main window
  99.  
  100.         lea.l    NewScreen1,a0
  101.         lea.l    Screen1TagList,a1
  102.         lib    Intuition,OpenScreenTagList
  103.         move.l    d0,Screen1
  104.         beq    NoScreen
  105.  
  106. ;Get ViewPort
  107.  
  108.         move.l    Screen1,d0
  109.         add.l    #$2c,d0
  110.         move.l    d0,VP1
  111.  
  112. ;Set sizes etc
  113.  
  114.         lea.l    NewWindow1,a0
  115.         move.l    Screen1,a1
  116.         move.l    a1,nw_Screen(a0)
  117.         move.l    sc_Width(a1),nw_Width(a0)
  118.         clr.l    d0
  119.         move.b    sc_BarHeight(a1),d0
  120.         add.b    #1,d0
  121.         add.w    d0,nw_TopEdge(a0)
  122.         sub.w    d0,nw_Height(a0)
  123.  
  124. ;Do GadTools preparations, gadgets and menus
  125.  
  126. ;Get visualinfo
  127.  
  128.         move.l    Screen1,a0
  129.         lea.l    Screen1TagList,a1
  130.         lib    GadTools,GetVisualInfoA
  131.         move.l    d0,vi
  132.  
  133. ;Make gadget stuff
  134.  
  135.         lea.l    glist,a0
  136.         lib    GadTools,CreateContext
  137.         move.l    d0,ContextGad
  138.         beq    NoContextGad
  139.  
  140.         move.l    glist,a0
  141.         lea.l    NGSliderGad1,a1
  142.         move.l    #SLIDER_KIND,d0
  143.         move.l    vi,gng_VisualInfo(a1)
  144.         lea.l    SliderTagList1,a2
  145.         lib    GadTools,CreateGadgetA
  146.  
  147.         move.l    d0,SliderGad1
  148.         move.l    d0,a0
  149.  
  150.         lea.l    NGSliderGad2,a1
  151.         move.l    #SLIDER_KIND,d0
  152.         move.l    vi,gng_VisualInfo(a1)
  153.         lea.l    SliderTagList2,a2
  154.         lib    GadTools,CreateGadgetA
  155.  
  156.         move.l    d0,SliderGad2
  157.         move.l    d0,a0
  158.  
  159.         lea.l    NGSliderGad3,a1
  160.         move.l    #SLIDER_KIND,d0
  161.         move.l    vi,gng_VisualInfo(a1)
  162.         lea.l    SliderTagList3,a2
  163.         lib    GadTools,CreateGadgetA
  164.  
  165.         move.l    d0,SliderGad3
  166.         move.l    d0,a0
  167.  
  168. ;Do the menu stuff
  169.  
  170.         lea.l    MNProjectMenu1,a0
  171.         lea.l    MenuTagList,a1
  172.         lib    GadTools,CreateMenusA
  173.         move.l    d0,mlist
  174.         beq    NoMenus
  175.  
  176.         move.l    mlist,a0
  177.         move.l    vi,a1
  178.         lea.l    MenuTagList,a2
  179.         lib    GadTools,LayoutMenusA
  180.  
  181.         lea.l    NewWindow1,a0
  182.         lib    Intuition,OpenWindow
  183.         move.l    d0,Window1
  184.         beq    NoWindow
  185.         move.l    d0,a0
  186.         move.l    $32(a0),RP1
  187.  
  188. ;move requesters to Window1
  189.  
  190.         move.l    OurTask,a0
  191.         move.l    pr_WindowPtr(a0),OldTaskWinPtr
  192.         move.l    Window1,$b8(a0)
  193.  
  194. ;Add menus to window 1
  195.  
  196.         move.l    Window1,a0
  197.         move.l    mlist,a1
  198.         lib    Intuition,SetMenuStrip
  199.  
  200. ;Fill window with BGPen
  201.  
  202.         move.l    RP1,a1
  203.         move.l    #BGPen,d0
  204.         lib    Gfx,SetRast
  205.  
  206. ;Re-draw window frame
  207.  
  208.         move.l    Window1,a0
  209.         lib    Intuition,RefreshWindowFrame
  210.  
  211. ;Set APen to background color
  212.  
  213.         move.l    RP1,a1
  214.         clr.l    d0
  215.         lib    Gfx,SetAPen
  216.  
  217. ;Clear area for gadgets
  218.  
  219.         move.l    RP1,a1
  220.         move.l    #MainLeft-INTERWIDTH,d0
  221.         move.l    #MainTop-INTERHEIGHT,d1
  222.         move.l    #MainLeft-INTERWIDTH+SliderWidth+SliderTxtWidth+INTERWIDTH-1,d2
  223.         move.l    #MainTop-INTERHEIGHT+3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT-1,d3
  224.         lib    Gfx,RectFill
  225.  
  226. ;Draw a box around sliders
  227.  
  228.         move.l    RP1,a0
  229.         move.l    #MainLeft-INTERWIDTH,d0
  230.         move.l    #MainTop-INTERHEIGHT,d1
  231.         move.l    #SliderWidth+SliderTxtWidth+INTERWIDTH,d2
  232.         move.l    #3*(SliderHeight+INTERHEIGHT)+INTERHEIGHT,d3
  233.         move.l    vi,BevelBoxTags+4
  234.         lea.l    BevelBoxTags,a1
  235.         lib    GadTools,DrawBevelBoxA
  236.  
  237. ;Clear area for help text
  238.  
  239.         move.l    RP1,a1
  240.         move.l    #MainLeft-INTERWIDTH,d0
  241.         move.l    #HelpTop,d1
  242.         move.l    #MainLeft-INTERWIDTH+SliderWidth+SliderTxtWidth+INTERWIDTH-1,d2
  243.         move.l    #HelpTop+HelpHeight,d3
  244.         lib    Gfx,RectFill
  245.  
  246. ;Draw a box around help text
  247.  
  248.         move.l    RP1,a0
  249.         move.l    #MainLeft-INTERWIDTH,d0
  250.         move.l    #HelpTop,d1
  251.         move.l    #INTERWIDTH+SliderWidth+SliderTxtWidth,d2
  252.         move.l    #HelpHeight+INTERHEIGHT-2,d3
  253.         move.l    vi,BevelBoxTags+4
  254.         lea.l    BevelBoxTags,a1
  255.         lib    GadTools,DrawBevelBoxA
  256.  
  257. ;Set APen to color 1
  258.  
  259.         move.l    RP1,a1
  260.         move.l    #1,d0
  261.         lib    Gfx,SetAPen
  262. ;Print help text
  263.  
  264.         move.l    RP1,a0
  265.         lea.l    HelpTxt1,a1
  266.         move.l    #MainLeft+2,d0
  267.         move.l    #HelpTop+8,d1
  268.         lib    Intuition,PrintIText
  269.  
  270. ;Add gadgets to Window 1
  271.  
  272.         move.l    Window1,a0
  273.         move.l    glist,a1
  274.         sub.l    a2,a2
  275.         move.l    #-1,d0
  276.         move.l    #-1,d1
  277.         lib    Intuition,AddGList
  278.  
  279.         bsr    RefreshGads
  280.  
  281. ;Start of main loop
  282.  
  283. Window1IDCMP:    move.l    Window1,a0
  284.         bsr    CheckIDCMP
  285.         cmp.l    #CLOSEWINDOW,d2        ;gets fake closewindow only...
  286.         beq    ShutDown
  287.         cmp.l    #MENUPICK,d2
  288.         beq    Win1Menus
  289.         bra    Window1IDCMP
  290.  
  291. Win1Menus:    bsr    MenuNull
  292.         cmp.w    #$00,d6
  293.         beq    Win1Menus1
  294.         bra    Window1IDCMP
  295. Win1Menus1:    cmp.w    #$00,d5
  296.         beq    About
  297.         cmp.w    #$02,d5
  298.         beq    ShutDown
  299.         bra    Window1IDCMP
  300.  
  301. SliderHook1:    push    d2-d7/a2-a6
  302.         clr.l    d4
  303.         move.w    d0,d4
  304.         move.l    d4,Red
  305.         bra    SliderHook_OUT
  306.  
  307. SliderHook2:    push    d2-d7/a2-a6
  308.         clr.l    d4
  309.         move.w    d0,d4
  310.         move.l    d4,Green
  311.         bra    SliderHook_OUT
  312.  
  313. SliderHook3:    push    d2-d7/a2-a6
  314.         clr.l    d4
  315.         move.w    d0,d4
  316.         move.l    d4,Blue
  317.         bra    SliderHook_OUT
  318.  
  319. SliderHook_OUT:    move.l    VP1,a0
  320.         move.l    #BGPen,d0
  321.         move.l    Red,d1
  322.         move.l    Green,d2
  323.         move.l    Blue,d3
  324.         lib    Gfx,SetRGB4
  325.  
  326.         move.l    d4,d0
  327.         pull    d2-d7/a2-a6
  328.         rts
  329.  
  330. About:        bsr    SleepPointer
  331.         bsr    MenusOff
  332.  
  333.         move.l    Window1,a0
  334.         lea.l    AboutTxt1,a1
  335.         sub.l    a2,a2        ;positive text
  336.         lea.l    OKTxt,a3    ;a bit the wrong way around but...
  337.         move.l    #$00,d0
  338.         move.l    #$00,d1
  339.         move.l    #320,d2
  340.         move.l    #$50,d3
  341.         lib    Intuition,AutoRequest
  342.         bsr    MenusOn
  343.         bsr    NormalPointer
  344.         bra    Window1IDCMP
  345.  
  346. ShutDown:    tst.l    OldTaskWinPtr
  347.         beq    ShutDown3000
  348.         move.l    OurTask,a0
  349.         move.l    OldTaskWinPtr,pr_WindowPtr(a0)
  350.  
  351. ShutDown3000:    tst.l    CONFile
  352.         beq    ShutDown2000
  353.         move.l    CONFile,d1
  354.         lib    Dos,Close
  355.  
  356. ShutDown2000:    tst.l    _IntuitionBase
  357.         beq    ShutDown1950
  358.         lib    Intuition,OpenWorkBench
  359.  
  360. ShutDown1950:    tst.l    Window1
  361.         beq    ShutDown1900
  362.         move.l    Window1,a0
  363.         lib    Intuition,ClearMenuStrip
  364.         move.l    Window1,a0
  365.         bsr    ClearMSGs
  366.  
  367. ShutDown1900:    bsr    Clean2.0Magic
  368.  
  369.         tst.l    Screen1
  370.         beq    ShutDown1000
  371.         move.l    Screen1,a0
  372.         lib    Intuition,CloseScreen
  373.  
  374. ShutDown1100:
  375. ShutDown1000:    move.l    WBMsg,d2
  376.         beq    ShutDown_OUT
  377.         lib    Exec,Forbid
  378.         move.l    d2,a1
  379.         flib    Exec,ReplyMsg
  380.  
  381. ShutDown_OUT:    closlib    GadTools
  382.         closlib    Gfx
  383.         closlib    Intuition
  384.         closlib    Dos
  385.  
  386.         pull    d2-d7/a2-a6
  387.         move.l    #RETURN_OK,d0
  388.         rts
  389.  
  390. ;Subroutines should be here...
  391.  
  392. RefreshGads:    move.l    glist,a0
  393.         move.l    Window1,a1
  394.         sub.l    a2,a2
  395.         move.l    #-1,d0
  396.         lib    Intuition,RefreshGList
  397.  
  398.         move.l    Window1,a0
  399.         sub.l    a1,a1
  400.         lib    GadTools,GT_RefreshWindow
  401.         rts
  402.  
  403. SleepPointer:    move.l    Window1,a0
  404.         lea.l    ClockPointer1,a1
  405.         move.l    #16,d0
  406.         move.l    #16,d1            ;WHAT-THE-HECK IS THIS FOR?
  407.         move.l    #-6,d2
  408.         move.l    #0,d3
  409.         lib    Intuition,SetPointer
  410.         rts
  411.  
  412. NormalPointer:    move.l    Window1,a0
  413.         lib    Intuition,ClearPointer
  414.         rts
  415.  
  416. MenusOn:    move.l    Window1,a0
  417.         move.l    mlist,a1
  418.         lib    Intuition,SetMenuStrip
  419.         rts
  420.  
  421. MenusOff:    move.l    Window1,a0
  422.         lib    Intuition,ClearMenuStrip
  423.         rts
  424.  
  425. ;CheckIDCMP gets messages from both the CTRL_C bit and Intuition.
  426. ; a0 = window structure
  427.  
  428. CheckIDCMP:    move.l    $56(a0),a2        ;Get window's port
  429.         move.l    #0,d1            ;Set signals for
  430.         move.b    $0f(a2),d1        ;IntuiMessages
  431.         move.l    #SIGBREAKF_CTRL_C,d0    ;and for CTRL_C check
  432.         bset.l    d1,d0
  433.         lib    Exec,Wait    
  434.     
  435.         cmp.l    #SIGBREAKF_CTRL_C,d0
  436.         beq    Break
  437.  
  438. GetMsg1:    move.l    a2,a0    
  439.         lib    GadTools,GT_GetIMsg
  440.         tst.l    d0
  441.         beq    GetMsg2
  442.     
  443.         move.l    d0,a1 
  444.         move.l    $14(a1),d2        ;answers with Class in d2,
  445.         move.w    $18(a1),d3        ;Code in d3 and
  446.         move.w    $1a(a1),a4        ;Qualifier in a4
  447.         move.l    $1c(a1),a5