home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d904 / cxpak.lha / CxPak / Source / AutoClick.s next >
Text File  |  1993-08-26  |  8KB  |  511 lines

  1. *****
  2. *
  3. *    $VER : AutoClick 1.00, Pierre-Louis MANGEARD, Feb. 1993
  4. *
  5. *****
  6.  
  7.     OPT    l-,c+,d+,line    -,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    _DataBase,a4
  15.  
  16.     suba.l    a1,a1
  17.     EXEC        FindTask    find us
  18.     movea.l    d0,a2
  19.     move.l    d0,cxp_Task(a4)        addresse de la task
  20.     move.b    LN_PRI(a2),Old_Pri(a4)    priorite
  21.     lea    pr_MsgPort(a2),a0    port du process
  22.     move.l    a0,cxp_Port(a4)
  23.  
  24.     tst.l    pr_CLI(a2)
  25.     bne.s    end_startup
  26.  
  27. fromWorkbench
  28.  
  29. ;    movea.l    cxp_Port(a4),a0        deja en a0
  30.     CALL        WaitPort    wait for a message
  31.     movea.l    cxp_Port(a4),a0
  32.     CALL        GetMsg        then get it
  33.     move.l    d0,RetMsg_    save it for later reply
  34.  
  35. end_startup
  36.  
  37.     bsr.s    _main            call our program
  38.  
  39.     tst.l    RetMsg_
  40.     beq.s    exitToDOS        if I was a CLI
  41.  
  42.     EXEC        Forbid
  43.     movea.l    RetMsg_,a1
  44.     CALL        ReplyMsg
  45.  
  46. exitToDOS
  47.  
  48.     rts
  49.  
  50. _main
  51.  
  52. *****
  53. *    debut effectif du programme.
  54. *****
  55.  
  56.     lea    cxname(a4),a1
  57.     CALL        OldOpenLibrary
  58.     move.l    d0,_CxBase(a4)
  59.     beq    cxp55
  60.  
  61.     lea    intname(a4),a1
  62.     CALL        OldOpenLibrary
  63.     move.l    d0,_IntuitionBase(a4)
  64.     beq    cxp55
  65.  
  66.     lea    layername(a4),a1
  67.     CALL        OldOpenLibrary
  68.     move.l    d0,_LayerBase(a4)
  69.     beq    cxp55
  70.  
  71.     lea    iconname(a4),a1
  72.     CALL        OldOpenLibrary
  73.     move.l    d0,_IconBase(a4)
  74.     beq    cxp55
  75.  
  76.     lea    dosname(a4),a1
  77.     CALL        OldOpenLibrary
  78.     move.l    d0,_DOSBase(a4)
  79.     beq    cxp55
  80.  
  81.  
  82.     tst.l    RetMsg_
  83.     beq.s    cxp05
  84.  
  85. * si on vient du workbench, recuperer ToolTypeArray :
  86.  
  87.     movea.l    RetMsg_,a2
  88.     movea.l    sm_ArgList(a2),a2    ArgList sauvegarde provisoire en a2
  89.     beq.s    cxp05
  90.     move.l    wa_Lock(a2),d1
  91.     DOS        CurrentDir
  92.  
  93.     movea.l    wa_Name(a2),a0        name en a0
  94.     ICON        GetDiskObject
  95.     move.l    d0,cxp_DiskObj(a4)
  96.     beq.s    cxp05
  97.     movea.l    d0,a2
  98.     movea.l    do_ToolTypes(a2),a2
  99.  
  100.  
  101. * recupere PRIORITY en tooltype :
  102.  
  103.     movea.l    a2,a0
  104.     lea    cxp_ToolType(a4),a1
  105.     CALL        FindToolType
  106.     tst.l    d0
  107.     beq.s    cxp05
  108.  
  109.     movea.l    d0,a0
  110.     clr.w    d2
  111.  
  112. * conversion ascii -> entier du tooltype CX_PRIORITY :
  113.  
  114.     cmpi.b    #'-',(a0)
  115.     bne.s    cxp06
  116.  
  117.     moveq    #1,d2
  118.     addq.l    #BYTE,a0
  119.  
  120. cxp06    moveq    #0,d0
  121.  
  122. cxp07    moveq    #0,d1
  123.     move.b    (a0)+,d1
  124.     beq.s    cxp09
  125.     subi.b    #'0',d1
  126.     add.l    d0,d0
  127.     add.l    d0,d1
  128.     lsl.l    #2,d0
  129.     add.l    d1,d0
  130.     bra.s    cxp07
  131.  
  132. cxp09    tst.w    d2
  133.     beq.s    cxp08
  134.  
  135.     neg.b    d0
  136.  
  137. cxp08    move.b    d0,cxp_Pri(a4)
  138.  
  139.     movea.l    cxp_DiskObj(a4),a0
  140.     CALL        FreeDiskObject
  141.  
  142.  
  143. * definition du signal :
  144.  
  145. cxp05    clr.l    d0
  146.     movea.l    cxp_Port(a4),a1
  147.     move.b    MP_SIGBIT(a1),d0
  148.     moveq    #1,SigFlg_
  149.     lsl.l    d0,SigFlg_
  150.     ori.l    #SIGBREAKF_CTRL_C,SigFlg_
  151.  
  152. * installation du broker :
  153.  
  154.     lea    cxp_NewBroker(a4),a0
  155.     moveq    #0,d0
  156.     CX        CxBroker
  157.     move.l    d0,Broker_
  158.     beq    cxp55                si autoclick deja la
  159.  
  160. * installation des filters et senders (_CxBase deja en a6) :
  161.  
  162.     lea    cxp_HotKey(a4),a0        rawkey
  163.     lea    IX(a4),a1
  164.     bsr.s    Set_CxNet
  165.     beq    cxp55
  166.  
  167.     lea    cxp_HotKey(a4),a0        right button
  168.     lea    IX1(a4),a1
  169.     bsr.s    Set_CxNet
  170.     beq    cxp55
  171.  
  172.     lea    cxp_HotKey(a4),a0        mid button
  173.     lea    IX2(a4),a1
  174.     bsr.s    Set_CxNet
  175.     beq    cxp55
  176.  
  177.     lea    cxp_DiskIn(a4),a0        disk in
  178.     suba.l    a1,a1
  179.     bsr.s    Set_CxNet
  180.     beq    cxp55
  181.  
  182.     lea    cxp_DiskRem(a4),a0        disk rem
  183.     suba.l    a1,a1
  184.     bsr.s    Set_CxNet
  185.     beq    cxp55
  186.  
  187.     bra.s    cxp20
  188.  
  189.  
  190. Set_CxNet:
  191.  
  192. * success = Set_CxNet(ie string, IX)
  193. *  d0 (CCR)        a0    a1
  194. * (_CxBase deja en a6)
  195.  
  196.     movea.l    a1,a2
  197.  
  198.     moveq    #CX_FILTER,d0            mid button
  199. ;                        ie string deja en a0
  200.     suba.l    a1,a1
  201.     CALL        CreateCxObj
  202.     move.l    d0,d2
  203.     beq.s    scxn20
  204.     movea.l    Broker_,a0
  205.     movea.l    d0,a1
  206.     CALL        AttachCxObj
  207.  
  208.     cmpa.w    #NULL,a2
  209.     beq.s    scxn10
  210.  
  211.     movea.l    d2,a0
  212.     movea.l    a2,a1                IX en a1
  213.     CALL        SetFilterIX
  214.  
  215. scxn10    movea.l    cxp_Port(a4),a0
  216.     moveq    #CX_SEND,d0
  217.     movea.l    #CX_MAGIC,a1
  218.     CALL        CreateCxObj
  219.     tst.l    d0
  220.     beq.s    scxn20
  221.     movea.l    d2,a0
  222.     movea.l    d0,a1
  223.     CALL        AttachCxObj
  224.  
  225.     moveq    #TRUE,d0            operation reussie
  226.  
  227. scxn20    rts
  228.  
  229.  
  230. * la tache a la priorite 21 pour prendre la main sur l'input.device :
  231.  
  232. cxp20    movea.l    cxp_Task(a4),a1
  233.     moveq    #CXP_PRIORITY,d0
  234.     EXEC    SetTaskPri
  235.  
  236. * activation du broker :
  237.  
  238.     moveq    #TRUE,d0
  239.     bsr    SwitchBroker
  240.  
  241.  
  242. * recuperation du message :
  243.  
  244. cxp1    move.l    SigFlg_,d0
  245.     EXEC    Wait
  246.  
  247.     cmpi.l    #SIGBREAKF_CTRL_C,d0
  248.     bne.s    cxp3
  249.  
  250.     moveq    #CXCMD_KILL,MsgId_
  251.  
  252. cxp3    movea.l    cxp_Port(a4),a0
  253.     CALL    GetMsg
  254.     tst.l    d0
  255.     beq    cxp40
  256.     movea.l    d0,a2
  257.  
  258. * type et id du message :
  259.  
  260.     movea.l    a2,a0
  261.     CX        CxMsgType
  262.     move.w    d0,MsgType_
  263.  
  264.     movea.l    a2,a0
  265.     CALL        CxMsgID
  266.     move.w    d0,MsgId_
  267.  
  268.     movea.l    a2,a1
  269.     EXEC    ReplyMsg
  270.  
  271. * action selon le type :
  272.  
  273.     cmpi.w    #CXM_COMMAND,MsgType_
  274.     beq.s    cxp40
  275.  
  276.  
  277. * ACTIVATION DE LA FENETRE :
  278.  
  279. * IntuitionBase en a3
  280. * screen en a2
  281.  
  282.     moveq    #0,d0
  283.     INT        LockIBase
  284.     move.l    d0,-(sp)
  285.  
  286.     movea.l    _IntuitionBase(a4),a0
  287.     movea.l    a0,a3
  288.     movea.l    ib_FirstScreen(a0),a2
  289. cxp5    move.w    ib_MouseY(a0),d0        coord Y de la souris
  290.     cmp.w    sc_TopEdge(a2),d0        - haut de l'ecran
  291.     bge.s    cxp10
  292.     movea.l    sc_NextScreen(a2),a2
  293.     cmpa.w    #0,a2
  294.     bne.s    cxp5
  295.  
  296. cxp10    movea.l    (sp)+,a0
  297.     CALL        UnlockIBase
  298.  
  299.     movea.l    a2,a0
  300.     adda.w    #sc_LayerInfo,a0
  301.     move.l    a0,-(sp)
  302.     LAYER        LockLayerInfo
  303.  
  304.     movea.l    (sp),a0
  305.     move.w    sc_MouseX(a2),d0
  306.     move.w    sc_MouseY(a2),d1
  307.     CALL        WhichLayer
  308.     move.l    d0,d2                sauvegarde provisoire
  309.  
  310.     movea.l    (sp)+,a0
  311.     CALL        UnlockLayerInfo
  312.  
  313.     tst.l    d2
  314.     beq    cxp1                si pas de layer, rien
  315.  
  316.     movea.l    d2,a0
  317.     movea.l    lr_Window(a0),a0        window du layer
  318.     cmpa.l    ib_ActiveWindow(a3),a0        est-ce la fenetre deja active ?
  319.     beq    cxp1                si oui rien
  320.     INT        ActivateWindow
  321.  
  322.     bra    cxp1
  323.  
  324.  
  325. * on a recu un msg COMMAND :
  326.  
  327. cxp40    cmpi.w    #CXCMD_KILL,MsgId_        kill autoclick
  328.     beq.s    cxp60
  329.  
  330.     cmpi.w    #CXCMD_UNIQUE,MsgId_        toggle autoclick
  331.     beq.s    cxp60
  332.  
  333.     cmpi.w    #CXCMD_DISABLE,MsgId_        dormant autoclick
  334.     bne.s    cxp43
  335.  
  336.     moveq    #FALSE,d0
  337.     bsr.s    SwitchBroker
  338.  
  339.     bra    cxp1
  340.  
  341. cxp43    cmpi.w    #CXCMD_ENABLE,MsgId_        wake up autoclick
  342.     bne    cxp1
  343.  
  344.     moveq    #TRUE,d0
  345.     bsr.s    SwitchBroker
  346.  
  347.     bra    cxp1
  348.  
  349.  
  350. cxp55    moveq    #RETURN_ERROR,d2
  351.  
  352.     bra.s    cxp62
  353.  
  354.  
  355. * Exit :
  356.  
  357. cxp60    moveq    #RETURN_OK,d2
  358.  
  359. cxp62    tst.l    Broker_
  360.     beq.s    cxp70
  361.  
  362. cxp65    movea.l    Broker_,a0
  363.     CX        DeleteCxObjAll
  364.  
  365. cxp70    movea.l    _DOSBase(a4),a1
  366.     EXEC    CloseLibrary
  367.  
  368. cxp94    movea.l    _IconBase(a4),a1
  369.     CALL    CloseLibrary
  370.  
  371. cxp93    movea.l    _LayerBase(a4),a1
  372.     CALL    CloseLibrary
  373.  
  374. cxp92    movea.l    _IntuitionBase(a4),a1
  375.     CALL    CloseLibrary
  376.  
  377. cxp91    movea.l    _CxBase(a4),a1
  378.     CALL    CloseLibrary
  379.  
  380. * restore la priorite du shell d'origine le cas echeant :
  381.  
  382. cxp90    clr.l    d0
  383.     movea.l    cxp_Task(a4),a1
  384.     move.b    Old_Pri(a4),d0
  385.     CALL    SetTaskPri
  386.  
  387.     move.l    d2,d0
  388.  
  389.     rts
  390.  
  391.  
  392. *****
  393. *    subroutines.
  394. *****
  395.  
  396. SwitchBroker:
  397.  
  398. * void SwitchBroker(BOOL)
  399. *             d0 = TRUE or FALSE
  400.  
  401.     movea.l    Broker_,a0
  402.     CX        ActivateCxObj
  403.  
  404.     rts
  405.  
  406.  
  407. *****
  408. *    version.
  409. *****
  410.  
  411.     dc.b    '$VER: AutoClick 1.00 (02.93)'
  412.  
  413.     cnop    0,2
  414.  
  415.  
  416. *****
  417. *    variables et constantes du programme.
  418. *****
  419.  
  420.     SECTION        Data,DATA
  421.  
  422. _DataBase:
  423.  
  424.     DAT    _CxBase
  425.         dc.l    0
  426.     DAT    _IntuitionBase
  427.         dc.l    0
  428.     DAT    _LayerBase
  429.         dc.l    0
  430.     DAT    _IconBase
  431.         dc.l    0
  432.     DAT    _DOSBase
  433.         dc.l    0
  434.     DAT    cxp_Task
  435.         dc.l    0
  436.     DAT    cxp_DiskObj
  437.         dc.l    0
  438.  
  439.  
  440.     LAB    cxp_NewBroker:
  441.         dc.b    NB_VERSION,0
  442.         dc.l    _DataBase+cxp_BkName
  443.         dc.l    _DataBase+cxp_BkTitle
  444.         dc.l    _DataBase+cxp_BkDescr
  445.         dc.w    NBU_UNIQUE+NBU_NOTIFY
  446.         dc.w    0
  447.     DAT    cxp_Pri
  448.         dc.b    0
  449.         dc.b    0
  450.     DAT    cxp_Port
  451.         dc.l    0
  452.         dc.w    0
  453.  
  454.  
  455.     LAB    IX
  456.         dc.b    IX_VERSION
  457.         dc.b    IECLASS_RAWKEY
  458.         dc.w    0
  459.         dc.w    IECODE_UP_PREFIX
  460.         dc.w    0
  461.         dc.w    0
  462.         dc.w    0
  463.  
  464.     LAB    IX1
  465.         dc.b    IX_VERSION
  466.         dc.b    IECLASS_RAWMOUSE
  467.         dc.w    0
  468.         dc.w    IECODE_UP_PREFIX
  469.         dc.w    IEQUALIFIER_RBUTTON
  470.         dc.w    IEQUALIFIER_RBUTTON
  471.         dc.w    0
  472.  
  473.     LAB    IX2
  474.         dc.b    IX_VERSION
  475.         dc.b    IECLASS_RAWMOUSE
  476.         dc.w    0
  477.         dc.w    IECODE_UP_PREFIX
  478.         dc.w    IEQUALIFIER_MIDBUTTON
  479.         dc.w    IEQUALIFIER_MIDBUTTON
  480.         dc.w    0
  481.  
  482.     DAT    Old_Pri
  483.         dc.b    0
  484.  
  485.     CHAR    cxname
  486.         CXNAME
  487.     CHAR    intname
  488.         INTNAME
  489.     CHAR    iconname
  490.         ICONNAME
  491.     CHAR    dosname
  492.         DOSNAME
  493.     CHAR    layername
  494.         dc.b    'layers.library',0
  495.     CHAR    cxp_BkName
  496.         dc.b    'AutoClick',0
  497.     CHAR    cxp_BkTitle
  498.         dc.b    'Window Activator',0
  499.     CHAR    cxp_BkDescr
  500.         dc.b    'only after an input event',0
  501.     CHAR    cxp_HotKey
  502.     CHAR    cxp_DiskIn
  503.         dc.b    'diskinserted',0
  504.     CHAR    cxp_DiskRem
  505.         dc.b    'diskremoved',0
  506.     CHAR    cxp_ToolType
  507.         dc.b    'CX_PRIORITY',0
  508.  
  509.     END
  510.  
  511.