home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / objam01.lha / objam / runtime / objclib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-13  |  4.1 KB  |  154 lines

  1. /*
  2. ** ObjectiveAmiga: objc-*.library main module
  3. ** See GNU:lib/libobjam/ReadMe for details
  4. */
  5.  
  6.  
  7. /****************************************************************** includes */
  8.  
  9. #include <exec/types.h>
  10. #include <exec/execbase.h>
  11. #include <dos/dosextens.h>
  12. #include <proto/exec.h>
  13. #include <headers/stabs.h>
  14.  
  15. #include <libraries/objc.h>
  16. #include <clib/objc_protos.h>
  17.  
  18. #include "zone.h"
  19. #include "atom.h"
  20. #include "misc.h"
  21.  
  22.  
  23. /******************************************************************* defines */
  24.  
  25. #ifdef AMIGAOS_39
  26. #define OSLIBVERSION 39
  27. #else
  28. #define OSLIBVERSION 37
  29. #endif
  30.  
  31.  
  32. /******************************************************************* exports */
  33.  
  34. const BYTE LibName[]=OBJCNAME;
  35. const BYTE LibIdString[]="objc 1.5 (15.1.95)";
  36.  
  37. const UWORD LibVersion=1;
  38. const UWORD LibRevision=4;
  39.  
  40.  
  41. /******************************************************* global declarations */
  42.  
  43. struct ObjcBase *myLibPtr;
  44. struct ExecBase *SysBase;
  45. struct DosLibrary *DOSBase;
  46. struct Library *UtilityBase;
  47. struct Library *__UtilityBase;
  48.  
  49.  
  50. /*********************************** user library initialization and cleanup */
  51.  
  52. static int Cleanup(void)
  53. {
  54.   if(__DefaultMallocZone) NXDestroyZone(__DefaultMallocZone);
  55.   if(UtilityBase) CloseLibrary(UtilityBase);
  56.   if(DOSBase) CloseLibrary((struct Library *)DOSBase);
  57.   return 1;
  58. }
  59.  
  60. int __UserLibInit(struct Library *myLib) /* CAUTION: This function may run in a forbidden state */
  61. {
  62.   /* setup your library base - to access library functions over *this* basePtr! */
  63.  
  64.   myLibPtr = (struct ObjcBase *)myLib;
  65.  
  66.   SysBase=*(struct ExecBase **)4;
  67.   if(!(DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",OSLIBVERSION))) return Cleanup();
  68.   if(!(UtilityBase=OpenLibrary("utility.library",OSLIBVERSION))) return Cleanup();
  69.   __UtilityBase=UtilityBase;
  70.   if(!(__DefaultMallocZone=NXCreateZone(2*vm_page_size,vm_page_size,TRUE))) return Cleanup();
  71.   if(!(__AtomList=(struct List *)NXZoneMalloc(__DefaultMallocZone,sizeof(struct List)))) return Cleanup();
  72.   NewList(__AtomList);
  73.  
  74.   return 0;
  75. }
  76.  
  77. void __UserLibCleanUp() /* CAUTION: This function runs in a forbidden state */
  78. {
  79.   Cleanup();
  80. }
  81.  
  82.  
  83. struct __objclib_init_data *libinitdata;
  84.  
  85. BOOL __objclib_init(struct __objclib_init_data *data)
  86. {
  87.   libinitdata=data;
  88.   return TRUE;
  89. }
  90.  
  91.  
  92. /**************************************************************** jump table */
  93.  
  94. ADDTABL_1(__objclib_init,a0);
  95.  
  96. ADDTABL_3(NXCreateZone,d0,d1,d2);
  97. ADDTABL_4(NXCreateChildZone,a0,d0,d1,d2);
  98. ADDTABL_1(NXMergeZone,a0);
  99. ADDTABL_1(NXZoneFromPtr,a1);
  100. ADDTABL_1(NXDestroyZone,a0);
  101. ADDTABL_2(NXZoneMalloc,a0,d0);
  102. ADDTABL_3(NXZoneCalloc,a0,d0,d1);
  103. ADDTABL_3(NXZoneRealloc,a0,a1,d0);
  104. ADDTABL_2(NXZoneFree,a0,a1);
  105. ADDTABL_2(NXNameZone,a0,a1);
  106. ADDTABL_1(NXZonePtrInfo,a1);
  107. ADDTABL_0(NXDefaultMallocZone);
  108. ADDTABL_0(NXMallocCheck);
  109.  
  110. ADDTABL_1(NXUniqueString,a1);
  111. ADDTABL_2(NXUniqueStringWithLength,a1,d0);
  112. ADDTABL_1(NXUniqueStringNoCopy,a1);
  113. ADDTABL_1(NXCopyStringBuffer,a1);
  114. ADDTABL_2(NXCopyStringBufferFromZone,a1,a0);
  115.  
  116. ADDTABL_1(__objc_xmalloc,d0);
  117. ADDTABL_2(__objc_xmalloc_from_zone,d0,a0);
  118. ADDTABL_2(__objc_xrealloc,a0,d0);
  119. ADDTABL_2(__objc_xcalloc,d0,d1);
  120. ADDTABL_1(__objc_xfree,a0);
  121.  
  122. ADDTABL_1(objc_fatal,a0);
  123. ADDTABL_2(__objc_archiving_fatal,a0,d0);
  124. ADDTABL_1(class_create_instance,a1);
  125. ADDTABL_2(class_create_instance_from_zone,a1,a0);
  126. ADDTABL_1(object_copy,a1);
  127. ADDTABL_2(object_copy_from_zone,a1,a0);
  128. ADDTABL_1(object_dispose,a1);
  129.  
  130. ADDTABL_1(objc_aligned_size,a0);
  131. ADDTABL_1(objc_sizeof_type,a0);
  132. ADDTABL_1(objc_alignof_type,a0);
  133. ADDTABL_1(objc_promoted_size,a0);
  134. ADDTABL_1(objc_skip_type_qualifiers,a0);
  135. ADDTABL_1(objc_skip_typespec,a0);
  136. ADDTABL_1(objc_skip_offset,a0);
  137. ADDTABL_1(objc_skip_argspec,a0);
  138. ADDTABL_1(method_get_number_of_arguments,a1);
  139. ADDTABL_1(method_get_sizeof_arguments,a1);
  140. ADDTABL_3(method_get_first_argument,a1,a2,a0);
  141. ADDTABL_2(method_get_next_argument,a2,a0);
  142. ADDTABL_4(method_get_nth_argument,a1,a2,d0,a0);
  143. ADDTABL_1(objc_get_type_qualifiers,a0);
  144.  
  145. ADDTABL_2(sarray_new,d0,a0);
  146. ADDTABL_1(sarray_free,a1);
  147. ADDTABL_1(sarray_lazy_copy,a1);
  148. ADDTABL_2(sarray_realloc,a1,d0);
  149. ADDTABL_3(sarray_at_put,a1,d0,a0);
  150. ADDTABL_3(sarray_at_put_safe,a1,d0,a0);
  151. ADDTABL_0(__objc_print_dtable_stats);
  152.  
  153. ADDTABL_END();
  154.