#include <string.h>
#include <stdio.h>
#include "card.h"

#define INOUT_SHIFT 5

static char msg_buf[64];

void cardInfoAddVar(const char* name, unsigned char inout, CardInfo* card)
{   
    unsigned int len;
    
    if (name == NULL || card == NULL || card->varNames == NULL) {
        return;
    }
    
    len = strlen(name);
    
    strcpy(card->varNames + card->vnoff, name);
    card->vnoff += len;
    *(card->varNames + card->vnoff) = 0;
    card->vnoff++;
    
    *(card->varNames + card->vnoff) = inout;
    card->vnoff++;
}

void cardInfoDump(const CardInfo* card, unsigned int numVars)
{
    unsigned int i;
    unsigned int offset = 0;
    unsigned int inout;
    char nameBuf[16];
    char* varPtr;
    
    if (card == NULL || card->varNames == NULL)
    {
        return;
    }

    printf("Card Type: %d\r\n", card->typeId);
    printf("Card Name: %s\r\n", card->name);

    printf("Variable Names:\r\n");
    varPtr = card->varNames;
    for (i = 0; i < numVars; i++)
    {
        strncpy(nameBuf, varPtr + offset, 16);
        printf("\t%s ", nameBuf);
        
        offset += strlen(nameBuf);
        inout = card->varNames[++offset];
        offset++;
        
        switch (inout)
        {
            case CARD_VAR_IN:
                printf("(input)\r\n");
                break;
            case CARD_VAR_OUT:
                printf("(output)\r\n");
                break;
            case CARD_VAR_INOUT:
                printf("(inout)\r\n");
                break;
            default:
                printf("\r\n");
        }
    }
}