expat_68k_handler_stubs.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /*
  2. ** Copyright (c) 2001-2009 Expat maintainers.
  3. **
  4. ** Permission is hereby granted, free of charge, to any person obtaining
  5. ** a copy of this software and associated documentation files (the
  6. ** "Software"), to deal in the Software without restriction, including
  7. ** without limitation the rights to use, copy, modify, merge, publish,
  8. ** distribute, sublicense, and/or sell copies of the Software, and to
  9. ** permit persons to whom the Software is furnished to do so, subject to
  10. ** the following conditions:
  11. **
  12. ** The above copyright notice and this permission notice shall be included
  13. ** in all copies or substantial portions of the Software.
  14. **
  15. ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  16. ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17. ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  18. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  19. ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  20. ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  21. ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22. */
  23. #ifdef __USE_INLINE__
  24. #undef __USE_INLINE__
  25. #endif
  26. #include "expat_68k.h"
  27. #include <exec/emulation.h>
  28. #include <proto/exec.h>
  29. #include <stdarg.h>
  30. static uint32 VARARGS68K call_68k_code (struct ExecIFace *IExec, void *code, int num_args, ...) {
  31. uint32 res = 0;
  32. va_list vargs;
  33. va_startlinear(vargs, num_args);
  34. uint32 *args = va_getlinearva(vargs, uint32 *);
  35. uint8 *stack = IExec->AllocVec(4096, MEMF_SHARED);
  36. if (stack) {
  37. uint32 *sp = (uint32 *)(stack + 4096);
  38. args += num_args;
  39. while (num_args--) {
  40. *--sp = *--args;
  41. }
  42. res = IExec->EmulateTags(code, ET_StackPtr, sp, TAG_END);
  43. IExec->FreeVec(stack);
  44. }
  45. va_end(vargs);
  46. return res;
  47. }
  48. void _68k_startelementhandler(void *userdata, const char *name, const char **attrs) {
  49. M68kXML_Parser p = userdata;
  50. call_68k_code(p->IExec, p->startelementhandler, 3, p->handlerarg, name, attrs);
  51. }
  52. void _68k_endelementhandler(void *userdata, const char *name) {
  53. M68kXML_Parser p = userdata;
  54. call_68k_code(p->IExec, p->endelementhandler, 2, p->handlerarg, name);
  55. }
  56. void _68k_chardatahandler(void *userdata, const char *s, int len) {
  57. M68kXML_Parser p = userdata;
  58. call_68k_code(p->IExec, p->chardatahandler, 3, p->handlerarg, s, len);
  59. }
  60. void _68k_procinsthandler(void *userdata, const char *target, const char *data) {
  61. M68kXML_Parser p = userdata;
  62. call_68k_code(p->IExec, p->procinsthandler, 3, p->handlerarg, target, data);
  63. }
  64. void _68k_commenthandler(void *userdata, const char *data) {
  65. M68kXML_Parser p = userdata;
  66. call_68k_code(p->IExec, p->commenthandler, 2, p->handlerarg, data);
  67. }
  68. void _68k_startcdatahandler(void *userdata) {
  69. M68kXML_Parser p = userdata;
  70. call_68k_code(p->IExec, p->startcdatahandler, 1, p->handlerarg);
  71. }
  72. void _68k_endcdatahandler(void *userdata) {
  73. M68kXML_Parser p = userdata;
  74. call_68k_code(p->IExec, p->endcdatahandler, 1, p->handlerarg);
  75. }
  76. void _68k_defaulthandler(void *userdata, const char *s, int len) {
  77. M68kXML_Parser p = userdata;
  78. call_68k_code(p->IExec, p->defaulthandler, 3, p->handlerarg, s, len);
  79. }
  80. void _68k_defaulthandlerexp(void *userdata, const char *s, int len) {
  81. M68kXML_Parser p = userdata;
  82. call_68k_code(p->IExec, p->defaulthandlerexp, 3, p->handlerarg, s, len);
  83. }
  84. int _68k_extentrefhandler(XML_Parser parser, const char *context, const char *base,
  85. const char *sysid, const char *pubid)
  86. {
  87. M68kXML_Parser p = XML_GetUserData(parser);
  88. void *arg = p->extenthandlerarg;
  89. return (int)call_68k_code(p->IExec, p->extentrefhandler, 5, arg ? arg : p, context, base, sysid, pubid);
  90. }
  91. int _68k_unknownenchandler(void *enchandlerdata, const char *name, XML_Encoding *info) {
  92. M68kXML_Parser p = enchandlerdata;
  93. return (int)call_68k_code(p->IExec, p->unknownenchandler, 3, p->enchandlerarg, name, info);
  94. }
  95. void _68k_startnamespacehandler(void *userdata, const char *prefix, const char *uri) {
  96. M68kXML_Parser p = userdata;
  97. call_68k_code(p->IExec, p->startnamespacehandler, 3, p->handlerarg, prefix, uri);
  98. }
  99. void _68k_endnamespacehandler(void *userdata, const char *prefix) {
  100. M68kXML_Parser p = userdata;
  101. call_68k_code(p->IExec, p->endnamespacehandler, 2, p->handlerarg, prefix);
  102. }
  103. void _68k_xmldeclhandler(void *userdata, const char *version, const char *encoding, int standalone) {
  104. M68kXML_Parser p = userdata;
  105. call_68k_code(p->IExec, p->xmldeclhandler, 4, p->handlerarg, version, encoding, standalone);
  106. }
  107. void _68k_startdoctypehandler(void *userdata, const char *doctypename,
  108. const char *sysid, const char *pubid, int has_internal_subset)
  109. {
  110. M68kXML_Parser p = userdata;
  111. call_68k_code(p->IExec, p->startdoctypehandler, 5, p->handlerarg, doctypename, sysid, pubid, has_internal_subset);
  112. }
  113. void _68k_enddoctypehandler(void *userdata) {
  114. M68kXML_Parser p = userdata;
  115. call_68k_code(p->IExec, p->enddoctypehandler, 1, p->handlerarg);
  116. }
  117. void _68k_elementdeclhandler(void *userdata, const char *name, XML_Content *model) {
  118. M68kXML_Parser p = userdata;
  119. call_68k_code(p->IExec, p->elementdeclhandler, 3, p->handlerarg, name, model);
  120. }
  121. void _68k_attlistdeclhandler(void *userdata, const char *elname, const char *attname,
  122. const char *att_type, const char *dflt, int isrequired)
  123. {
  124. M68kXML_Parser p = userdata;
  125. call_68k_code(p->IExec, p->attlistdeclhandler, 6, p->handlerarg, elname, attname, att_type, dflt, isrequired);
  126. }
  127. void _68k_entitydeclhandler(void *userdata, const char *entityname, int is_param_entity,
  128. const char *value, int value_length, const char *base, const char *sysid, const char *pubid,
  129. const char *notationname)
  130. {
  131. M68kXML_Parser p = userdata;
  132. call_68k_code(p->IExec, p->entitydeclhandler, 9, p->handlerarg, entityname, is_param_entity,
  133. value, value_length, base, sysid, pubid, notationname);
  134. }
  135. void _68k_unparseddeclhandler(void *userdata, const char *entityname, const char *base,
  136. const char *sysid, const char *pubid, const char *notationname)
  137. {
  138. M68kXML_Parser p = userdata;
  139. call_68k_code(p->IExec, p->unparseddeclhandler, 6, p->handlerarg, entityname, base, sysid, pubid, notationname);
  140. }
  141. void _68k_notationdeclhandler(void *userdata, const char *notationname, const char *base,
  142. const char *sysid, const char *pubid)
  143. {
  144. M68kXML_Parser p = userdata;
  145. call_68k_code(p->IExec, p->notationdeclhandler, 5, p->handlerarg, notationname, base, sysid, pubid);
  146. }
  147. int _68k_notstandalonehandler(void *userdata) {
  148. M68kXML_Parser p = userdata;
  149. return (int)call_68k_code(p->IExec, p->notstandalonehandler, 1, p->handlerarg);
  150. }
  151. void _68k_skippedentityhandler(void *userdata, const char *entityname, int is_param_entity) {
  152. M68kXML_Parser p = userdata;
  153. call_68k_code(p->IExec, p->skippedentityhandler, 3, p->handlerarg, entityname, is_param_entity);
  154. }