home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / commodity / cxpak / source.lha / source / WSize.s < prev   
Text File  |  1995-01-10  |  9KB  |  574 lines

  1. *****
  2. *
  3. *    $VER : WSize 1.00, Pierre-Louis MANGEARD, Feb. 1993
  4. *
  5. *****
  6.  
  7.     OPT    l-,c+,d-,w+,o1+,o2+,o3+,o4+,o5+,o6+,o7+,o10+,o11+,o12+
  8.  
  9.     INCLUDE    CxPak_Include
  10.  
  11.     SECTION        NTRYHUNK,CODE
  12.  
  13.     clr.l    d4
  14.     lea    _BSSBase,a4
  15.     lea    _DataBase,a5
  16.     
  17.     suba.l    a1,a1
  18.     EXEC        FindTask        find us
  19.     movea.l    d0,a2
  20.     move.l    d0,cxp_Task(a4)
  21.     move.b    LN_PRI(a2),Old_Pri(a4)    priorite
  22.     lea    pr_MsgPort(a2),a0
  23.     move.l    a0,cxp_Port(a5)
  24.  
  25.     tst.l    pr_CLI(a2)
  26.     bne.s    end_startup        and run the user prog
  27.  
  28. fromWorkbench
  29.  
  30. ;    move.l    cxp_Port(a5),a0        port deja en ao
  31.     CALL        WaitPort    wait for a message
  32.     move.l    cxp_Port(a5),a0
  33.     CALL        GetMsg        then get it
  34.     move.l    d0,RetMsg_    save it for later reply
  35.  
  36. end_startup
  37.  
  38.     bsr.s    _main            call our program
  39.  
  40.     tst.l    RetMsg_
  41.     beq.s    exitToDOS        if I was a CLI
  42.  
  43.     EXEC        Forbid
  44.     movea.l    RetMsg_,a1
  45.     CALL        ReplyMsg
  46.  
  47. exitToDOS
  48.  
  49.     rts
  50.  
  51. _main
  52.  
  53. *****
  54. *    debut effectif du programme.
  55. *****
  56.  
  57.     lea    cxname(a5),a1
  58.     CALL        OldOpenLibrary
  59.     move.l    d0,_CxBase(a4)
  60.     beq    cxp55
  61.  
  62.     lea    intname(a5),a1
  63.     CALL        OldOpenLibrary
  64.     move.l    d0,_IntuitionBase(a4)
  65.     beq    cxp55
  66.  
  67.     lea    layername(a5),a1
  68.     CALL        OldOpenLibrary
  69.     move.l    d0,_LayerBase(a4)
  70.     beq    cxp55
  71.  
  72.     lea    iconname(a5),a1
  73.     CALL        OldOpenLibrary
  74.     move.l    d0,_IconBase(a4)
  75.     beq    cxp55
  76.  
  77.     lea    dosname(a5),a1
  78.     CALL        OldOpenLibrary
  79.     move.l    d0,_DOSBase(a4)
  80.     beq    cxp55
  81.  
  82.  
  83.     tst.l    RetMsg_
  84.     beq    cxp020
  85.  
  86. * si on vient du workbench, recuperer ToolTypeArray :
  87.  
  88.     movea.l    RetMsg_,a2
  89.     movea.l    sm_ArgList(a2),a2    ArgList sauvegarde provisoire en a2
  90.     beq    cxp020
  91.     move.l    wa_Lock(a2),d1
  92.     DOS        CurrentDir
  93.  
  94.     movea.l    wa_Name(a2),a0        name en a0
  95.     ICON        GetDiskObject
  96.     move.l    d0,cxp_DiskObj(a4)
  97.     beq    cxp020
  98.     movea.l    d0,a2
  99.     movea.l    do_ToolTypes(a2),a2
  100.  
  101.  
  102. * recupere PRIORITY en tooltype :
  103.  
  104.     movea.l    a2,a0
  105.     lea    cxp_ToolType(a5),a1
  106.     CALL        FindToolType
  107.     tst.l    d0
  108.     beq.s    cxp02
  109.  
  110.     movea.l    d0,a0
  111.     clr.w    d2
  112.  
  113. * conversion ascii -> entier du tooltype CX_PRIORITY :
  114.  
  115.     cmpi.b    #'-',(a0)
  116.     bne.s    cxp06
  117.  
  118.     moveq    #1,d2
  119.     addq.l    #BYTE,a0
  120.  
  121. cxp06    moveq    #0,d0
  122.  
  123. cxp07    moveq    #0,d1
  124.     move.b    (a0)+,d1
  125.     beq.s    cxp09
  126.     subi.b    #'0',d1
  127.     add.l    d0,d0
  128.     add.l    d0,d1
  129.     lsl.l    #2,d0
  130.     add.l    d1,d0
  131.     bra.s    cxp07
  132.  
  133. cxp09    tst.w    d2
  134.     beq.s    cxp08
  135.  
  136.     neg.b    d0
  137.  
  138. cxp08    move.b    d0,cxp_Pri(a5)
  139.  
  140.  
  141. * recupere QUALIFIER en tooltype :
  142.  
  143. cxp02    movea.l    a2,a0
  144.     lea    cxp_ToolType1(a5),a1
  145.     ICON        FindToolType
  146.     tst.l    d0
  147.     beq.s    cxp04
  148.     movea.l    d0,a0
  149.     lea    IX_dumm(a4),a1
  150.     CX        ParseIX
  151.  
  152.     move.w    IX_dumm+ix_Qualifier(a4),d0
  153.     beq.s    cxp04
  154.     move.w    d0,d1
  155.     or.w    #IEQUALIFIER_LEFTBUTTON,d0
  156.     move.w    d0,cxp_Qual(a5)
  157.     or.w    #IEQUALIFIER_RBUTTON,d1
  158.     move.w    d1,cxp_Qual1(a5)
  159.  
  160. cxp04    movea.l    cxp_DiskObj(a4),a0
  161.     ICON        FreeDiskObject
  162.  
  163.  
  164. * definition du signal :
  165.  
  166. cxp020    clr.l    d0
  167.     movea.l    cxp_Port(a5),a1
  168.     move.b    MP_SIGBIT(a1),d0
  169.     moveq    #1,SigFlg_
  170.     lsl.l    d0,SigFlg_
  171.     ori.l    #SIGBREAKF_CTRL_C,SigFlg_
  172.  
  173. * installation du broker :
  174.  
  175.     lea    cxp_NewBroker(a5),a0
  176.     moveq    #0,d0
  177.     CX        CxBroker
  178.     move.l    d0,Broker_
  179.     beq    cxp55                si WSize deja la
  180.  
  181.     lea    IX(a5),a0
  182.     move.w    #CX_MAGIC,d0
  183.     bsr    Set_CxNet
  184.     beq    cxp55
  185.  
  186.     lea    IX1(a5),a0
  187.     move.w    #CX_FAIRY,d0
  188.     bsr    Set_CxNet
  189.     beq    cxp55
  190.  
  191. * definition du move gad :
  192.  
  193.     lea    cxp_SizeGad(a4),a0
  194.     move.w    #GFLG_GADGHNONE,gg_Flags(a0)
  195.     move.w    #GACT_IMMEDIATE,gg_Activation(a0)
  196.  
  197. * activation du broker :
  198.  
  199.     moveq    #TRUE,d0
  200.     bsr    SwitchBroker
  201.  
  202.     movea.l    cxp_Task(a4),a1
  203.     moveq    #CXP_PRIORITY,d0
  204.     EXEC    SetTaskPri
  205.  
  206.  
  207. * recuperation du message :
  208.  
  209. cxp1    move.l    SigFlg_,d0
  210.     EXEC        Wait
  211.  
  212.     cmpi.l    #SIGBREAKF_CTRL_C,d0
  213.     bne.s    cxp3
  214.  
  215.     moveq    #CXCMD_KILL,MsgId_
  216.  
  217. cxp3    movea.l    cxp_Port(a5),a0
  218.     CALL        GetMsg
  219.     tst.l    d0
  220.     beq    cxp40
  221.     movea.l    d0,a2
  222.  
  223. * type et id du message :
  224.  
  225.     movea.l    a2,a0
  226.     CX        CxMsgType
  227.     move.w    d0,MsgType_
  228.  
  229.     movea.l    a2,a0
  230.     CALL        CxMsgID
  231.     move.w    d0,MsgId_
  232.  
  233.     clr.b    cxp_Zoom(a4)
  234.     cmpi.w    #CX_FAIRY,MN_SIZE+ie_Code(a2)
  235.     seq    cxp_Zoom(a4)
  236.  
  237.     movea.l    a2,a1
  238.     EXEC    ReplyMsg
  239.  
  240. * action selon le type :
  241.  
  242.     cmpi.w    #CXM_COMMAND,MsgType_
  243.     beq    cxp40
  244.  
  245.  
  246. * localisation de la fenetre :
  247.  
  248. * screen en a2 
  249.  
  250.     moveq    #0,d0
  251.     INT        LockIBase
  252.     move.l    d0,-(sp)
  253.  
  254.     movea.l    _IntuitionBase(a4),a0
  255.     movea.l    ib_FirstScreen(a0),a2
  256. cxp5    move.w    ib_MouseY(a0),d0        coord Y de la souris
  257.     cmp.w    sc_TopEdge(a2),d0        - haut de l'ecran
  258.     bge.s    cxp10
  259.     movea.l    sc_NextScreen(a2),a2
  260.     cmpa.w    #0,a2
  261.     bne.s    cxp5
  262.  
  263. cxp10    movea.l    (sp)+,a0
  264.     CALL        UnlockIBase
  265.  
  266.     movea.l    a2,a0
  267.     adda.w    #sc_LayerInfo,a0
  268.     move.l    a0,-(sp)
  269.     LAYER        LockLayerInfo
  270.  
  271.     movea.l    (sp),a0
  272.     move.w    sc_MouseX(a2),d0
  273.     move.w    sc_MouseY(a2),d1
  274.     CALL        WhichLayer
  275.     move.l    d0,d2                sauvegarde provisoire
  276.  
  277.     movea.l    (sp),a0
  278.     CALL        UnlockLayerInfo
  279.  
  280.     movea.l    (sp)+,a1            layerinfo en a1
  281.     move.l    d2,d0                restaure d0
  282.     beq    cxp1                si pas de layer, rien
  283.  
  284.     movea.l    d0,a0                layer en a0
  285.     move.l    lr_Window(a0),cxp_Window(a4)
  286.     beq    cxp1    
  287.  
  288.     movea.l    cxp_Window(a4),a0
  289.  
  290. * si cxp_Zoom=$FF => message FAIRY => rightbutton => zip window :
  291.  
  292.     tst.b    cxp_Zoom(a4)
  293.     beq.s    cxp30
  294.     INT        ZipWindow
  295.     bra    cxp1
  296.  
  297. cxp30    movea.l    cxp_Window(a4),a0        window
  298.     lea    cxp_SizeGad(a4),a1        gadget
  299.     moveq    #0,d0                en tete de liste
  300.     move.w    #GTYP_SIZING,gg_GadgetType(a1)
  301.     move.l    wd_Flags(a0),d1
  302.     andi.l    #WFLG_GIMMEZEROZERO,d1
  303.     beq.s    cxp20
  304.     move.w    #GTYP_GZZGADGET+GTYP_SIZING,gg_GadgetType(a1)
  305. cxp20    move.w    wd_Width(a0),gg_Width(a1)    width du gadget
  306.     move.w    wd_Height(a0),gg_Height(a1)    height du gadget
  307.     INT        AddGadget
  308.  
  309.     moveq    #1,d1
  310.     DOS        Delay
  311.  
  312.     movea.l    cxp_Window(a4),a0
  313.     lea    cxp_SizeGad(a4),a1
  314.     INT        RemoveGadget
  315.  
  316.     bra    cxp1
  317.  
  318.  
  319. * on a recu un msg COMMAND :
  320.  
  321. cxp40    cmpi.w    #CXCMD_KILL,MsgId_        kill WSize
  322.     beq.s    cxp60
  323.  
  324.     cmpi.w    #CXCMD_UNIQUE,MsgId_        toggle WSize
  325.     beq.s    cxp60
  326.  
  327.     cmpi.w    #CXCMD_DISABLE,MsgId_        dormant WSize
  328.     bne.s    cxp43
  329.  
  330.     moveq    #FALSE,d0
  331.     bsr.s    SwitchBroker
  332.  
  333.     bra    cxp1
  334.  
  335. cxp43    cmpi.w    #CXCMD_ENABLE,MsgId_        wake up WSize
  336.     bne    cxp1
  337.  
  338.     moveq    #TRUE,d0
  339.     bsr.s    SwitchBroker
  340.  
  341.     bra    cxp1
  342.  
  343.  
  344. cxp55    moveq    #RETURN_ERROR,d2
  345.  
  346.     bra.s    cxp62
  347.  
  348. * Exit :
  349.  
  350. cxp60    moveq    #RETURN_OK,d2
  351.  
  352. cxp62    tst.l    Broker_
  353.     beq.s    cxp70
  354.  
  355. cxp65    movea.l    Broker_,a0
  356.     CX        DeleteCxObjAll
  357.  
  358. cxp70    movea.l    _DOSBase(a4),a1
  359.     EXEC    CloseLibrary
  360.  
  361. cxp94    movea.l    _IconBase(a4),a1
  362.     CALL        CloseLibrary
  363.  
  364. cxp93    movea.l    _LayerBase(a4),a1
  365.     CALL        CloseLibrary
  366.  
  367. cxp92    movea.l    _IntuitionBase(a4),a1
  368.     CALL        CloseLibrary
  369.  
  370. cxp91    movea.l    _CxBase(a4),a1
  371.     CALL        CloseLibrary
  372.  
  373. * restore la priorite du shell d'origine le cas echeant :
  374.  
  375. cxp90    clr.l    d0
  376.     movea.l    cxp_Task(a4),a1
  377.     move.b    Old_Pri(a4),d0
  378.     CALL    SetTaskPri
  379.  
  380.     move.l    d2,d0
  381.  
  382.     rts
  383.  
  384.  
  385. *****
  386. *    subroutines.
  387. *****
  388.  
  389. SwitchBroker:
  390.  
  391. * void SwitchBroker(BOOL)
  392. *             d0 = TRUE or FALSE
  393.  
  394.     movea.l    Broker_,a0
  395.     CX        ActivateCxObj
  396.  
  397.     rts
  398.  
  399.  
  400. Set_CxNet:
  401.  
  402. * success = Set_CxNet(IX, ie_Code)
  403. *  d0 (CCR)          a0     d0:16
  404. * (_CxBase deja en a6)
  405.  
  406.     move.w    d3,-(sp)
  407.  
  408.     clr.l    d3
  409.     movea.l    a0,a2
  410.     move.w    d0,d3
  411.  
  412. * installation du filter :
  413.  
  414.     moveq    #CX_FILTER,d0
  415.     lea    cxp_HotKey(a5),a0
  416.     suba.l    a1,a1
  417.     CALL        CreateCxObj
  418.     move.l    d0,d2
  419.     beq.s    scxn10
  420.     movea.l    Broker_,a0
  421.     movea.l    d0,a1
  422.     CALL        AttachCxObj
  423.  
  424.     movea.l    d2,a0
  425.     movea.l    a2,a1
  426.     CALL        SetFilterIX
  427.  
  428. * installation du sender :
  429.  
  430.     moveq    #CX_SEND,d0
  431.     movea.l    cxp_Port(a5),a0
  432.     movea.l    d3,a1
  433.     CALL        CreateCxObj
  434.     tst.l    d0
  435.     beq.s    scxn10
  436.     movea.l    d2,a0
  437.     movea.l    d0,a1
  438.     CALL        AttachCxObj
  439.  
  440. * installation du custom :
  441.  
  442.     cmpi.w    #CX_FAIRY,d3
  443.     bne.s    scxn5
  444.  
  445. * installation du custom :
  446.  
  447.     moveq    #CX_CUSTOM,d0
  448.     lea    cxp_Action(pc),a0
  449.     suba.l    a1,a1
  450.     CALL        CreateCxObj
  451.     tst.l    d0
  452.     beq.s    scxn10
  453.     movea.l    d2,a0
  454.     movea.l    d0,a1
  455.     CALL        AttachCxObj
  456.  
  457. scxn5    moveq    #TRUE,d0
  458.  
  459. scxn10    move.w    (sp)+,d3
  460.  
  461.     rts
  462.  
  463.  
  464. cxp_Action:
  465.  
  466.     movea.l    _BSSBase+_CxBase,a6
  467.     jsr    _LVODisposeCxMsg(a6)
  468.  
  469.     rts
  470.  
  471.  
  472. *****
  473. *    version.
  474. *****
  475.  
  476.     dc.b    '$VER: WSize 1.00 (02.93)'
  477.  
  478.     cnop    0,2
  479.  
  480.  
  481. *****
  482. *    constantes du programme.
  483. *****
  484.  
  485.     SECTION        Constantes,DATA
  486.  
  487. _DataBase:
  488.  
  489.     LAB    cxp_NewBroker:
  490.         dc.b    NB_VERSION,0
  491.         dc.l    _DataBase+cxp_BkName
  492.         dc.l    _DataBase+cxp_BkTitle
  493.         dc.l    _DataBase+cxp_BkDescr
  494.         dc.w    NBU_UNIQUE+NBU_NOTIFY
  495.         dc.w    0
  496.     DAT    cxp_Pri
  497.         dc.b    0
  498.         dc.b    0
  499.     DAT    cxp_Port
  500.         dc.l    0
  501.         dc.w    0
  502.  
  503.  
  504.     LAB    IX
  505.         dc.b    IX_VERSION
  506.         dc.b    IECLASS_RAWMOUSE
  507.         dc.w    0
  508.         dc.w    IECODE_UP_PREFIX
  509.     DAT    cxp_Qual
  510.         dc.w    IEQUALIFIER_LEFTBUTTON+IEQUALIFIER_CONTROL
  511.         dc.w    CXP_QUALMASK
  512.         dc.w    0
  513.  
  514.     LAB    IX1
  515.         dc.b    IX_VERSION
  516.         dc.b    IECLASS_RAWMOUSE
  517.         dc.w    0
  518.         dc.w    IECODE_UP_PREFIX
  519.     DAT    cxp_Qual1
  520.         dc.w    IEQUALIFIER_RBUTTON+IEQUALIFIER_CONTROL
  521.         dc.w    CXP_QUALMASK
  522.         dc.w    0
  523.  
  524.  
  525.     CHAR    cxname
  526.         CXNAME
  527.     CHAR    dosname
  528.         DOSNAME
  529.     CHAR    intname
  530.         INTNAME
  531.     CHAR    iconname
  532.         ICONNAME
  533.     CHAR    layername
  534.         dc.b    'layers.library',0
  535.     CHAR    cxp_HotKey
  536.     CHAR    cxp_BkName
  537.         dc.b    'WSize',0
  538.     CHAR    cxp_BkTitle
  539.         dc.b    'Size or zip window if possible',0
  540.     CHAR    cxp_BkDescr
  541.         dc.b    'Key+Mousebutton=size (zip) window',0
  542.     CHAR    cxp_ToolType
  543.         dc.b    'CX_PRIORITY',0
  544.     CHAR    cxp_ToolType1
  545.         dc.b    'QUALIFIER',0
  546.  
  547.  
  548. *****
  549. *    variables du programme.
  550. *****
  551.  
  552.     SECTION        Variables,BSS
  553.  
  554.     rsreset
  555.  
  556. _CxBase        rs.l    1
  557. _IntuitionBase    rs.l    1
  558. _LayerBase    rs.l    1
  559. _IconBase    rs.l    1
  560. _DOSBase    rs.l    1
  561. cxp_Task    rs.l    1
  562. cxp_DiskObj    rs.l    1
  563. cxp_Window    rs.l    1
  564. cxp_SizeGad    rs.b    gg_SIZEOF
  565. IX_dumm        rs.b    ix_SIZEOF
  566. Old_Pri        rs.b    1
  567. cxp_Zoom    rs.b    1
  568. Data_SizeOf    rs.l    0
  569.  
  570. _BSSBase:    ds.l    Data_SizeOf
  571.  
  572.     END
  573.  
  574.