home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 18
/
aminetcdnumber181997.iso
/
Aminet
/
misc
/
edu
/
DITOdev.lha
/
DITOdev
/
Extensions
/
Source
/
Italiano
/
StartUp.c
< prev
Wrap
C/C++ Source or Header
|
1996-12-17
|
4KB
|
199 lines
/*
** $VER: StartUp.c 1.0 (14.8.96)
**
** Library startup-code and function table definition
**
** (C) Copyright 1996 Andreas R. Kleinert
** All Rights Reserved.
**
** Modified by Dirk Holtwick for DITO, 1996
*/
/// HEADER
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/libraries.h>
#include <exec/execbase.h>
#include <exec/resident.h>
#include <exec/initializers.h>
#include <proto/exec.h>
#include "Base.h"
#include <clib/ditoext_protos.h>
///
/// PROTOTYPES
extern ULONG __saveds __stdargs L_OpenLibs(void);
extern void __saveds __stdargs L_CloseLibs(void);
struct DitoExtBase * __saveds __asm InitLib( register __a6 struct ExecBase *sysbase,
register __a0 struct SegList *seglist,
register __d0 struct DitoExtBase *exb);
struct DitoExtBase * __saveds __asm OpenLib( register __a6 struct DitoExtBase *DitoExtBase);
struct SegList * __saveds __asm CloseLib( register __a6 struct DitoExtBase *DitoExtBase);
struct SegList * __saveds __asm ExpungeLib( register __a6 struct DitoExtBase *exb);
ULONG __saveds __asm ExtFuncLib(void);
///
/// LibStart()
ULONG __saveds __asm LibStart(void)
{
return(0);
}
///
/// struct InitTable
extern APTR FuncTab [];
extern struct MyDataInit DataTab;
struct InitTable
{
ULONG LibBaseSize;
APTR *FunctionTable;
struct MyDataInit *DataTable;
APTR InitLibTable;
} InitTab =
{
sizeof(struct DitoExtBase),
&FuncTab[0],
&DataTab,
InitLib
};
///
/// struct FuncTable
APTR FuncTab [] =
{
OpenLib,
CloseLib,
ExpungeLib,
ExtFuncLib,
DITO_GetExtInfo,
DITO_CreateInput,
DITO_DisposeInput,
DITO_WriteInput,
DITO_ClearInput,
DITO_ReadInput,
DITO_ActivateFirstInput,
DITO_FontsInput,
DITO_UpdateInput,
DITO_CreateOutput,
DITO_DisposeOutput,
DITO_WriteOutput,
DITO_FontsOutput,
DITO_UpdateOutput,
DITO_ParseInput,
DITO_GrammarString,
(APTR) ((LONG)-1)
};
extern struct DitoExtBase *DitoExtBase;
///
/// InitLib()
struct DitoExtBase * __saveds __asm InitLib( register __a6 struct ExecBase *sysbase,
register __a0 struct SegList *seglist,
register __d0 struct DitoExtBase *exb)
{
DitoExtBase = exb;
DitoExtBase->exb_SysBase = sysbase;
DitoExtBase->exb_SegList = seglist;
if(L_OpenLibs()) return(DitoExtBase);
L_CloseLibs();
return(NULL);
}
///
/// OpenLib()
struct DitoExtBase * __saveds __asm OpenLib( register __a6 struct DitoExtBase *DitoExtBase)
{
DitoExtBase->exb_LibNode.lib_OpenCnt++;
DitoExtBase->exb_LibNode.lib_Flags &= (0xFF ^ LIBF_DELEXP);
return(DitoExtBase);
}
///
/// CloseLib()
struct SegList * __saveds __asm CloseLib( register __a6 struct DitoExtBase *DitoExtBase)
{
DitoExtBase->exb_LibNode.lib_OpenCnt--;
if(!DitoExtBase->exb_LibNode.lib_OpenCnt)
{
if(DitoExtBase->exb_LibNode.lib_Flags & LIBF_DELEXP)
{
return( ExpungeLib(DitoExtBase) );
}
}
return(NULL);
}
///
/// ExpungeLib()
struct SegList * __saveds __asm ExpungeLib( register __a6 struct DitoExtBase *exb)
{
struct DitoExtBase *DitoExtBase = exb;
struct SegList *seglist;
if(!DitoExtBase->exb_LibNode.lib_OpenCnt)
{
ULONG negsize, possize, fullsize;
UBYTE *negptr = (UBYTE *) DitoExtBase;
seglist = DitoExtBase->exb_SegList;
Remove(DitoExtBase);
L_CloseLibs();
negsize = DitoExtBase->exb_LibNode.lib_NegSize;
possize = DitoExtBase->exb_LibNode.lib_PosSize;
fullsize = negsize + possize;
negptr -= negsize;
FreeMem(negptr, fullsize);
return(seglist);
}
DitoExtBase->exb_LibNode.lib_Flags |= LIBF_DELEXP;
return(NULL);
}
///
/// ExtFuncLib()
ULONG __saveds __asm ExtFuncLib(void)
{
return(NULL);
}
struct DitoExtBase *DitoExtBase = NULL;
///
/// SAS (private)
/* for SAS/C's sc.lib only */
ULONG XCEXIT = NULL;
ULONG _XCEXIT = NULL;
ULONG ONBREAK = NULL;
ULONG _ONBREAK = NULL;
ULONG base = NULL;
ULONG _base = NULL;
ULONG ProgramName = NULL;
ULONG _ProgramName = NULL;
ULONG StackPtr = NULL;
ULONG _StackPtr = NULL;
ULONG oserr = NULL;
ULONG _oserr = NULL;
ULONG OSERR = NULL;
ULONG _OSERR = NULL;
///