コード例 #1
0
int traiteMot(char *M)
{
int Err=0;
PFC tS;
    if (sigsetjmp(ENV_INT,1)) {
       interInfos("traiteMot",M);
       return 1;
    }
    if (!ITASK) SigOn=1;
    /*  printf("traiteMot <%s> iTS=%d\n",M,iTS); */
    tS = getTrSuite();
    if (tS != (PFC)NULL) tS(M);
    else
       if (! execLib(M))  { Err=1; messErr2(10,M); }
    if (ITASK) exit(0); /* non interpretation in task ! */
    if (!ITASK) SigOn=0;
    return Err;
}
コード例 #2
0
int execLib(char *C)
{
int i;
void * A;
short T=0;
    InExec = C;
    /* D_Trace(C); pas pour le moment */
    if (sigsetjmp(ENV_INT,1)) {
       interInfos("execLib",C);
       return 1;
    }
    if (InstallOn) {
      switch (InstallOn) {
        case 1 : /* lib first */
          A=libByName(C);
          if (A==VIDE) {
             A=fctByName(C);
             if (A!=VIDE) T=2;
          } else T=1;
          break;
        case 2 : /* user functions first */
          A=fctByName(C);
          if (A==VIDE) {
             A=libByName(C);
             if (A!=VIDE) T=1;
          } else T=2;
          break;
        case 3 : /* variables only */
          A=varByName(C);
          if (A!=VIDE) T=3;
          break;
        case 8 : /* df_init */
          A=fctByName(C);
          updDynFct(A,0);
          break;
        case 9 : /* df_start */
          A=fctByName(C);
          updDynFct(A,1);
          break;
        case 10 : /* df_stop */
          A=fctByName(C);
          updDynFct(A,2);
          break;
        default :
          break;
      }
      _MODIF_FCT_INST_(A);
      _MODIF_FCT_TYP_(T);
      InstallOn=0;
      return 1;
    }
    if ((VARS==2) && (IF_execVar(C))) return 1; /* VARS UP */
    if (IF_execFct(C)) return 1;
    for (i=0;i<NBFonc;i++) {
        /* printf("execLib : teste %s !\n", Fonctions[i].nam); */
        if (strcmp(C,Fonctions[i].nam) == 0) {
           switch (Fonctions[i].typ) {
            case 1:
              if (fctEnCours) Fonctions[i].fct();
              else messErr(13);
              break;
            case 2:
              if (fctEnCours) messErr(25);
              else Fonctions[i].fct();
              break;
            case 3: /* usr fct */
              break;
            default: /* typ = 0 */
              if (fctEnCours) {
                 if (strcmp(C,":") == 0) messErr(15);
                 else {
                    if (strcmp(C,"\"") == 0)  Fonctions[i].fct();
                    else makeFct(T_LIB,(void*)Fonctions[i].fct);
                 }
              } else Fonctions[i].fct();
              break;
           }
           return 1;
        }
    }
    if ((VARS==1) && (IF_execVar(C))) return 1; /* VARS DOWN */
    /* printf("execLib : appel putVal(%s)\n",C); */
    return(putVal(C));
}