home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / edu / DITOdev.lha / DITOdev / Extensions / Source / Italiano / StartUp.c < prev   
C/C++ Source or Header  |  1996-12-17  |  4KB  |  199 lines

  1. /*
  2. **      $VER: StartUp.c 1.0 (14.8.96)
  3. **
  4. **      Library startup-code and function table definition
  5. **
  6. **      (C) Copyright 1996 Andreas R. Kleinert
  7. **      All Rights Reserved.
  8. **
  9. **      Modified by Dirk Holtwick for DITO, 1996
  10. */
  11.  
  12. /// HEADER
  13. #include <exec/types.h>
  14. #include <exec/memory.h>
  15. #include <exec/libraries.h>
  16. #include <exec/execbase.h>
  17. #include <exec/resident.h>
  18. #include <exec/initializers.h>
  19.  
  20. #include <proto/exec.h>
  21.  
  22. #include "Base.h"
  23. #include <clib/ditoext_protos.h>
  24. ///
  25. /// PROTOTYPES
  26. extern ULONG __saveds __stdargs L_OpenLibs(void);
  27. extern void  __saveds __stdargs L_CloseLibs(void);
  28.  
  29.  
  30. struct DitoExtBase * __saveds __asm InitLib( register __a6 struct ExecBase      *sysbase,
  31.                                                             register __a0 struct SegList       *seglist,
  32.                                                             register __d0 struct DitoExtBase *exb);
  33.  
  34. struct DitoExtBase * __saveds __asm OpenLib( register __a6 struct DitoExtBase *DitoExtBase);
  35. struct SegList * __saveds __asm CloseLib( register __a6 struct DitoExtBase *DitoExtBase);
  36. struct SegList * __saveds __asm ExpungeLib( register __a6 struct DitoExtBase *exb);
  37. ULONG __saveds __asm ExtFuncLib(void);
  38. ///
  39.  
  40. /// LibStart()
  41. ULONG __saveds __asm LibStart(void)
  42. {
  43.  return(0);
  44. }
  45. ///
  46.  
  47. /// struct InitTable
  48. extern APTR FuncTab [];
  49. extern struct MyDataInit DataTab;
  50.  
  51. struct InitTable
  52. {
  53.  ULONG              LibBaseSize;
  54.  APTR              *FunctionTable;
  55.  struct MyDataInit *DataTable;
  56.  APTR               InitLibTable;
  57. } InitTab =
  58. {
  59.  sizeof(struct DitoExtBase),
  60.  &FuncTab[0],
  61.  &DataTab,
  62.  InitLib
  63. };
  64. ///
  65. /// struct FuncTable
  66. APTR FuncTab [] =
  67. {
  68.  OpenLib,
  69.  CloseLib,
  70.  ExpungeLib,
  71.  ExtFuncLib,
  72.  
  73.  DITO_GetExtInfo,
  74.  DITO_CreateInput,
  75.  DITO_DisposeInput,
  76.  DITO_WriteInput,
  77.  DITO_ClearInput,
  78.  DITO_ReadInput,
  79.  DITO_ActivateFirstInput,
  80.  DITO_FontsInput,
  81.  DITO_UpdateInput,
  82.  DITO_CreateOutput,
  83.  DITO_DisposeOutput,
  84.  DITO_WriteOutput,
  85.  DITO_FontsOutput,
  86.  DITO_UpdateOutput,
  87.  DITO_ParseInput,
  88.  DITO_GrammarString,
  89.  
  90.  (APTR) ((LONG)-1)
  91. };
  92.  
  93.  
  94. extern struct DitoExtBase *DitoExtBase;
  95. ///
  96.  
  97. /// InitLib()
  98. struct DitoExtBase * __saveds __asm InitLib( register __a6 struct ExecBase      *sysbase,
  99.                                                             register __a0 struct SegList       *seglist,
  100.                                                             register __d0 struct DitoExtBase *exb)
  101. {
  102.  DitoExtBase = exb;
  103.  
  104.  DitoExtBase->exb_SysBase = sysbase;
  105.  DitoExtBase->exb_SegList = seglist;
  106.  
  107.  if(L_OpenLibs()) return(DitoExtBase);
  108.  
  109.  L_CloseLibs();
  110.  
  111.  return(NULL);
  112. }
  113. ///
  114. /// OpenLib()
  115. struct DitoExtBase * __saveds __asm OpenLib( register __a6 struct DitoExtBase *DitoExtBase)
  116. {
  117.  DitoExtBase->exb_LibNode.lib_OpenCnt++;
  118.  
  119.  DitoExtBase->exb_LibNode.lib_Flags &= (0xFF ^ LIBF_DELEXP);
  120.  
  121.  return(DitoExtBase);
  122. }
  123. ///
  124. /// CloseLib()
  125. struct SegList * __saveds __asm CloseLib( register __a6 struct DitoExtBase *DitoExtBase)
  126. {
  127.  DitoExtBase->exb_LibNode.lib_OpenCnt--;
  128.  
  129.  if(!DitoExtBase->exb_LibNode.lib_OpenCnt)
  130.   {
  131.     if(DitoExtBase->exb_LibNode.lib_Flags & LIBF_DELEXP)
  132.      {
  133.       return( ExpungeLib(DitoExtBase) );
  134.      }
  135.   }
  136.  
  137.  return(NULL);
  138. }
  139. ///
  140. /// ExpungeLib()
  141. struct SegList * __saveds __asm ExpungeLib( register __a6 struct DitoExtBase *exb)
  142. {
  143.  struct DitoExtBase *DitoExtBase = exb;
  144.  struct SegList       *seglist;
  145.  
  146.  if(!DitoExtBase->exb_LibNode.lib_OpenCnt)
  147.   {
  148.     ULONG negsize, possize, fullsize;
  149.     UBYTE *negptr = (UBYTE *) DitoExtBase;
  150.  
  151.     seglist = DitoExtBase->exb_SegList;
  152.  
  153.     Remove(DitoExtBase);
  154.  
  155.     L_CloseLibs();
  156.  
  157.     negsize  = DitoExtBase->exb_LibNode.lib_NegSize;
  158.     possize  = DitoExtBase->exb_LibNode.lib_PosSize;
  159.     fullsize = negsize + possize;
  160.     negptr  -= negsize;
  161.  
  162.     FreeMem(negptr, fullsize);
  163.  
  164.     return(seglist);
  165.   }
  166.   
  167.  DitoExtBase->exb_LibNode.lib_Flags |= LIBF_DELEXP;
  168.  
  169.  return(NULL);
  170. }
  171. ///
  172. /// ExtFuncLib()
  173. ULONG __saveds __asm ExtFuncLib(void)
  174. {
  175.  return(NULL);
  176. }
  177.  
  178. struct DitoExtBase *DitoExtBase = NULL;
  179. ///
  180.  
  181. /// SAS (private)
  182. /* for SAS/C's sc.lib only */
  183.  
  184. ULONG XCEXIT       = NULL;
  185. ULONG _XCEXIT      = NULL;
  186. ULONG ONBREAK      = NULL;
  187. ULONG _ONBREAK     = NULL;
  188. ULONG base         = NULL;
  189. ULONG _base        = NULL;
  190. ULONG ProgramName  = NULL;
  191. ULONG _ProgramName = NULL;
  192. ULONG StackPtr     = NULL;
  193. ULONG _StackPtr    = NULL;
  194. ULONG oserr        = NULL;
  195. ULONG _oserr       = NULL;
  196. ULONG OSERR        = NULL;
  197. ULONG _OSERR       = NULL;
  198. ///
  199.