Exemplo n.º 1
0
int main(int argc, char* argv[])
#endif
{
	FSUNUSED(argc);
	FSUNUSED(argv);

	try {
		vabamorf::speller spl(FSTSTR("et.dct"));

		for (size_t i = 0; words[i]; i++) {
			std::wcout << words[i] << L" -- ";
			if (spl.spell(words[i])) {
				std::wcout << L"OK\n";
			} else {
				std::wcout << L"Vigane, soovitan:";
				std::vector<std::wstring> suggs = spl.suggest(words[i]);
				for (size_t j = 0; j < suggs.size(); j++) {
					std::wcout << L" " << suggs[j];
				}
				std::wcout << L"\n";
			}
		}

	} catch (const vabamorf::exception &) {
		std::wcerr << L"Viga!\n";
	}
	return 0;
}
Exemplo n.º 2
0
int CFSMutex::Lock(ULONG lTimeout)
{
#if defined (WIN32)
	FSUNUSED(lTimeout);
	::EnterCriticalSection(&m_hMutex);
#elif defined (UNIX)
	FSUNUSED(lTimeout);
	pthread_mutex_lock(&m_hMutex); 
#elif defined (MAC)
	MPEnterCriticalRegion(m_hMutex, (lTimeout == -1 ? kDurationForever : lTimeout));
#endif
	return 0;
}
Exemplo n.º 3
0
int FSxGOTAB::Compare(
    const FSxGOTAB *e2,
    const int sortOrder
    )
    {
    FSUNUSED(sortOrder);
	int v;
    
    v = FSxSTRCMP( a_tylp, e2->a_tylp);
    if (v==0)
        v = FSxSTRLEN(e2->meta) - FSxSTRLEN(meta); // pikem meta on eespool
    if (v==0)
        v = FSxSTRCMP( meta, e2->meta);
    if (v==0)
        {  // muutumatu silpide arvuga mallid ettepoole
        if (min_silpe == max_silpe)
            {
            if (e2->min_silpe == e2->max_silpe)
                v = min_silpe - e2->min_silpe; // kahest muutumatust v�iksem ettepoole
            else
                v = -1;  // e1 ettepoole
            }
        else if (e2->min_silpe == e2->max_silpe)
            v = 1;
        else
            v = min_silpe - e2->min_silpe;
        }
    if (v==0)
        v = max_silpe - e2->max_silpe;
    if (v==0)
        v = FSxSTRCMP( tyypsona, e2->tyypsona);
    return v;
    }
Exemplo n.º 4
0
int FSxGOTAB::Compare(
    const FSxCHAR *key,
    const int sortOrder
    )
    {
	FSUNUSED(sortOrder);
    return FSxSTRCMP(a_tylp, key);
    }
Exemplo n.º 5
0
int CFSThread::SetPriority(int iPriority)
{
	if (!m_hThread) {
		return -1;
	}
#if defined (WINRT)
	// Unimplemented
	FSUNUSED(iPriority);
#elif defined (WIN32)
	::SetThreadPriority(m_hThread, iPriority);
#elif defined (UNIX)
	// Unimplemented
	FSUNUSED(iPriority);
#elif defined (MAC)
	MPSetTaskWeight(m_hThread, iPriority);
#endif
	return 0;
}
Exemplo n.º 6
0
int CFSThread::Create(void *pData, long lFlags)
{
	m_pData=pData;
#if defined (WIN32CE)
	m_hThread=CreateThread(NULL, 0, CFSThreadFunc, this, lFlags, &m_lThreadID);
	return (m_hThread==0);
#elif defined (WINRT)
	// Unimplemented
	FSUNUSED(pData);
	FSUNUSED(lFlags);
	return -1;
#elif defined (WIN32)
	m_hThread=(HANDLE)_beginthreadex(NULL, 0, CFSThreadFunc, this, lFlags, &m_lThreadID);
	return (m_hThread==0);
#elif defined (UNIX)
	FSUNUSED(lFlags);
	return pthread_create(&m_hThread, 0, CFSThreadFunc, this);
#elif defined (MAC)
	FSUNUSED(lFlags);
	return MPCreateTask(CFSThreadFunc, this, 512*1024, m_WaitQueue, 0, 0, 0,&m_hThread);
#endif
}
Exemplo n.º 7
0
    int cCACHE::CacheOpen( 
        const int _DBSIZE_,
	    const int nBlokki // see CACHEi versioon ei kasua seda muutuja, selleks et oleks teistega kompatiibel
        )
	    {
		FSUNUSED(nBlokki);
        assert( (_DBSIZE_ % 256)==0 ); // peab olema n*256

        xptr=NULL;
        dbuf=NULL;
        DBSIZE=_DBSIZE_;
        dbuf = (struct STRUCT_CASH *)(malloc(sizeof(CASH) + DBSIZE)); // see malloc on OK
	    if(dbuf==NULL)
		    {
            assert( ClassInvariant() );
		    return 1;
		    }
	    dbuf->index = VABA;
	    dbuf->buffer = (unsigned char *)(dbuf+1);   // MIS KURAT SEE VEEL ON?
                                                    // ahaa, vt �lal m�lureserveerimist
        assert( ClassInvariant() );
	    return 0;
	    }
