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

MACROS
LP2IEEE()A
QBASEASSIGN()A
QBASEASSIGN2()A
QBASEDECL()A
QBASEDECL2()A
QBASEJUMPTAB()A
QBASELOCAL()A
QBASEPOINTER()A
QBASERESOLVE()A
QBASESLOTS()A
QDEV_HLP_ASMDIVU()A
QDEV_HLP_ASMMULU()A
QDEV_HLP_DELTAITER()A
QDEV_HLP_DELTASCAN()A
QDEV_HLP_DFUNC()A
QDEV_HLP_DIVUQUAD()A
QDEV_HLP_DSTOTV()A
QDEV_HLP_GETREG()A
QDEV_HLP_ISLISTEMPTY()A
QDEV_HLP_ITERATE()A
QDEV_HLP_MULUQUAD()A
QDEV_HLP_NOINTSEC()A
QDEV_HLP_NOSWITCH()A
QDEV_HLP_PROCDECL()A
QDEV_HLP_PROCEXIT()A
QDEV_HLP_REMOTE()A
QDEV_HLP_RESGLOB()A
QDEV_HLP_SETREG()A
QDEV_HLP_TASKDECL()A
QDEV_HLP_TVTODS()A
REGARG()A
REGVAR()A
__LOADA4()A
__SAVEA4()A
QDEVDEBUG()P
QDEVDEBUGIO()P
MFADD()I
MFCGE()I
MFCLE()I
MFCMP()I
MFDIV()I
MFFIX()I
MFFLT()I
MFMUL()I
MFSUB()I
MFVALUE()I
QDEV_HLP_ABS()I
QDEV_HLP_ADDTV()I
QDEV_HLP_ASMALIAS()I
QDEV_HLP_ASMENTRY()I
QDEV_HLP_BADDR()I
QDEV_HLP_BYTESPERROW()I
QDEV_HLP_EQUALIZEUC()I
QDEV_HLP_EQUALIZELC()I
QDEV_HLP_E_DIVULONG10()I
QDEV_HLP_FFPTOIEEE()I
QDEV_HLP_FLIP()I
QDEV_HLP_FNV32CSUM()I
QDEV_HLP_FNV32HASH()I
QDEV_HLP_IEEETOFFP()I
QDEV_HLP_LCOPYMEM()I
QDEV_HLP_LSHIFT64()I
QDEV_HLP_MAX()I
QDEV_HLP_MIN()I
QDEV_HLP_MKBADDR()I
QDEV_HLP_MKSTR()I
QDEV_HLP_MULU32X32()I
QDEV_HLP_N_DIVULONG10()I
QDEV_HLP_N_MULUXXX10()I
QDEV_HLP_NEG()I
QDEV_HLP_QUICKFILL()I
QDEV_HLP_SWAPQUAD()I
QDEV_HLP_POPCOUNT()I
QDEV_HLP_RASSIZE()I
QDEV_HLP_ROUNDPOW2()I
QDEV_HLP_RSHIFT64()I
QDEV_HLP_SUBTV()I
QDEV_HLP_SWAPLONG()I
QDEV_HLP_SWAPQUAD()I
QDEV_HLP_SWAPWORD()I



Q
D
E
V
_
H
L
P
_
I
T
E
R
A
T
E
(
)

SOURCE: qdev_macros.txt 1.16 (12/09/2014) English

                                 AMIGA - PUBLIC
 ----------------------------------------------------------------------------

   NAME

      QDEV_HLP_ITERATE() - Allows to walkthrough Amiga, doubly
                           linked list.



   SYNOPSIS

      QDEV_HLP_ITERATE(list, type, node)

      QDEV_HLP_ITERATE(struct List *, <type>, <node>)



   FUNCTION

      This macro allows to traverse the Amiga, doubly linked
      list in a manner allowing to read data per node.



   INPUTS

      list - Address of the list(struct List, struct MinList).

      type - Structure that wraps struct Node/struct MinNode
             that then defines its primary members.

      node - Address of the structure as declared in the code.



   RETURNS

      No output.



   BASES

      None.



   NOTES

      Please note that this macro is unsuitable for list chain
      manipulation! Calling 'Remove()' is strictly discouraged
      as this may cause unpredictible behaviour!

      All OS lists can be traversed with this macro, but some
      sort of arbitration must be provided. This is typically
      to be Forbid()/Permit() pair.



   SEE ALSO

      QDEV_HLP_ISLISTEMPTY(), QDEV_HLP_DELTASCAN()
      QDEV_HLP_DELTAITER()



   EXAMPLE

      #include <proto/exec.h>
      #include <exec/execbase.h>
      #include <proto/alib.h>
      #include <qdev.h>

      #define MINCHUNKS  128

      struct myentry
      {
        struct Node me_node;
        ULONG       me_hash;
      };

      void iteratelibs(void)
      {
        struct myentry *me;
        struct Library *lib;
        struct List lh;
        void *cluster;

        if ((cluster = mem_alloccluster(
                            sizeof(struct myentry), MINCHUNKS,
                                 MEMF_PUBLIC | MEMF_LARGEST)))
        {
          NewList(&lh);

          /*
           * Enter forbidden state and collect entries.
          */
          QDEV_HLP_NOSWITCH
          (
            QDEV_HLP_ITERATE(
                     &SysBase->LibList, struct Library *, lib)
            {
              if ((me = mem_getmemcluster(cluster)))
              {
                me->me_hash =
                   QDEV_HLP_FNV32IHASH(lib->lib_Node.ln_Name);

                AddTail(&lh, (struct Node *)me);
              }
              else
              {
                break;
              }
            }
          );

          /*
           * Now dump the hashes safely.
          */
          QDEV_HLP_ITERATE(&lh, struct myentry *, me)
          {
            FPrintf(
                Output(), "me_hash = 0x%08lx\n", me->me_hash);
          }

          mem_freecluster(cluster);
        }
      }     



   BUGS

      None known.



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


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