summaryrefslogtreecommitdiff
path: root/lib/visual_state_api/src/SMPExplA.c
blob: 54e6ad0e6a650f95ec7c54354fd8e1961d7e37a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * Type:        Source Code File
 * 
 * Id:          SMPExplA.c
 *
 * Function:    Contains the SMP_ExplAbs SEM Library Expert version 4 
 *              function.
 *
 * Portability: ANSI-C Compiler.
 *
 * Copyright (c) 1999-2006 IAR Systems. All rights reserved.
 */

/*
 * Version   ! Date   ! Status ! Changes
 *----------------------------------------------------------------------------
 * 4.0.0.1   ! 101298 ! Closed ! -
 * 4.0.4     ! 010799 ! Closed ! Minor update, there might be no changes to this particular file.
 */

#include "SEMLibE.h"


unsigned char SMP_ExplAbs (SEM_CONTEXT VS_TQ_CONTEXT *Context, unsigned char IdentType, 
  SEM_EXPLANATION_TYPE IdentNo, char VS_TQ_RULEBASE **Text)
{
  unsigned long Pos;

  if (!Context)
    return (SES_NOT_LOADED);
  switch (IdentType)
  {
    case EVENT_TYPE :
      if (!Context->pEEIPos)
        return (SES_TYPE_ERR);
      if (Context->nNofEvents <= (SEM_EVENT_TYPE)IdentNo)
        return (SES_RANGE_ERR);
      Pos = Context->pEEIPos[IdentNo];
      break;
    case STATE_TYPE :
      if (!Context->pSEIPos)
        return (SES_TYPE_ERR);
      if (Context->nNofStates <= (SEM_STATE_TYPE)IdentNo)
        return (SES_RANGE_ERR);
      Pos = Context->pSEIPos[IdentNo];
      break;
    case ACTION_TYPE :
      if (!Context->pAEIPos)
        return (SES_TYPE_ERR);
      if (Context->nNofActionFunctions <= (SEM_ACTION_FUNCTION_TYPE)IdentNo)
        return (SES_RANGE_ERR);
      Pos = Context->pAEIPos[IdentNo];
      break;
    default :
      return (SES_TYPE_ERR);
  }
  if (Context->pVSFile)
  {
#ifndef SE_EXPERTDLL
    return (SES_NOT_LOADED);
#else
    return (SES_NOT_COMPATIBLE);
#endif
  }
  else
    *Text = (char VS_TQ_RULEBASE *)((char VS_TQ_RULEBASE *)Context->pVSData + Pos);
  return (SES_OKAY);
}