Home | History | Annotate | Download | only in ah
      1 
      2 /* =========================== Module _AH =========================== */
      3 
      4 #include "Python.h"
      5 
      6 
      7 
      8 #include "pymactoolbox.h"
      9 
     10 /* Macro to test whether a weak-loaded CFM function exists */
     11 #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL )  {\
     12     PyErr_SetString(PyExc_NotImplementedError, \
     13     "Not available in this shared library/OS version"); \
     14     return NULL; \
     15     }} while(0)
     16 
     17 
     18 #include <Carbon/Carbon.h>
     19 
     20 
     21 static PyObject *Ah_Error;
     22 
     23 static PyObject *Ah_AHSearch(PyObject *_self, PyObject *_args)
     24 {
     25     PyObject *_res = NULL;
     26     OSStatus _err;
     27     CFStringRef bookname;
     28     CFStringRef query;
     29     if (!PyArg_ParseTuple(_args, "O&O&",
     30                           CFStringRefObj_Convert, &bookname,
     31                           CFStringRefObj_Convert, &query))
     32         return NULL;
     33     _err = AHSearch(bookname,
     34                     query);
     35     if (_err != noErr) return PyMac_Error(_err);
     36     Py_INCREF(Py_None);
     37     _res = Py_None;
     38     return _res;
     39 }
     40 
     41 static PyObject *Ah_AHGotoMainTOC(PyObject *_self, PyObject *_args)
     42 {
     43     PyObject *_res = NULL;
     44     OSStatus _err;
     45     AHTOCType toctype;
     46     if (!PyArg_ParseTuple(_args, "h",
     47                           &toctype))
     48         return NULL;
     49     _err = AHGotoMainTOC(toctype);
     50     if (_err != noErr) return PyMac_Error(_err);
     51     Py_INCREF(Py_None);
     52     _res = Py_None;
     53     return _res;
     54 }
     55 
     56 static PyObject *Ah_AHGotoPage(PyObject *_self, PyObject *_args)
     57 {
     58     PyObject *_res = NULL;
     59     OSStatus _err;
     60     CFStringRef bookname;
     61     CFStringRef path;
     62     CFStringRef anchor;
     63     if (!PyArg_ParseTuple(_args, "O&O&O&",
     64                           CFStringRefObj_Convert, &bookname,
     65                           CFStringRefObj_Convert, &path,
     66                           CFStringRefObj_Convert, &anchor))
     67         return NULL;
     68     _err = AHGotoPage(bookname,
     69                       path,
     70                       anchor);
     71     if (_err != noErr) return PyMac_Error(_err);
     72     Py_INCREF(Py_None);
     73     _res = Py_None;
     74     return _res;
     75 }
     76 
     77 static PyObject *Ah_AHLookupAnchor(PyObject *_self, PyObject *_args)
     78 {
     79     PyObject *_res = NULL;
     80     OSStatus _err;
     81     CFStringRef bookname;
     82     CFStringRef anchor;
     83     if (!PyArg_ParseTuple(_args, "O&O&",
     84                           CFStringRefObj_Convert, &bookname,
     85                           CFStringRefObj_Convert, &anchor))
     86         return NULL;
     87     _err = AHLookupAnchor(bookname,
     88                           anchor);
     89     if (_err != noErr) return PyMac_Error(_err);
     90     Py_INCREF(Py_None);
     91     _res = Py_None;
     92     return _res;
     93 }
     94 
     95 static PyObject *Ah_AHRegisterHelpBook(PyObject *_self, PyObject *_args)
     96 {
     97     PyObject *_res = NULL;
     98     OSStatus _err;
     99     FSRef appBundleRef;
    100     if (!PyArg_ParseTuple(_args, "O&",
    101                           PyMac_GetFSRef, &appBundleRef))
    102         return NULL;
    103     _err = AHRegisterHelpBook(&appBundleRef);
    104     if (_err != noErr) return PyMac_Error(_err);
    105     Py_INCREF(Py_None);
    106     _res = Py_None;
    107     return _res;
    108 }
    109 
    110 static PyMethodDef Ah_methods[] = {
    111     {"AHSearch", (PyCFunction)Ah_AHSearch, 1,
    112      PyDoc_STR("(CFStringRef bookname, CFStringRef query) -> None")},
    113     {"AHGotoMainTOC", (PyCFunction)Ah_AHGotoMainTOC, 1,
    114      PyDoc_STR("(AHTOCType toctype) -> None")},
    115     {"AHGotoPage", (PyCFunction)Ah_AHGotoPage, 1,
    116      PyDoc_STR("(CFStringRef bookname, CFStringRef path, CFStringRef anchor) -> None")},
    117     {"AHLookupAnchor", (PyCFunction)Ah_AHLookupAnchor, 1,
    118      PyDoc_STR("(CFStringRef bookname, CFStringRef anchor) -> None")},
    119     {"AHRegisterHelpBook", (PyCFunction)Ah_AHRegisterHelpBook, 1,
    120      PyDoc_STR("(FSRef appBundleRef) -> None")},
    121     {NULL, NULL, 0}
    122 };
    123 
    124 
    125 
    126 
    127 void init_AH(void)
    128 {
    129     PyObject *m;
    130     PyObject *d;
    131 
    132 
    133 
    134 
    135     m = Py_InitModule("_AH", Ah_methods);
    136     d = PyModule_GetDict(m);
    137     Ah_Error = PyMac_GetOSErrException();
    138     if (Ah_Error == NULL ||
    139         PyDict_SetItemString(d, "Error", Ah_Error) != 0)
    140         return;
    141 }
    142 
    143 /* ========================= End module _AH ========================= */
    144 
    145