#include <stdio.h>
#include <winscard.h>
#include <stdlib.h>
#include <stdarg.h>
#include "commands.h"
int myprintf(const char* fmt , ...) {
va_list va;
va_start(va,fmt);
vprintf(fmt,va);
if( fp != NULL)
vfprintf(fp,fmt,va);
va_end(va);
}
void printit(char cmd[] ) {
int i;
int l;
myprintf("%s",cmd);
l=strlen(cmd);
for(i=0;i<60-l;i++)
myprintf(" ");
fflush(stdout);
}
void GetCommand(unsigned char class , unsigned char ins , unsigned char p1,unsigned char p2 ,unsigned char size , unsigned char * data , unsigned char *buffer,int length) {
buffer[0]=class;
buffer[1]=ins ;
buffer[2]=p1;
buffer[3]=p2;
buffer[4]=size;
/*myprintf("len = %0x \n",length); */
if( length > 5 )
memcpy(buffer+5,data,size);
}
int checkResult(int rv , unsigned char r[300],int len,int neg) {
int result,i;
if( rv == SCARD_S_SUCCESS ) {
// myprintf("SCARD_S_SUCCESS\n");
result = (r[len-2] == 0x90 || r[len-2] == 0x61 || r[len-2] == 0x62 || r[len-2] == 0x63 );
// myprintf("r[len-2] = %0x result = %d neg = %d ",r[len-2] , result,neg);
return (neg == result);
}
else if ( rv == SCARD_E_INVALID_HANDLE ) {
// myprintf("SCARD_E_INVALID_HANDLE \n");
return !neg & 1;
}
else if ( rv == SCARD_E_NOT_TRANSACTED ) {
// myprintf ( " SCARD_E_NOT_TRANSACTED \n");
return !neg & 1;
}
else if ( rv == SCARD_E_READER_UNAVAILABLE ) {
// myprintf("SCARD_E_READER_UNAVAILABLE \n");
return !neg & 1;
}
else if ( rv == SCARD_E_PROTO_MISMATCH ) {
// myprintf(" SCARD_E_PROTO_MISMATCH \n");
return !neg & 1;
}
else if ( rv == SCARD_E_INVALID_VALUE ) {
// myprintf(" SCARD_E_INVALID_VALUE \n");
return !neg & 1;
}
else if ( rv == SCARD_W_RESET_CARD ) {
// myprintf(" SCARD_E_RESET_CARD \n");
return !neg & 1;
}
else if ( rv == SCARD_W_REMOVED_CARD ) {
// myprintf(" SCARD_E_REMOVED_CARD \n");
return !neg & 1;
}
return !neg & 1;
}
syntax highlighted by Code2HTML, v. 0.9.1