Exemplo n.º 8
0
bool ETMRFAS::GeneSTV(
    MRFTULEMUSED   *pValja,
    const FSXSTRING *gPrf,        // käib tüve ette
    const FSXSTRING *gSuffiks,    // suffiks morf analüüsija väljundist
    //const FSXSTRING *gSufSl,      // suffiksi son liik morf anal väljundist
    const FSXSTRING *sl,          // sõnaliigid, millesse kuuluvaid sonu tahetakse
    const FSXSTRING *geneVormid,  // genetavate vormide loend
    const int algv_lopp,   // 0, -ma voi -d
    const int algv_vorm,   // sg_g[0], sg_n[0], ma voi pl_n[0]
    const FSXSTRING *pGeneKigi)
{
    FSUNUSED(sl);
    int sufNr;  // sufiksi nr sufiksite tabelis
    int i, j;
    FSXSTRING tmpSuf, tmpSuf1, tmpSuf2;
    FSXSTRING *sonaLiigid;
    FSxCHAR sl1;
    //FSXSTRING *sssl;
    int nSonaLiiki;
    FSXSTRING gTyviUus;
    //FSXSTRING gene_t2;
    FSXSTRING styvi;
    FSXSTRING skronksutyvi;
    int adhocnu = 0; // ad hoc nud, tud, dud jaoks

    if (gSuffiks->GetLength() >= SUFLEN)
        return true; //* ei saa olla sufiks *

    tmpSuf = (const FSxCHAR *)*gSuffiks;
    //* otsime välja sufiksi indeksi sufiksite tabelist *
    sufNr=suffnr((const FSxCHAR *)tmpSuf);
    if (sufNr == -1)
    {
        //* sellist sufiksit pole olemas, *
        //* see juhtub nt siis, kui suf loendis on pikem sufiks, *
        //* aga lingv ilu pa'rast na'idat. teda lu'hemana *
        //* nt =umuslik asemel =muslik *
        //* mingi kombineerimine *
        int mitu_maha = gPrf->GetLength();

        if (mitu_maha > 3)
            mitu_maha = 3;
        tmpSuf1 = gPrf->Right(mitu_maha);
        tmpSuf1 += (const FSxCHAR *)*gSuffiks;
        for (i=0; i < mitu_maha; i++)
        {
            tmpSuf = tmpSuf1.Mid(i);
            if ((sufNr=suffnr((const FSxCHAR *)tmpSuf)) > -1)
                break; //* suffiks käes *
        }
        if (i == mitu_maha) // tavaliselt seda ei saa olla, et ei leia sobivat suffiksit
        {
            if(*gSuffiks == FSxSTR("nud") || *gSuffiks == FSxSTR("tud") || *gSuffiks == FSxSTR("dud"))
            {   // ... aga vahel ikka saab: leksikonis on ainult S nu, tu ja du, mitte A nud, tud ja dud...
                tmpSuf = gSuffiks->Left(2);
                sufNr=suffnr((const FSxCHAR *)tmpSuf);
                adhocnu = 1;  // lipp püsti
            }
            else
                return true;
        }
        tmpSuf1 = tmpSuf.Mid((int)(sufix[sufNr].mitutht));
    }
    else
        tmpSuf1 = tmpSuf;

    sonaLiigid = sonaliik[(unsigned char) sufix[sufNr].ssl];
    nSonaLiiki = sonaLiigid->GetLength();

    for(i=0; i < nSonaLiiki; i++)  // vt sufiksi homonüüme (s.h. lik ja l<ik on homonüümid)
    {
        sl1 = (*sonaLiigid)[i];
        if ( sl->Find(sl1) == -1) // see sõnaliik pole siin lubatud
            if (adhocnu == 1); // ... aga teatud juhtudel ikkagi võiks
            else if (sl->Find((FSxCHAR)'A') != -1 &&      // tahetakse A, aga sufiks on leksikonis S
                     (tmpSuf1 == FSxSTR("tu") ||
                      tmpSuf1.Right(2) == FSxSTR("ke") ||
                      tmpSuf1.Right(4) == FSxSTR("kene"))); // ... aga teatud juhtudel ikkagi võiks
            else
                continue;
        // vaja kontrollida, kas on ikka vajaliku algvormi tüvi
        gTyviUus = tmpSuf1;
        if(OtsiTyvi(&(sufix[sufNr].suftyinf[i].idx),
                    algv_lopp, algv_vorm, &gTyviUus)==false)
            continue; //polnud sobiv tüvi
        if(gTyviUus != tmpSuf1) // pole õige algvormi tüvi
            continue;
        if(sl1==W_SL) // nagunii on ka S liigiline sõna leitud
            continue;
        if(sl1==(FSxCHAR)'B' && sl->Find((FSxCHAR)'A') >=0)
            sl1 = 'A'; // kah õige sõnaliik: tahad A-d saad B, aga ütleme, et said A

        MKT1c *rec1; // siia pannakse gTyvi (nt piksel) lgNr ja tyMuut
        MKTc  *rec;  // {lgNr, tyMuut} massiiv, mis on seotud ühe sõnaga; nt tyvedele piksel, piksli, piksle
        int muutumatu; // muutumatu tüveosa (nt piks)

        tmpSuf2 = tmpSuf1;
        if((rec1=tyveMuutused.Get(sufix[sufNr].suftyinf[i].idx.tab_idx,sufix[sufNr].suftyinf[i].idx.blk_idx))==NULL)
        {
            return false;
        }
        // leia muutumatu tüveosa
        if((muutumatu=tmpSuf1.GetLength()-rec1->tyMuut.GetLength()) < 0)
        {
            return false;
        }
        if((rec=tyveMuutused[sufix[sufNr].suftyinf[i].idx.tab_idx])==NULL)
        {
            return false;
        }
        int tmpsufnr, jj, jjnSonaLiiki;
        FSXSTRING vormityvi;
        FSXSTRING tyvi, utyvi;
        for (j=0; j < rec->n; j++) // vt selle sufiksi paradigma kõiki "tüvesid"
        {

            utyvi = gPrf->Right(sufix[sufNr].mitutht); // tavaliselt "", aga umuslik puhul u
            tyvi = tmpSuf1.Left(muutumatu) + rec->mkt1c[j].tyMuut;
            utyvi += tyvi;
            tmpsufnr=suffnr((const FSxCHAR *)utyvi);
            FSXSTRING *jjsonaLiigid = sonaliik[(unsigned char) sufix[tmpsufnr].ssl];
            jjnSonaLiiki = jjsonaLiigid->GetLength();
            for (jj=0; jj < jjnSonaLiiki; jj++) // vt "tüve" kõiki homonüüme
            {
                if ((*sonaliik[(unsigned char) sufix[tmpsufnr].ssl])[jj] != sl1)
                    continue; // pole sama sõnaliik ...
                //if (sufix[sufNr].suftyinf[i].idx.tab_idx != sufix[tmpsufnr].suftyinf[jj].idx.tab_idx)
                //continue; // pole sama paradigma
                // kole asi üksikute juhtumite filtreerimiseks, nt l<ik ja lik eristamiseks
                // tundl<ik+0 vs tundlik+el
                MKT1c *rec2 = tyveMuutused.Get(sufix[tmpsufnr].suftyinf[jj].idx.tab_idx,sufix[tmpsufnr].suftyinf[jj].idx.blk_idx);
                if (rec->mkt1c[j].lgNr != rec2->lgNr)
                    continue; // homonüümne tüvi (kui hääldust ei arvesta) ja samas paradigmas, aga tegelt sobimatu
                LisaKdptr(sufix[tmpsufnr].suftyinf, &vormityvi, &tyvi, jj);
                if (adhocnu == 1) // nu -> nud
                {
                    int sgn_koht;
                    if ((sgn_koht=geneVormid->Find(FSxSTR("sg n"))) != -1)
                    {
                        FSXSTRING uustyvi = *gPrf;
                        uustyvi += tyvi;
                        uustyvi += FSxSTR("d");
                        pValja->Add(
                            (const FSxCHAR *) uustyvi,
                            FSxSTR(""),
                            (const FSxCHAR *)*pGeneKigi,
                            FSxSTR("A"),
                            FSxSTR("sg n, "));
                        FSXSTRING uusgeneVormid = geneVormid->Mid(0, sgn_koht);
                        uusgeneVormid += geneVormid->Mid(sgn_koht+5);
                        if (GeneL(pValja, gPrf, &vormityvi, (const FSxCHAR) 'A', rec->mkt1c[j].lgNr,
                                  &uusgeneVormid, pGeneKigi)==false)
                        {
                            return false;
                        }
                    }
                    else
                    {
                        if (GeneL(pValja, gPrf, &vormityvi, (const FSxCHAR) 'A', rec->mkt1c[j].lgNr,
                                  geneVormid, pGeneKigi)==false)
                        {
                            return false;
                        }
                    }
                }
                else

                {
                    if(GeneL(pValja, gPrf, &vormityvi, (const FSxCHAR) sl1, rec->mkt1c[j].lgNr,
                             geneVormid, pGeneKigi)==false)
                    {
                        return false;
                    }
                }
            }
        }
    }
    return true;
}
Exemplo n.º 9
0
void MRF2YH2MRF::FsTags2YmmTags(
	const FSXSTRING* p_sona,
	MRFTUL* p_mTul,
	FSXSTRING& yhmarg1,
	FSXSTRING& yhmarg2,
	FSXSTRING& yhmarg3	
	) const
    {
	FSUNUSED(yhmarg3);
    MRF2YH_LOEND* p_rec;
    const FSWCHAR* p_yTag;

    // punktuatsioon --> ühestajamärgendiks
    if(p_mTul->sl==FSWSTR("Z")) // sõnaliik oli punktuatsioon
        {
        p_rec=punktuatsioon.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)        // oli meie punktuatsiooni loendis
            {            
            //p_mTul->mrg1st=p_rec->p_yhTag;
			yhmarg1=p_rec->p_yhTag;
            return;
            }
        // p_rec==NULL -- polnud loendis...
		else // vt kas esimene m�rk oli loendis 
			{
			FSXSTRING algustht = p_sona->Left(1);
			p_rec=punktuatsioon.Get((FSWCHAR*)(const FSWCHAR*)algustht);
			if(p_rec!= NULL)        // oli meie punktuatsiooni loendis
				{            
				//p_mTul->mrg1st=p_rec->p_yhTag;
				yhmarg1=p_rec->p_yhTag;
				return;
				}
			}
        // p_rec==NULL -- polnud loendis...
        //p_mTul->mrg1st=FSWSTR("WIE");   //...vaikimisi see
        //p_mTul->mrg1st=FSWSTR("X");   //...vaikimisi see
		yhmarg1=FSWSTR("X");   //...vaikimisi see
        return;
        }
    // sõna --> ühestajamärgendiks

    // if(sonaliik != "H")
    if(p_mTul->sl[0]!=(FSWCHAR)'H')
    {
        p_rec=sona.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)    // oli meie sõnade loendis
            {
            //p_mTul->mrg1st=p_rec->p_yhTag;
            yhmarg1=p_rec->p_yhTag;
            return;
            }
    }
    // endif

    // sõnaliik + sõna --> ühestajamärgendiks
    // DXIG -> RR RR II ASG t��tlus
    if(muut1.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'muut1' loendis
        {
        p_rec=rr.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)    // 
            {            
            //p_mTul->mrg1st=p_rec->p_yhTag;
			yhmarg1=p_rec->p_yhTag;
            return;
            }
        // p_rec==NULL -- polnud loendis...
		if((p_rec=noomTags.Get((FSWCHAR*)(const FSWCHAR*)(p_mTul->sl)))!=NULL)
			{                              // märgendi 1. pool
			//p_mTul->mrg1st=p_rec->p_yhTag; // tuleneb sõnaliigist
			yhmarg1=p_rec->p_yhTag;
			return;
			}

		//p_mTul->mrg1st=FSWSTR("RR");    //...vaikimisi see VALE!!!!
        // return;
        }
    // sõnaliik + sõnalõpp --> ühestajamärgendiks
    // nud-tud-dud lõpulised V, A -> VMAZ (partitsiip)
    if(verb_v_adj.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'verb_v_adj' loendis
        {
        // kas sõna "[ntd]ud" lõpuline
        if(TaheHulgad::OnLopus(p_sona, FSWSTR("nud"))==true ||
           TaheHulgad::OnLopus(p_sona, FSWSTR("tud"))==true ||
           TaheHulgad::OnLopus(p_sona, FSWSTR("dud"))==true )
            {
            //p_mTul->mrg1st=FSWSTR("VMAZ");
			yhmarg1=FSWSTR("VMAZ");
            return; //??
            }
        //return; //??
        }
    // sõnaliik + sõnalõpp --> ühestajamärgendiks
    // nud-tud lõpulised S -> VMAZ (partitsiip)
    //   if(p_mTul->sl[0] == (FSWCHAR)'S') 
    //       {
    //       // kas sõna "[nt]ud" lõpuline
    //      if(TaheHulgad::OnLopus(p_sona, FSWSTR("nud"))==true ||
    //          TaheHulgad::OnLopus(p_sona, FSWSTR("tud"))==true )
    //          {
    //          p_mTul->mrg1st=FSWSTR("VMAZ");
    //          return; //??
    //          }
    //      // return; //??
    //      }
    // yks ja teine -> YKS* ja TEINE*
    if(yks_v_teine_sonaliik.Find(p_mTul->sl[0]) >= 0) // sõnaliik oli 'yks_v_teine_sonaliik' loendis
        {
        //p_rec=yksTeine.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        p_rec=yksTeine.Get((FSWCHAR*)(const FSWCHAR*)p_mTul->tyvi);
        if(p_rec!= NULL)        // oli  loendis
            {                               // märgendi 1. pool
            //p_mTul->mrg1st=p_rec->p_yhTag;  // tuleneb sõnast
			yhmarg1=p_rec->p_yhTag;
            p_yTag=Kaane(&(p_mTul->vormid));
            if(p_yTag==NULL) // seda ei tohiks olla
                {
                //p_mTul->mrg1st=FSWSTR("PSX"); // TUNDMATU_P_YM
				yhmarg1=FSWSTR("PSX"); // TUNDMATU_P_YM
                return;
                }
            //p_mTul->mrg1st +=p_yTag;        // märgendi 2. pool,
			yhmarg1 += p_yTag;        // märgendi 2. pool,
            return;                         // tuleneb käändevormist
            }
        // p_rec==NULL -- polnud loendis, ei tee midagi
        }
    //  P -> PP1 PP2 PP3 juhtumi tõõtlus
    if(p_mTul->sl[0] == (FSWCHAR)'P')
        {
        //p_rec=ase.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
		p_rec=ase.Get((FSWCHAR*)(const FSWCHAR*)p_mTul->tyvi);
        if(p_rec!= NULL)     
            {                               // märgendi 1. pool
            //p_mTul->mrg1st=p_rec->p_yhTag;  // tuleneb sõnast
            yhmarg1=p_rec->p_yhTag;
			p_yTag=Kaane(&(p_mTul->vormid));
            if(p_yTag==NULL) // seda ei tohiks olla
                {
                //p_mTul->mrg1st=FSWSTR("PSX"); // TUNDMATU_P_YM
				yhmarg1=FSWSTR("PSX"); // TUNDMATU_P_YM
                return;                       
                }                           // märgendi 2. pool,
            //p_mTul->mrg1st +=  p_yTag;      // tuleneb käädevormist
			yhmarg1 +=  p_yTag;      // tuleneb käädevormist
            if(*p_sona == FSWSTR("tema") && yhmarg1==FSWSTR("PP3SG")) // väga kole!!!
                {
                // mõhh???
                //p_mTul->mrg1st=FSWSTR("M");
				//yhmarg1=FSWSTR("PP3SN"); HJK 23.11.2004 prooviks ikka ühestada...
                return;
                }
            return;
            }
        // p_rec==NULL -- polnud loendis, ei tee midagi
        }
    // ACUSHNOPY -> A, A, A, NC, NP, MC, MO, P, Y töötlus
    if((p_rec=noomTags.Get((FSWCHAR*)(const FSWCHAR*)(p_mTul->sl)))!=NULL)
        {                              // märgendi 1. pool
        //p_mTul->mrg1st=p_rec->p_yhTag; // tuleneb sõnaliigist
		yhmarg1=p_rec->p_yhTag; // tuleneb sõnaliigist
        p_yTag=Kaane(&(p_mTul->vormid));
        if(p_yTag==NULL)
            {
            if(p_mTul->sl==FSWSTR("A"))
                {
                //
                MRF2YH_LOEND* p_rec2;
                if((p_rec2=asxrr.Get((FSWCHAR*)(const FSWCHAR*)
                                                (p_mTul->sl)))!=NULL)
                    {
                    //p_mTul->mrg1st=p_rec2->p_yhTag; // ASXRR asemele
					yhmarg1=p_rec2->p_yhTag; // ASXRR asemele
                    return;
                    }
                //p_mTul->mrg1st += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
				yhmarg1 += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
                return;                         // sappa juurde
                }
            if(TaheHulgad::OnLopus(&yhmarg1, FSWSTR("NP"))==true)
                {
                // et ei tekiks NPSX keerame ...NP --> ...NC
                //p_mTul->mrg1st.Delete(p_mTul->mrg1st.GetLength()-1);
                if(p_mTul->mrg1st.GetLength()>0) //TV071109
				    yhmarg1.Delete(p_mTul->mrg1st.GetLength()-1);
                //p_mTul->mrg1st += FSWSTR("C");
				yhmarg1 += FSWSTR("C");
                }
            //p_mTul->mrg1st += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
			yhmarg1 += FSWSTR("SX"); // MUUTUMATU_NOOMENI_TUNNUS
            return;                         // sappa juurde
            }
        //p_mTul->mrg1st += p_yTag; // märgendi 2. pool
		yhmarg1 += p_yTag; // märgendi 2. pool
        return;                   // tulenb käändevormist        
        }
    // J -> CS ja CC töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'J')
        {
        p_rec=sidec.Get((FSWCHAR*)(const FSWCHAR*)*p_sona);
        if(p_rec!= NULL)     
            {                               
            //p_mTul->mrg1st=p_rec->p_yhTag;  
			yhmarg1=p_rec->p_yhTag; 
            return;
            }
        //p_mTul->mrg1st=FSWSTR("CS");
		yhmarg1=FSWSTR("CS");
        return;
        }
    // K -> SP ja ST töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'K')
        {
        // TODO::
        Kaas2Yh(p_sona, yhmarg1, yhmarg2);
        //       if(p_yTag==NULL) // seda ei tohiks olla
        //           {
        //           p_mTul->mrg1st=FSWSTR("ST");
        //           return;
        //           }
        //p_mTul->mrg1st=p_yTag;
        return;
        }
    // V -> VM töötlus
    if(p_mTul->sl[0] == (FSWCHAR)'V')
        {
        //p_mTul->mrg1st=FSWSTR("VM"); // VERBI_YM
		yhmarg1=FSWSTR("VM"); // VERBI_YM
        p_yTag=Poore(&(p_mTul->vormid));
        if(p_yTag==NULL)
            {
            //p_mTul->mrg1st += FSWSTR("S"); // MUUTUMATU_VERBI_TUNNUS
			yhmarg1 += FSWSTR("S"); // MUUTUMATU_VERBI_TUNNUS
            return;
            }
        if(sid_variandid==p_yTag)
            {
            // siin toimub veel midagi segast
            //p_mTul->mrg1st += FSWSTR("3"); // YM_MA_VAHE
			yhmarg2 = yhmarg1;
			yhmarg1 += FSWSTR("2"); // YM_MA_VAHE
			yhmarg2 += FSWSTR("3"); // YM_MA_VAHE
            return;
            }
        //p_mTul->mrg1st += p_yTag;
		yhmarg1 += p_yTag;
        return;
        }
    assert(false);
    //p_mTul->mrg1st=FSWSTR("X"); // TUNDMATU_LOOM
	yhmarg1=FSWSTR("X"); // TUNDMATU_LOOM
    }