About
Docs
Files
Support
Index

Essentials
AutoDocs
Library functions
Cooperate
Process mastering
Debug
Own debugging kit
FGE
Smart modeid pick
Loader
Shared lib. loader
Macros
Helper macros
Structs
All the structures
Logs
Library changelogs
Tools
Progs baked inside

API
crt_createargv()A
crt_destroyargv()A
crt_initmethod()A
crt_exitmethod()A
crt_newinstance()A
crt_freeinstance()A
ctl_clipath()A
ctl_devmount()A
ctl_devunmount()A
ctl_diskreqoff()A
ctl_diskreqon()A
ctl_haltidcmp()A
ctl_newshell()A
ctl_rearrangecon()A
ctl_relabel()A
ctl_setclistack()A
ctl_swapbackpen()A
ctl_udirassign()A
ctl_addbartrigger()A
ctl_pokebartrigger()A
ctl_rembartrigger()A
ctl_addconlogo()A
ctl_swapconlogo()A
ctl_remconlogo()A
ctl_addconlogof()A
ctl_remconlogof()A
ctl_setconlogof()A
ctl_openconscreen()A
ctl_closeconscreen()A
ctl_doconswitch()A
ctl_undoconswitch()A
ctl_addidcmphandler()A
ctl_remidcmphandler()A
ctl_findscreensafe()A
ctl_lockscreensafe()A
ctl_unlockscreensafe()A
ctl_addviewctrl()A
ctl_remviewctrl()A
ctl_zoomifycon()A
ctl_setsmparams()A
dev_getdiskcmdset()A
dev_opendiskdev()A
dev_closediskdev()A
dev_getdiskgeo()A
dev_freediskgeo()A
dev_getdiskrdb()A
dev_freediskrdb()A
dmt_mountcb()A
dos_addfdrelay()A
dos_ctrlfdrelay()A
dos_dopacket()A
dos_getpacket()A
dos_qflink()A
dos_qfopen()A
dos_qfwait()A
dos_qfispending()A
dos_qfsetmode()A
dos_qfsetintsig()A
dos_qfsetfctwait()A
dos_qfread()A
dos_qfwrite()A
dos_qfseek()A
dos_qfabort()A
dos_qfclose()A
dos_remfdrelay()A
dos_addlinkpoint()A
dos_dclinkpoint()A
dos_remlinkpoint()A
dos_devbymsgport()A
dos_makedevice()A
dos_checkdevice()A
dos_killdevice()A
dos_getfmfdrelay()A
dos_freefmfdrelay()A
dos_replypacket()A
dos_swapmpfdrelay()A
dos_waitpacket()A
han_binaryifh()A
han_rollifh()A
han_rwifh()A
han_termifh()A
mem_allocbmapthere()A
mem_cooperate()A
mem_dosynctask()A
mem_dosynctasks()A
mem_freepentab()A
mem_getwbstartup()A
mem_grabqarea()A
mem_iloadseg()A
mem_uniloadseg()A
mem_iloadseg2()A
mem_uniloadseg2()A
mem_initemptybmap()A
mem_remapbitmap()A
mem_remapbitmap2()A
mem_signalsafe()A
mem_makebmapfromimg()A
mem_addexhandler()A
mem_remexhandler()A
mem_attachhotvec()A
mem_attachrelhotvec()A
mem_detachhotvec()A
mem_resolvehotvec()A
mem_obtainhotvec()A
mem_obtainrelhotvec()A
mem_openifh()A
mem_closeifh()A
mem_convimgtobmap()A
mem_copyitnimage()A
mem_freeitnimage()A
mem_setaddrjtslot()A
mem_setdatajtslot()A
mem_allocjumptable()A
mem_freejumptable()A
mem_swapjumptable()A
mem_filljumptable()A
mem_importjumptable()A
mem_growpenholder()A
mem_freepenholder()A
mem_loadpicture()A
mem_freepicture()A
mem_alloclfvec()A
mem_freelfvec()A
mem_checklfvec()A
mem_allocvecpooled()A
mem_freevecpooled()A
mem_setvecpooled()A
mem_allocmemregion()A
mem_freememregion()A
mem_attachsniffer()A
mem_detachsniffer()A
mem_allocterm()A
mem_fixterm()A
mem_freeterm()A
mem_maketokenlist()A
mem_freetokenlist()A
mod_codereloc()A
mod_codefree()A
mod_codefind()A
mod_findktpresby()A
mod_getmemlist()A
mod_kicktaglink()A
mod_kicktagunlink()A
mod_ktpresunlink()A
mod_ktprescount()A
mod_addmodule()A
mod_delmodule()A
mod_adddiskmodule()A
mod_deldiskmodule()A
nfo_devvercmp()A
nfo_findgfxentry()A
nfo_findgfxrange()A
nfo_findgfxreso()A
nfo_findgfxsm()A
nfo_fsquery()A
nfo_fssmvalid()A
nfo_getcmcolors()A
nfo_getconioreq()A
nfo_getconunit()A
nfo_getscparams()A
nfo_getdrimap()A
nfo_getviscount()A
nfo_getvisstate()A
nfo_getwinaddr()A
nfo_grepml()A
nfo_idcmptoindex()A
nfo_isblitable()A
nfo_ischildofproc()A
nfo_isdev64bit()A
nfo_isdirectory()A
nfo_isinstack()A
nfo_isonmemlist()A
nfo_isonlistofml()A
nfo_ispdev64bit()A
nfo_issegremote()A
nfo_istask()A
nfo_iswindow()A
nfo_ktm()A
nfo_libvercmp()A
nfo_m68kcputype()A
nfo_modeidcount()A
nfo_scanlist()A
nfo_scanturbo()A
nfo_screencount()A
nfo_stackreport()A
nfo_stackvalid()A
nfo_typeofgfxmem()A
nfo_waitback()A
nfo_whichchipset()A
nfo_getargsource()A
nfo_freeargsource()A
ctl_clirun()P
ctl_makedir()P
ctl_getsmparams()P
mem_addrfrombase()P
mem_findinfile()P
mem_findinfileq()P
mem_lzwcompress()P
mem_lzwdecompress()P
mem_lzwfree()P
mem_scanfile()P
mem_scanlbl()P
mem_allocarray()P
mem_accessarray()P
mem_freearray()P
mem_alloccluster()P
mem_freecluster()P
mem_getmemcluster()P
mem_freememcluster()P
mem_copysmlcb()P
mem_freesmlcb()P
mem_readsrcimage()P
mem_freesrcimage()P
nfo_getsystime()P
nfo_scanml()P
txt_debugprintf()P
txt_strboth()P
txt_strpat()P
cnv_ALtoULONG()I
cnv_AtoULONG()I
cnv_ULONGtoA()I
cnv_ULONGtoBITS()I
ctl_relocdrimap()I
dev_sizeingigs()I
dos_bcopydevice()I
mem_addrfromlvo()I
mem_csumchs32()I
mem_csumeor32()I
mem_csumint32()I
mem_fnv128hash()I
mem_fnv64hash()I
mem_pjw64hash()I
nfo_isconsole()I
nfo_ismode15khz()I
nfo_isprime()I
nfo_nearestprime()I
nfo_numdivisors()I
txt_bstrncat()I
txt_bstrnpcat()I
txt_strnvacat()I
txt_datdat()I
txt_fixquotes()I
txt_fnv128hash()I
txt_fnv64hash()I
txt_iniparse()I
txt_memcmp()I
txt_memfill()I
txt_needslash()I
txt_noansi()I
txt_nocomment()I
txt_parseline()I
txt_pjw64hash()I
txt_psnprintf()I
txt_quickhash()I
txt_skipcc()I
txt_strchr()I
txt_strcmp()I
txt_strcspn()I
txt_stripansi()I
txt_strlen()I
txt_strncat()I
txt_strnpcat()I
txt_strspn()I
txt_strstr()I
txt_strtok()I
txt_tokenify()I
txt_vcbpsnprintf()I
txt_vpsnprintf()I



