summaryrefslogtreecommitdiffstats
path: root/src/base/main/mainInit.c
diff options
context:
space:
mode:
authorBaruch Sterin <baruchs@gmail.com>2014-10-22 15:50:06 -0700
committerBaruch Sterin <baruchs@gmail.com>2014-10-22 15:50:06 -0700
commit392390d23e726ed796f8018c3d0a003758c1559b (patch)
tree231100bd1a7efd811e8465150762c71fc0e842c7 /src/base/main/mainInit.c
parent51bf12107397b25a79b0c7b593bd3bf74e68e021 (diff)
downloadabc-392390d23e726ed796f8018c3d0a003758c1559b.tar.gz
abc-392390d23e726ed796f8018c3d0a003758c1559b.tar.bz2
abc-392390d23e726ed796f8018c3d0a003758c1559b.zip
make it easy to add intialization functions to Abc_FrameInit()/Abc_FrameEnd()
Diffstat (limited to 'src/base/main/mainInit.c')
-rw-r--r--src/base/main/mainInit.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/base/main/mainInit.c b/src/base/main/mainInit.c
index f99a5653..b2ad5cde 100644
--- a/src/base/main/mainInit.c
+++ b/src/base/main/mainInit.c
@@ -59,6 +59,24 @@ extern void Abc2_End ( Abc_Frame_t * pAbc );
extern void Abc85_Init( Abc_Frame_t * pAbc );
extern void Abc85_End( Abc_Frame_t * pAbc );
+static Abc_FrameInitializer_t* s_InitializerStart = NULL;
+static Abc_FrameInitializer_t* s_InitializerEnd = NULL;
+
+void Abc_FrameAddInitializer( Abc_FrameInitializer_t* p )
+{
+ if( ! s_InitializerStart )
+ s_InitializerStart = p;
+
+ p->next = NULL;
+ p->prev = s_InitializerEnd;
+
+ if ( s_InitializerEnd )
+ s_InitializerEnd->next = p;
+
+ s_InitializerEnd = p;
+
+}
+
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
@@ -76,6 +94,8 @@ extern void Abc85_End( Abc_Frame_t * pAbc );
***********************************************************************/
void Abc_FrameInit( Abc_Frame_t * pAbc )
{
+ Abc_FrameInitializer_t* p;
+
Cmd_Init( pAbc );
Cmd_CommandExecute( pAbc, "set checkread" );
Io_Init( pAbc );
@@ -96,6 +116,10 @@ void Abc_FrameInit( Abc_Frame_t * pAbc )
Abc85_Init( pAbc );
#endif
EXT_ABC_INIT(pAbc) // plugin for external functionality
+
+ for( p = s_InitializerStart ; p ; p = p->next )
+ if(p->init)
+ p->init(pAbc);
}
@@ -112,6 +136,12 @@ void Abc_FrameInit( Abc_Frame_t * pAbc )
***********************************************************************/
void Abc_FrameEnd( Abc_Frame_t * pAbc )
{
+ Abc_FrameInitializer_t* p;
+
+ for( p = s_InitializerEnd ; p ; p = p->prev )
+ if ( p->destroy )
+ p->destroy(pAbc);
+
Abc_End( pAbc );
Io_End( pAbc );
Cmd_End( pAbc );