Example #1
0
File: node.c Project: Jsoucek/q3ce
void NodeAddModule(const tchar_t* Path,int Id,int64_t Date,bool_t Load,bool_t Tmp)
{
	context* p = Context();
	LockEnter(p->NodeLock);
	if (ArrayAppend(&p->NodeModule,NULL,sizeof(nodemodule),256))
	{
		int No = ARRAYCOUNT(p->NodeModule,nodemodule)-1;
		nodemodule* Module = ARRAYBEGIN(p->NodeModule,nodemodule)+No;
		memset(Module,0,sizeof(nodemodule));
		Module->Id = Id;
		Module->Date = Date;
		Module->Tmp = Tmp;

		StringAdd(1,MODULE_PATH,No,Path);
		if (Load)
		{
			p->LoadModuleNo = No;
			Module->Module = NodeLoadModule(Path,&Module->Id,&Module->Func,&Module->Db);
			p->LoadModuleNo = 0;
#ifdef PLUGINCLEANUP
			FreeModule(Module);
#endif
		}
	}
	LockLeave(p->NodeLock);
}
Example #2
0
File: node.c Project: Jsoucek/q3ce
static NOINLINE int FindModule(context* p,const tchar_t* Path,int Id)
{
	// important to find from the begining for Palm OS 
	// so the exising plugins are found first

	int No,Count;
	int Result = -1;

	LockEnter(p->NodeLock);
	Count = ARRAYCOUNT(p->NodeModule,nodemodule);
	if (!Path) Path = T("");
	for (No=0;No<Count;++No)
	{
		bool_t SameId = ARRAYBEGIN(p->NodeModule,nodemodule)[No].Id == Id;
		bool_t SameName = TcsICmp(Path,StringDef(MODULE_PATH,No))==0;

		if (SameId && Id!=0) // same Id means same module
			SameName = 1;
		if (SameName && !Id)
			SameId = 1;

		if (SameId && SameName)
		{
			Result = No;
			break;
		}
	}
	LockLeave(p->NodeLock);
	return Result;
}
Example #3
0
char StreamExtType(anynode* AnyNode, fourcc_t ClassFilter, const tchar_t *Ext)
{
    char Result = FTYPE_UNDEFINED;
    tchar_t *s;
    size_t i;
    array List;
    StreamGenExts(AnyNode,&List,ClassFilter,NULL);

    for (s=ARRAYBEGIN(List,tchar_t);s;)
    {
        for (i=0;s[i] && s[i]==Ext[i];i++) {}

        if (!Ext[i] && s[i] == ':')
        {
            Result = (char)s[i+1];
            break;
        }

        s = tcschr(s,';');
        if (s) ++s;
    }

    ArrayClear(&List);
    return Result;
}
Example #4
0
static bool_t AllocBlockGroup(block* Block, bool_t Optional)
{
	int n;
	blockgroup* g;
	for (g=ARRAYBEGIN(BlockGroup,blockgroup);g!=ARRAYEND(BlockGroup,blockgroup);++g)
		if (g->Mask && g->Mask != (1<<BLOCKGROUP)-1)
			break;

	if (g==ARRAYEND(BlockGroup,blockgroup))
	{
		if (!Optional)
			return 0;

		for (g=ARRAYBEGIN(BlockGroup,blockgroup);g!=ARRAYEND(BlockGroup,blockgroup);++g)
			if (!g->Mask)
				break;

		if (g==ARRAYEND(BlockGroup,blockgroup))
		{
			if (!ArrayAppend(&BlockGroup,NULL,sizeof(blockgroup),64))
				return 0;
			g=ARRAYEND(BlockGroup,blockgroup)-1;
			g->Mask = 0;
		}

		if (!AllocBlock(BLOCKSIZE*BLOCKGROUP,&g->Block,1,HEAP_ANY))
			return 0;
	}

	for (n=0;n<BLOCKGROUP;++n)
		if (!(g->Mask & (1<<n)))
		{
			g->Mask |= (1<<n);
			Block->Id = ((g-ARRAYBEGIN(BlockGroup,blockgroup))<<8)+(n+1);
			Block->Ptr = g->Block.Ptr + n*BLOCKSIZE;
			return 1;
		}

	return 0;
}
Example #5
0
void String_Done()
{
	MemHandle *i;
	context* p = Context();

	StringFree();

	for (i=ARRAYBEGIN(p->StrModule,MemHandle);i!=ARRAYEND(p->StrModule,MemHandle);++i)
	{
		MemHandleUnlock(*i);
		DmReleaseResource(*i);
	}
	ArrayClear(&p->StrModule);
}
Example #6
0
bool_t StreamGenExts(anynode* AnyNode,array* Exts, fourcc_t ClassFilter, const tchar_t* TypeFilter)
{
	fourcc_t* i;
	array List;
    ArrayInit(Exts);

    if (TypeFilter && !TypeFilter[0])
        TypeFilter = NULL;

	NodeEnumClass(AnyNode,&List,ClassFilter);
	for (i=ARRAYBEGIN(List,fourcc_t);i!=ARRAYEND(List,fourcc_t);++i)
	{
		const tchar_t* s = NodeStr2(AnyNode,*i,NODE_EXTS);
		while (s && s[0])
		{
            size_t n;
            for (n=0;s[n] && s[n]!=';' && s[n]!=':';++n) {}

            if (!TypeFilter || (s[n]==':' && tcschr(TypeFilter,s[n+1])!=NULL))
            {
                while (s[n] && s[n]!=';')
                    ++n;

                if (n)
                {
                    if (!ARRAYEMPTY(*Exts))
                        ArrayAppend(Exts,T(";"),sizeof(tchar_t),64);
                    ArrayAppend(Exts,s,n*sizeof(tchar_t),64);
                }
            }

            s = tcschr(s,';');
            if (s) ++s;
		}
	}
	ArrayClear(&List);

    if (!ARRAYEMPTY(*Exts) && !ArrayAppend(Exts,T("\0"),sizeof(tchar_t),64))
        ArrayClear(Exts);

    return !ARRAYEMPTY(*Exts);
}
Example #7
0
File: node.c Project: Jsoucek/q3ce
static NOINLINE bool_t TmpModule(context* p,int No)
{
	return ARRAYBEGIN(p->NodeModule,nodemodule)[No].Tmp;
}