M
E
M
_
A
T
T
A
C
H
S
N
I
F
F
E
R
(
)

SOURCE: qdev_autodocs.txt 1.163 (12/09/2014) English

                                 AMIGA - MEM_#?
 ----------------------------------------------------------------------------

   NAME

      mem_attachsniffer() - Installs a sniffer on a given msg.
                            port.



   SYNOPSIS

      ptr = mem_attachsniffer(mp, usercode, userdata);

      void *mem_attachsniffer(
                            struct MsgPort *, void *, void *);



   FUNCTION

      This function makes it possible to spy on msg. port I/O
      of virtually any task that is running in the system.



   INPUTS

      mp       - PA_SIGNAL based message port that references
                 a task that is running. Orphaned/incompatible
                 msg. ports will be rejected!

      usercode - Sniffer function as created with magic macro
                 QDEV_MEM_SNIFFUNC().

      userdata - User supplied data. You can pass the 'mp' ptr
                 here to have quick access in sniffer func.



   RETURNS

      Function returns 'ient' handle if all went fine or NULL
      if 'mp' is invalid or there is not enough memory avail.



   BASES

      SysBase



   NOTES

      Yes, this code relies on private task exception mechanism
      so you must treat them pretty much like interrupts!

      Yes, it is possible to attach sniffer to message ports of
      different than your task.

      Yes, unlike 'mem_addexhandler()' which is restricted to
      only one handler per signal this routine allows multiple
      handlers on single mp/signal.

      No, it does not interfere with  'mem_addexhandler()'  and
      'mem_remexhandler()'. All will work as if there were no
      sniffers installed.

      Note that sniffers are always called in LIFO order. Every
      newly added sniffer is the first to call! As to exception
      routine, it will be called last. This allows to see what
      arrived on port before exception handler processes it.

      Remark! Sniffers (and especially long sniffer chains) are
      slower than exceptions alone!



   SEE ALSO

      mem_detachsniffer(), mem_addexhandler(),
      mem_remexhandler() 



   EXAMPLE

      ...

      #define ___QDEV_DEBUGINFO

      QDEV_MEM_SNIFFUNC
      (
        mysniffer,

        QDEV_MEM_SNIFEXEC();
        QDEV_MEM_SNIFUSER(struct MsgPort *, mp);
        struct Message *mn;

        QDEV_HLP_ITERATE(&mp->mp_MsgList, struct Message *, mn)
        {
          /*
           * This will be visible on remote terminal connected
           * via serial port or if redirector such as 'sashimi'
           * was started then in other shell.
          */
          QDEVDEBUG_N("mn_ReplyPort\nmn_Length\n\n\n",
                              mn->mn_ReplyPort, mn->mn_Length);
        }

        /*
         * Let the task, process what is in the queue. Without
         * this statement task may never notice that something
         * was sent to its message port.
        */
        QDEV_MEM_SNIFPASS();
      );

      ...

      void *spy;
      struct MsgPort *mp = <pointer>;

      if ((spy = mem_attachsniffer(mp, mysniffer, mp)))
      {
        ...
      }

      ...



   BUGS

      None known.



 ----------------------------------------------------------------------------
    


No more fear cus pure HTML is here!
Copyright (C) 2013-2014 by Burnt Chip Dominators