I've compiled and reviewed your code and as you've indicated no errors or possible syntactically or semantically suspicious code appear to be present.
Therefore, the PC-Lint seems to be the issue here, with what settings are you currently running the PC-Lint code analysis?
Under its current settings, PC-Lint does not appear to fully check and analyze any previous
typedef enum declarations, instead choosing to ignore them and thus being unable to discern any type declarations which utilize these previously declared
typedef enum types.
Therefore, as the warning/error messages from PC-Lint indicated issues with any declarations which utilize previous valid
typedef enums:
Reference:
PC-Lint Messages
Error 129:
129 declaration expected, identifier 'Symbol' ignored -- In a
context in which a declaration was expected an identifier
was found. Moreover, the identifier was not followed by
'(' or a '['
Error 19:
19 Useless Declaration -- A type appeared by itself without
an associated variable, and the type was not a struct and
not a union and not an enum. A double semi-colon can
cause this as in:
int x;;
Error 49:
49 Expected a type -- Only types are allowed within
prototypes. A prototype is a function declaration with a
sequence of types within parentheses. The processor is at
a state where it has detected at least one type within
parentheses and so is expecting more types or a closing
right parenthesis.
Reference:
PC-lint/FlexeLint Strong Type Checking
Although you may struggle hard to produce meaningful typedef names for all your various int options the compiler will generally ignore these names for type-checking purposes. Lint options -strong and -index will enable typedef-based type checking. For a detailed discussion, see Strong Type Checking
Reference:
FlexeLint: A Modern Static Analyzer for C and C++
Strong Type Checking
Fully customizable strong type checking using typedefs. Strong checking can be enabled on all or only specified typedefs. Typedef hierarchies can be created and printed. Dimensional Analysis allows establishing relationships between typedefs that involve division or multiplication of types to create new types.
There appears to be several similar issues posed throughout the Internet, concerning the way PC-Lint handles
typedef enum declarations and their later use in declarations, particularly in function prototypes parameter/argument lists. You might try modifying the current settings to either increase the depth of analysis or disable these specific code checks for
typedef enum declarations and use.
You might also try breaking these
typedef enum declarations into two parts, first declare the
enum and then declare the
typedef using the previous declared
enum, however that would certainly be a bit redundant. It would probably be more prudent to simply disable these particular messages.
I also came across the following PDF which might be of interest:
How to wield PC Lint
BigDog