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