1 #ifndef LIBRARIES_QUERY_H
    2 #define LIBRARIES_QUERY_H
    3 
    4 #ifndef EXEC_TYPES_H
    5 #include <exec/types.h>
    6 #endif
    7 
    8 #ifndef EXEC_DEVICES_H
    9 #include <exec/devices.h>
   10 #endif
   11 
   12 #ifndef UTILITY_TAGITEM_H
   13 #include <utility/tagitem.h>
   14 #endif
   15 
   16 
   17 struct QueryPathEntry
   18 {
   19         char    *Path;
   20         char    *Pattern;
   21         ULONG   Flags;
   22 };
   23 
   24 #define QUERYPATHFLAGF_ALL                      0x1
   25 #define QUERYPATHFLAGF_DONTFOLLOWSOFTLINKS      0x2
   26 
   27 struct QueryPCIMatch
   28 {
   29         ULONG   Vendor;
   30         ULONG   VendorMask;
   31         ULONG   Device;
   32         ULONG   DeviceMask;
   33         ULONG   Class;
   34         ULONG   ClassMask;
   35         ULONG   SubClass;
   36         ULONG   SubClassMask;
   37         ULONG   ProgInfo;
   38         ULONG   ProgInfoMask;
   39 };
   40 
   41 struct QueryDosTypeMatch
   42 {
   43         ULONG   DosType;
   44         ULONG   Mask;
   45 };
   46 
   47 struct QueryExtDosTypeMatch
   48 {
   49         ULONG   DosType;
   50         ULONG   Mask;
   51         STRPTR  Name;
   52 };
   53 
   54 
   55 struct QueryUnitID
   56 {
   57         struct Unit     *Unit;
   58         ULONG           ID;
   59 };
   60 
   61 /*
   62  * QueryGetAttr(struct QueryInfo*,ULONG Attr);
   63  */
   64 
   65 #define QUERYINFOATTR_Dummy             (TAG_USER +0x01001000)
   66 
   67 /*
   68  * return the name from the object which is needed to reference it
   69  * Data: (char *)
   70  */
   71 #define QUERYINFOATTR_NAME              (QUERYINFOATTR_Dummy+0)
   72 /*
   73  * return the id string from the object, including "$VER: "
   74  * Data: (char *)
   75  */
   76 #define QUERYINFOATTR_IDSTRING          (QUERYINFOATTR_Dummy+1)
   77 /*
   78  * return a description string about the object usage
   79  * Data: (char *)
   80  */
   81 #define QUERYINFOATTR_DESCRIPTION       (QUERYINFOATTR_Dummy+2)
   82 /*
   83  * return a copyright string from the object
   84  * Data: (char *)
   85  */
   86 #define QUERYINFOATTR_COPYRIGHT         (QUERYINFOATTR_Dummy+3)
   87 /*
   88  * return an author string from the object
   89  * Data: (char *)
   90  */
   91 #define QUERYINFOATTR_AUTHOR            (QUERYINFOATTR_Dummy+4)
   92 /*
   93  * return a date string from the object
   94  * Data: (char *)
   95  */
   96 #define QUERYINFOATTR_DATE              (QUERYINFOATTR_Dummy+5)
   97 /*
   98  * obsolete, don't reuse
   99  * Data: -
  100  */
  101 #define QUERYINFOATTR_OBSOLETE1         (QUERYINFOATTR_Dummy+6)
  102 /*
  103  * return the version from the object
  104  * Data: (ULONG)
  105  */
  106 #define QUERYINFOATTR_VERSION           (QUERYINFOATTR_Dummy+7)
  107 /*
  108  * return the revision from the object
  109  * Data: (ULONG)
  110  */
  111 #define QUERYINFOATTR_REVISION          (QUERYINFOATTR_Dummy+8)
  112 /*
  113  * return the release tag string from the object
  114  * Something like "release","alpha","beta" and so on
  115  * Data: (char *)
  116  */
  117 #define QUERYINFOATTR_RELEASETAG        (QUERYINFOATTR_Dummy+9)
  118 
  119 #define QUERYINFOATTR_CODETYPE          (QUERYINFOATTR_Dummy+10)
  120 /*
  121  * give me a filename if it's an external object
  122  */
  123 #define QUERYINFOATTR_FILENAME          (QUERYINFOATTR_Dummy+11)
  124 /*
  125  * SegList, usually only valid during the lifetime of the QueryInfo (V51)
  126  * Only exception would be internal filesystems
  127  * Data: BPTR
  128  */
  129 #define QUERYINFOATTR_SEGLIST           (QUERYINFOATTR_Dummy+12)
  130 
  131 /*
  132  * QUERYTYPE_#?
  133  * This type defines where the object was found.
  134  * It makes no sense to return this type in a QueryTagList or
  135  * through GetQueryAttr(), as it's the internal type of an
  136  * object.
  137  */
  138 #define QUERYINFOATTR_TYPE              (QUERYINFOATTR_Dummy+13)
  139 /*
  140  * QUERYSUBTYPE_#?
  141  * This type defines the real object type
  142  */
  143 #define QUERYINFOATTR_SUBTYPE           (QUERYINFOATTR_Dummy+14)
  144 /*
  145  * QUERYCLASS_#?
  146  */
  147 #define QUERYINFOATTR_CLASS             (QUERYINFOATTR_Dummy+15)
  148 /*
  149  * QUERYSUBCLASS_#?
  150  */
  151 #define QUERYINFOATTR_SUBCLASS          (QUERYINFOATTR_Dummy+16)
  152 /*
  153  * Priority
  154  * Data: LONG
  155  */
  156 #define QUERYINFOATTR_PRI               (QUERYINFOATTR_Dummy+17)
  157 
  158 /*
  159  * Ptr to
  160  * ULONG VENDORID, VENDORIDMASK,
  161  * ULONG DEVICEID, DEVICEIDMASK,
  162  * ULONG    CLASS, CLASSMASK,
  163  * ULONG SUBCLASS, SUBCLASSMASK,
  164  * ULONG PROGINFO, PROGINFOMASK
  165  * ends with all entries as 0, so you can specify several entries
  166  */
  167 #define QUERYINFOATTR_PCIMATCH          (QUERYINFOATTR_Dummy+20)
  168 /*
  169  * Array with DosTypes+Mask the filesystems supports
  170  * Data = struct QueryDosTypeMatch*
  171  * must end with a 0
  172  */
  173 #define QUERYINFOATTR_FS_DOSTYPEMATCH   (QUERYINFOATTR_Dummy+30)
  174 /*
  175  * Filesystem supports a Startup Argument String(ReadArgs pattern)
  176  * Data: char *RDArgs Pattern
  177  */
  178 #define QUERYINFOATTR_FS_STARTUP        (QUERYINFOATTR_Dummy+31)
  179 /*
  180  * Filesystem supports a Control Argument String(ReadArgs pattern)
  181  * Data: char *RDArgs Pattern
  182  */
  183 #define QUERYINFOATTR_FS_CONTROL        (QUERYINFOATTR_Dummy+32)
  184 /*
  185  * Filesystem supports FSContext
  186  * Data: Boolean
  187  */
  188 #define QUERYINFOATTR_FS_FSCONTEXT      (QUERYINFOATTR_Dummy+33)
  189 /*
  190  * Filesystem's StackSize
  191  * Data: ULONG
  192  */
  193 #define QUERYINFOATTR_FS_STACKSIZE      (QUERYINFOATTR_Dummy+34)
  194 /*
  195  * Filesystem's Globalvec, only valid for an internal filesysentry
  196  * Data: ULONG
  197  */
  198 #define QUERYINFOATTR_FS_GLOBALVEC      (QUERYINFOATTR_Dummy+35)
  199 /*
  200  * Filesystem's SegList
  201  * Data: void *
  202  */
  203 #define QUERYINFOATTR_FS_SEGLIST        (QUERYINFOATTR_Dummy+36)
  204 /*
  205  * Array with DosTypes+Mask+Name the filesystems supports
  206  * Data = struct QueryExtDosTypeMatch*
  207  * must end with a 0
  208  */
  209 #define QUERYINFOATTR_FS_EXTDOSTYPEMATCH (QUERYINFOATTR_Dummy+37)
  210 
  211 
  212 /*
  213  * Device max allowed Units
  214  * Data: ULONG
  215  */
  216 #define QUERYINFOATTR_DEVICE_UNITS      (QUERYINFOATTR_Dummy+40)
  217 /*
  218  * Device max allowed Luns
  219  * Data: ULONG
  220  */
  221 #define QUERYINFOATTR_DEVICE_LUNS       (QUERYINFOATTR_Dummy+41)
  222 /*
  223  * Device supports New Format UnitIDs(only needed for scsi devices which support wide)
  224  * Data: ULONG
  225  */
  226 #define QUERYINFOATTR_DEVICE_NEWFORMAT  (QUERYINFOATTR_Dummy+42)
  227 /*
  228  * Device supports a RdArgs String through the flags parameter
  229  * Data: (char*) ReadArgs mask
  230  */
  231 #define QUERYINFOATTR_DEVICE_FLAGS_TEMPLATE     (QUERYINFOATTR_Dummy+43)
  232 /*
  233  * Device's Mask parameter
  234  * Data: ULONG
  235  */
  236 #define QUERYINFOATTR_DEVICE_MASK     (QUERYINFOATTR_Dummy+44)
  237 /*
  238  * Device's MaxTransfer parameter
  239  * Data: ULONG
  240  */
  241 #define QUERYINFOATTR_DEVICE_MAXTRANSFER   (QUERYINFOATTR_Dummy+45)
  242 /*
  243  * Device's Unit's OpenDevice ID in appropriate format
  244  * Data: struct QueryUnitID*
  245  */
  246 #define QUERYINFOATTR_DEVICE_UNIT_ID     (QUERYINFOATTR_Dummy+46)
  247 /*
  248  * Device's Unit's UnitID
  249  * Data: struct QueryUnitID*
  250  */
  251 #define QUERYINFOATTR_DEVICE_UNIT_UNIT   (QUERYINFOATTR_Dummy+47)
  252 /*
  253  * Device's Unit's LunID
  254  * Data: struct QueryUnitID*
  255  */
  256 #define QUERYINFOATTR_DEVICE_UNIT_LUN    (QUERYINFOATTR_Dummy+48)
  257 /*
  258  * Device supports a config file with RdArgs format
  259  * Data: (char*) ReadArgs string
  260  */
  261 #define QUERYINFOATTR_DEVICE_CONFIG_TEMPLATE     (QUERYINFOATTR_Dummy+49)
  262 
  263 
  264 /*
  265  * Net tags
  266  */
  267 #define QUERYINFOATTR_NET_LINK          (QUERYINFOATTR_Dummy+100)
  268 /*
  269  * Default IP Frame Type
  270  */
  271 #define QUERYINFOATTR_NET_IPTYPE        (QUERYINFOATTR_Dummy+102)
  272 /*
  273  * Default ARP Frame Type
  274  */
  275 #define QUERYINFOATTR_NET_ARPTYPE       (QUERYINFOATTR_Dummy+103)
  276 
  277 /*
  278  * Language tags
  279  */
  280 
  281 /*
  282  * Language associated with the object
  283  * Data: (char*)
  284  */
  285 #define QUERYINFOATTR_LANG_LANGUAGE     (QUERYINFOATTR_Dummy+150)
  286 /*
  287  * Language name in english
  288  * Data: (char*)
  289  */
  290 #define QUERYINFOATTR_LANG_LANGUAGE_INT (QUERYINFOATTR_Dummy+151)
  291 /*
  292  * Codepage associated with the object/language (refer to iconv
  293  * docs for the list of codepages)
  294  * Data: (char*)
  295  */
  296 #define QUERYINFOATTR_LANG_CODEPAGE     (QUERYINFOATTR_Dummy+152)
  297 
  298 /*
  299  * Below..all custom attrs start
  300  */
  301 #define QUERYINFOATTR_CUSTOM            (QUERYINFOATTR_Dummy+0x1000)
  302 
  303 /*
  304  * Custom tags used by the keymaps
  305  */
  306 #define QUERYINFOATTR_CUSTOM_KEYMAP_UNICODECONVTABLE (QUERYINFOATTR_CUSTOM + 1)
  307 #define QUERYINFOATTR_CUSTOM_KEYMAP_CHARSETCONVTABLE (QUERYINFOATTR_CUSTOM + 2)
  308 
  309 /*
  310  * Custom tags used by the mprefs classes
  311  */
  312 #define QUERYINFOATTR_CUSTOM_MPREFS_MACHINEPATTERN   (QUERYINFOATTR_CUSTOM + 1)
  313 #define QUERYINFOATTR_CUSTOM_MPREFS_DISABLEVAR       (QUERYINFOATTR_CUSTOM + 2)
  314 
  315 /***********************************************************************************
  316  *
  317  * Obtain Tags
  318  *
  319  */
  320 
  321 #define QUERYFINDATTR_Dummy                     (TAG_USER +0x01001200)
  322 
  323 /*
  324  * search for an object with this name
  325  */
  326 #define QUERYFINDATTR_NAME                      (QUERYFINDATTR_Dummy+0)
  327 
  328 /*
  329  * search for an object with this type
  330  */
  331 #define QUERYFINDATTR_TYPE                      (QUERYFINDATTR_Dummy+1)
  332 
  333 /*
  334  * search for an object with this subtype
  335  */
  336 #define QUERYFINDATTR_SUBTYPE                   (QUERYFINDATTR_Dummy+2)
  337 
  338 /*
  339  * search for an object with this class
  340  */
  341 #define QUERYFINDATTR_CLASS                     (QUERYFINDATTR_Dummy+3)
  342 
  343 /*
  344  * search for an object with this subclass
  345  */
  346 #define QUERYFINDATTR_SUBCLASS                  (QUERYFINDATTR_Dummy+4)
  347 
  348 /*
  349  * define if the search should happen externally(using DOS paths)
  350  */
  351 #define QUERYFINDATTR_EXTERNAL                  (QUERYFINDATTR_Dummy+10)
  352 
  353 /*
  354  * define a dos path search table
  355  */
  356 #define QUERYFINDATTR_PATHTABLE                 (QUERYFINDATTR_Dummy+11)
  357 
  358 /*
  359  * define if the global search table should be used
  360  */
  361 #define QUERYFINDATTR_NOGLOBALPATHTABLE         (QUERYFINDATTR_Dummy+12)
  362 
  363 /*
  364  * define a custom filter hook
  365  */
  366 #define QUERYFINDATTR_FILTERHOOK                (QUERYFINDATTR_Dummy+13)
  367 
  368 /*
  369  * define a custom filter pattern
  370  */
  371 #define QUERYFINDATTR_FILTERPATTERN             (QUERYFINDATTR_Dummy+14)
  372 
  373 
  374 /*
  375  * Ptr to
  376  * ULONG VENDORID, VENDORIDMASK,
  377  * ULONG DEVICEID, DEVICEIDMASK,
  378  * ULONG    CLASS, CLASSMASK,
  379  * ULONG SUBCLASS, SUBCLASSMASK,
  380  * ULONG PROGINFO, PROGINFOMASK
  381  * ends with all entries as 0, so you can specify several entries
  382  */
  383 #define QUERYFINDATTR_PCIMATCH                  (QUERYFINDATTR_Dummy+20)
  384 /*
  385  * define a dostype for what it should search
  386  */
  387 #define QUERYFINDATTR_FS_DOSTYPE                (QUERYFINDATTR_Dummy+21)
  388 
  389 
  390 
  391 /*********************************************************************************/
  392 
  393 /*
  394  * Type of a query object
  395  */
  396 
  397 /*
  398  * No legal type, QueryInfo with such type is equal to nil
  399  */
  400 #define QUERYTYPE_NONE          0
  401 /*
  402  * a resident list query element
  403  */
  404 #define QUERYTYPE_RESIDENT      1
  405 /*
  406  * a library list query element
  407  */
  408 #define QUERYTYPE_LIBRARY       2
  409 /*
  410  * a device query element
  411  */
  412 #define QUERYTYPE_DEVICE        3
  413 /*
  414  * a filesystem query element
  415  */
  416 #define QUERYTYPE_FILESYSTEM    4
  417 /*
  418  * an external load query element
  419  */
  420 #define QUERYTYPE_DOS           5
  421 
  422 /*
  423  * SubType of a query object
  424  * This is the real type of the queryinfo object to
  425  * define how to open it.
  426  */
  427 #define QUERYSUBTYPE_NONE               0
  428 #define QUERYSUBTYPE_LIBRARY            1
  429 #define QUERYSUBTYPE_DEVICE             2
  430 #define QUERYSUBTYPE_HANDLER            3
  431 #define QUERYSUBTYPE_MUICLASS           4
  432 #define QUERYSUBTYPE_KEYMAP             5
  433 #define QUERYSUBTYPE_OBJCFRAMEWORK      6
  434 
  435 /*
  436  * Class of a query object
  437  */
  438 #define QUERYCLASS_NONE         0
  439 #define QUERYCLASS_HANDLER      1
  440 #define QUERYCLASS_FILESYSTEM   2
  441 
  442 #define QUERYCLASS_DATATYPE     10
  443 
  444 #define QUERYCLASS_GRAPHICS     20
  445 
  446 #define QUERYCLASS_STORAGE      30
  447 
  448 #define QUERYCLASS_NET          40
  449 
  450 #define QUERYCLASS_USB          50      /* USB Hardware Devices */
  451 #define QUERYCLASS_USBCLASS     51      /* USB Stack Classes */
  452 
  453 #define QUERYCLASS_FIREWIRE     60
  454 
  455 #define QUERYCLASS_OBJDATA      70
  456 
  457 #define QUERYCLASS_PARALLEL     80
  458 
  459 #define QUERYCLASS_SERIAL       90
  460 
  461 #define QUERYCLASS_MUI          100
  462 
  463 #define QUERYCLASS_MULTIMEDIA   130
  464 
  465 #define QUERYCLASS_INTUITION    160
  466 #define QUERYCLASS_INTUITION_SCREENBAR 161
  467 
  468 #define QUERYCLASS_PRINTER      190
  469 
  470 #define QUERYCLASS_SCANNER      200
  471 
  472 #define QUERYCLASS_PREFSCLASS   220
  473 
  474 #define QUERYCLASS_AMBIENT      230
  475 
  476 /*
  477  * SubClass of a query object
  478  */
  479 
  480 #define QUERYSUBCLASS_NONE              0
  481 
  482 #define QUERYSUBCLASS_STORAGE_SCSI      30
  483 #define QUERYSUBCLASS_STORAGE_IDE       31
  484 #define QUERYSUBCLASS_STORAGE_USB       32
  485 #define QUERYSUBCLASS_STORAGE_FIREWIRE  33
  486 #define QUERYSUBCLASS_STORAGE_DVDRW     34      /* meta device */
  487 
  488 #define QUERYSUBCLASS_NET_ETHERNET      40	/* IEEE 802.3 */
  489 #define QUERYSUBCLASS_NET_PPP           41
  490 #define QUERYSUBCLASS_NET_PPTP          42
  491 #define QUERYSUBCLASS_NET_WLAN          43	/* IEEE 802.11 */
  492 
  493 #define QUERYSUBCLASS_USB_UHCI          90
  494 #define QUERYSUBCLASS_USB_OHCI          91
  495 #define QUERYSUBCLASS_USB_EHCI          92
  496 
  497 #define QUERYSUBCLASS_OBJDATA_ELF       100
  498 #define QUERYSUBCLASS_OBJDATA_HUNK      101
  499 #define QUERYSUBCLASS_OBJDATA_COFF      102
  500 
  501 #define QUERYSUBCLASS_SERIAL_RS232      200
  502 #define QUERYSUBCLASS_SERIAL_MODEM      201
  503 #define QUERYSUBCLASS_SERIAL_IRDA       202
  504 #define QUERYSUBCLASS_SERIAL_USB        203
  505 #define QUERYSUBCLASS_SERIAL_BLUETOOTH  204
  506 
  507 #define QUERYSUBCLASS_HANDLER_CON       1000
  508 
  509 #define QUERYSUBCLASS_FILESYSTEM_CD     2000
  510 #define QUERYSUBCLASS_FILESYSTEM_MASSSTORAGE 2001
  511 
  512 #define QUERYSUBCLASS_MULTIMEDIA_ENCODER 3000
  513 #define QUERYSUBCLASS_MULTIMEDIA_DECODER 3001
  514 #define QUERYSUBCLASS_MULTIMEDIA_STREAM  3002
  515 #define QUERYSUBCLASS_MULTIMEDIA_OUTPUT  3003
  516 #define QUERYSUBCLASS_MULTIMEDIA_DEMUXER 3004
  517 #define QUERYSUBCLASS_MULTIMEDIA_MUXER   3005
  518 #define QUERYSUBCLASS_MULTIMEDIA_BASIC   3006
  519 #define QUERYSUBCLASS_MULTIMEDIA_FILTER  3007
  520 
  521 #define QUERYSUBCLASS_INTUITION_BLANKERAPI 4000
  522 
  523 #define QUERYSUBCLASS_USBCLASS_KEYBOARD    10000
  524 #define QUERYSUBCLASS_USBCLASS_MOUSE       10001
  525 #define QUERYSUBCLASS_USBCLASS_HID         10002
  526 #define QUERYSUBCLASS_USBCLASS_HUB         10003
  527 #define QUERYSUBCLASS_USBCLASS_PRINTER     10004
  528 #define QUERYSUBCLASS_USBCLASS_SERIAL      10005
  529 #define QUERYSUBCLASS_USBCLASS_STORAGE     10006
  530 #define QUERYSUBCLASS_USBCLASS_BLUETOOTH   10007
  531 #define QUERYSUBCLASS_USBCLASS_MIDI        10008
  532 #define QUERYSUBCLASS_USBCLASS_MODEM       10009 /* isn't this the same as SERIAL? */
  533 #define QUERYSUBCLASS_USBCLASS_ETHERNET    10010
  534 #define QUERYSUBCLASS_USBCLASS_WLAN        10011
  535 #define QUERYSUBCLASS_USBCLASS_AUDIO       10012
  536 
  537 #define QUERYSUBCLASS_PREFSCLASS_SYSTEM    20000
  538 #define QUERYSUBCLASS_PREFSCLASS_INPUT     20001
  539 #define QUERYSUBCLASS_PREFSCLASS_UI        20002
  540 #define QUERYSUBCLASS_PREFSCLASS_AUDIO     20003
  541 #define QUERYSUBCLASS_PREFSCLASS_NETWORK   20004
  542 #define QUERYSUBCLASS_PREFSCLASS_DEVICES   20005
  543 #define QUERYSUBCLASS_PREFSCLASS_FS        20006
  544 #define QUERYSUBCLASS_PREFSCLASS_INTERNET  20007
  545 
  546 #define QUERYSUBCLASS_AMBIENT_PANEL        30000
  547 
  548 #define QUERYSUBCLASS_SCANNER_SANE         40000
  549 
  550 /*
  551  * Net Link Types used by tunnel devices
  552  * like PPP
  553  */
  554 
  555 #define QUERYNETLINK_SANA2      0
  556 #define QUERYNETLINK_SERIAL     1
  557 
  558 #endif /* LIBRARIES_QUERY_H */