|
|
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.