|
|
1.1 root 1: ...
2:
3: int OP1 (), ..., OPn ();
4:
5:
6: /* OPERATIONS are numbered APDU_OPx, where each is a unique integer. Further,
7: APDU_UNKNOWN is used as a tag different than any valid operation.
8:
9: ERRORS are numbered ERROR_xyz, where each is a unique integer.
10: ERROR_MISTYPED is used to signal an argument error to an operation.
11: Further, ERROR_UNKNOWN is used as a tag to indicate that the operation
12: succeeded.
13:
14: Finally, note that rox -> rox_args is updated in place by these routines.
15: If the routine returns ERROR_UNKNOWN, then rox_args contains the results
16: of the operation. If the routine returns ERROR_MISTYPED, then rox_args is
17: untouched. Otherwise, if the routine returns any other value, then
18: rox_args contains the parameters of the error which occurred. Obviously,
19: each routine calls ROXFREE prior to setting rox_args to a new value.
20: */
21:
22: static struct dispatch {
23: int ds_operation;
24: IFP ds_vector;
25: } dispatches[] = {
26: APDU_OP1, OP1,
27:
28: ...
29:
30: APDU_OPn, OPn,
31:
32: APDU_UNKNOWN
33: };
34:
35: ...
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.