Logo Search packages:      
Sourcecode: pcsc-lite version File versions

installifd.c

/*
 * This is a reader installer for pcsc-lite.
 *
 * MUSCLE SmartCard Development ( http://www.linuxnet.com )
 *
 * Copyright (C) 2000-2003
 *  David Corcoran <corcoran@linuxnet.com>
 *  Ludovic Rousseau <ludovic.rousseau@free.fr>
 *
 * $Id: installifd.c,v 1.11 2004/08/10 20:04:18 rousseau Exp $
 */

#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <errno.h>

#include "PCSC/wintypes.h"
#include "PCSC/winscard.h"

#ifndef PCSCLITE_READER_CONFIG
#define PCSCLITE_READER_CONFIG "/etc/reader.conf"
#endif

int main(int argc, char *argv[])
{

      struct stat statbuf;
      char lpcReader[MAX_READERNAME];
      char lpcLibrary[FILENAME_MAX];
      char *lpcPortID = NULL;
      int iPort;
      int iStat;
      FILE *fd;

      printf("Please enter a friendly name for your reader (%d char max)\n",
            (int)sizeof(lpcReader));
      printf("-----> ");

      fgets(lpcReader, sizeof(lpcReader), stdin);

      /* remove trailing \n */
      lpcReader[strlen(lpcReader)-1] = '\0';

  retrylib:

      printf("Please enter the full path of the readers driver (%d char max)\n",
            (int)sizeof(lpcLibrary));
      printf("Example: %s/librdr_generic.so\n", PCSCLITE_HP_DROPDIR);
      printf("-----> ");

      fgets(lpcLibrary, sizeof(lpcLibrary), stdin);

      /* remove trailing \n */
      lpcLibrary[strlen(lpcLibrary)-1] = '\0';

      iStat = stat(lpcLibrary, &statbuf);

      if (iStat != 0)
      {
            /*
             * Library does not exist 
             */
            printf("Library path %s does not exist.\n\n", lpcLibrary);
            goto retrylib;
      }

      printf("Please select the I/O port from the list below:\n");
      printf("------------------------------------------------\n");
      printf("1) COM1 (Serial Port 1)\n");
      printf("2) COM2 (Serial Port 2)\n");
      printf("3) COM3 (Serial Port 3)\n");
      printf("4) COM4 (Serial Port 4)\n");
      printf("5) LPT1 (Parallel Port 1)\n");
      printf("6) USR1 (Sym Link Defined)\n");
      printf("------------------------------------------------\n");

  retryport:

      printf("\n");
      printf("Enter number (1-6): ");

      if ((scanf("%d", &iPort) != 1) || iPort < 1 || iPort > 6)
      {
            printf("Invalid input (%d) please choose (1-5)\n", iPort);
            /* eat the \n */
            getchar();
            goto retryport;
      }

      switch (iPort)
      {
            case 1:
                  lpcPortID = "0x0103F8";
                  break;
            case 2:
                  lpcPortID = "0x0102F8";
                  break;
            case 3:
                  lpcPortID = "0x0103E8";
                  break;
            case 4:
                  lpcPortID = "0x0102E8";
                  break;
            case 5:
                  lpcPortID = "0x020378";
                  break;
            case 6:
                  lpcPortID = "0x000001";
                  break;
      }

      printf("\n\n");
      printf("Now creating new " PCSCLITE_READER_CONFIG "\n");

      fd = fopen(PCSCLITE_READER_CONFIG, "w");

      if (fd == NULL)
      {
            printf("Cannot open file %s: %s\n", PCSCLITE_READER_CONFIG, strerror(errno));
            return 1;
      }

      fprintf(fd, "%s", "# Configuration file for pcsc-lite\n");
      fprintf(fd, "%s", "# David Corcoran <corcoran@linuxnet.com\n");

      fprintf(fd, "%s", "\n\n");

      fprintf(fd, "FRIENDLYNAME     \"%s\"\n", lpcReader);
      fprintf(fd, "DEVICENAME       /dev/null\n");
      fprintf(fd, "LIBPATH          %s\n", lpcLibrary);
      fprintf(fd, "CHANNELID        %s\n", lpcPortID);

      fprintf(fd, "%s", "\n\n");

      fprintf(fd, "%s", "# End of file\n");
      return 0;
}


Generated by  Doxygen 1.6.0   Back to index