Example #1
0
static void _Increment_ExpAtoms(LPEXP lpExp, WORD wExpLength)
{
    WORD wCount;
    
    for (wCount = 0; wCount < wExpLength; wCount++)
        switch (EXPFLAGS(lpExp + wCount) & EXPTYPEFLAGS) {
          case EXPATOM:
              KppIncrementAtom(CAR(lpExp + wCount));
              break;
          case EXPVAR:
          {
              VARID idVar = CAR(lpExp + wCount);
              LPVAR lpVar = (LPVAR) KppGetItem(VAR, idVar);
              
              if (lpVar)
              {
                  switch (VARFLAGS(lpVar) & EXPTYPEFLAGS) {
                    case EXPATOM:
                        KppIncrementAtom(VARVALUE(lpVar));
                        break;
                    case EXPLIST:
                        KppIncrementListAtoms(VARVALUE(lpVar));
                        break;
                  }
                  KppReleaseItem(VAR, idVar);
              }
          }
        }
}
Example #2
0
static ATOMID get_atom(char *name)
{
    ATOMID idName = KppAddAtom(name);
    LPEXP lpBinding = KlwGetBinding(idName);
    
    if (lpBinding)
    {
        switch (EXPFLAGS(lpBinding) & EXPTYPEFLAGS) {
          case EXPATOM:
              return CAR(lpBinding);
          case EXPVAR:
            {
                LPVAR lpVar = (LPVAR) KppGetItem(VAR, CAR(lpBinding));
                ATOMID idBinding = NULLID;
                
                if (lpVar)
                {
                    if (VARFLAGS(lpVar) & EXPATOM)
                        idBinding = VARVALUE(lpVar);
                    KppReleaseItem(VAR, CAR(lpBinding));
                }
                return idBinding;
            }
          default:
            return NULLID;
        }
    }
    
    return idName;
}
Example #3
0
inline int varfalsep(satinstance sati,int i) { return (VARVALUE(i) == 0); }
Example #4
0
inline int vartruep(satinstance sati,int i) { return (VARVALUE(i) == 1); }
Example #5
0
inline int varvalue(satinstance sati,int v) { return VARVALUE(v); }
Example #6
0
inline int litfalsep(satinstance sati,int l) { return (VARVALUE(VAR(l)) == 1-VALUE(l)); }
Example #7
0
inline int littruep(satinstance sati,int l) { return (VARVALUE(VAR(l)) == VALUE(l)); }
Example #8
0
inline void litunset(satinstance sati,int l) { VARVALUE(VAR(l)) = UNASS; }
Example #9
0
inline void litsettrue(satinstance sati,int l) { VARVALUE(VAR(l)) = VALUE(l); }
Example #10
0
inline int varunsetp(satinstance sati,int i) { return (VARVALUE(i) == UNASS); }
Example #11
0
LPEXP KlwGetBinding(ATOMID idVarName)
{
    varctx ctx = varstack ? (varctx) GLOBALLOCK(varstack->hCtx) : NULL;

    while (ctx) {
        GLOBALHANDLE hPrev = ctx->hPrev;
        LPEXP lpBinding = NULL;
        
        if (ctx->idCode && ctx->idCode != srclns.idCode ||
            ctx->wType && ctx->wType != srclns.wType)
        {
            GLOBALUNLOCK(ctx->hCtx);
            return NULL;
        }
        
        if (ctx->idVarList)
        {
            VARID idVar;
            LIST_LOOP loop;
            
            kpc_init_loop(ctx->idVarList, &loop);
            
            while (idVar = next(&loop)) {
                LPVAR lpVar = (LPVAR) KppGetItem(VAR, idVar);
                
                if (lpVar)
                {
                    LISTID idBindings = BINDINGS(lpVar);
                    ITEMID idValue = VARVALUE(lpVar);
                    ATOMID idName = VARNAME(lpVar);
                    WORD wFlags = VARFLAGS(lpVar);
                
                    KppReleaseItem(VAR, idVar);
                    if (idName == idVarName)
                    {
                        if (wFlags & EXPBOUND)
                        {
                            EXPFLAGS(&resexp) = wFlags;
                            CAR(&resexp) = idValue;
                            lpBinding = &resexp;
                        }
                        else if (idBindings)
                        {
                            WORD wIndex = KppGetElem(idBindings, 1);
                        
                            if (!wIndex)
                                break;
                            lpBinding = ctx->lpBody + wIndex - 1;
                        }
                        break;
                    }
                }
            }
        }
        
        GLOBALUNLOCK(ctx->hCtx);
            
        if (lpBinding)
            return lpBinding;
            
        if (hPrev)
            ctx = (varctx) GLOBALLOCK(hPrev);
        else
            return NULL;
    }
    
    return NULL;
}