Hola a todos, 
Casi no conozco C pero me dejaron unos programas que tengo que hacer que compilen pero me manda varios errores, uno de ellos y que ojala y me puedan ayudar es este que tengo en un UNION:
Primero lo tenia asi: union REGS v1, v2;
pero alguien me dijo que estaba mal y que era de esta forma:
union { 
REGS v1; 
REGS v2; 
} ;
lo cambie pero me manda estos errores en el UNION(aparte de varios errores mas):
C:/Dev-Cpp/RNO/comunicaciones.c:16: parse error before "REGS"
C:/Dev-Cpp/RNO/comunicaciones.c:16: warning: no semicolon at end of struct or union
C:/Dev-Cpp/RNO/comunicaciones.c:17: warning: data definition has no type or storage class
Como les comente casi no conozco C pero estuve buscando si REGS estaba declarado en la cabecera o en otro programa y no encontre nada, ojala y con el programa que les pongo mas abajo me puedan decir que pude ser REGS, si es una estructura, una variable definida o alguna palabra reservada de C para saber si la tengo que declarar en otro lado y de que tipo seria o que hacer
El programa es este:
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define DC1 0x11      /* XON */
#define DC3 0x13      /* XOFF */
#define INIT 0      /* Función 0 de la Interrupción 14 */
#define SEND 1      /* Función 1 de la Interrupción 14 */
#define READ 2      /* Función 2 de la Interrupción 14 */
#define STAT 3      /* Función 3 de la Interrupción 14 */
#define n 81      /* Longitud máxima de la cadena */
//union REGS v1, v2;
union { 
REGS v1; 
REGS v2; 
} ;
main ( )
{
   void rs232_inic ( );   /* Inicializar puerto dado por DX (0 o 1) */
   void rs232_lect ( );   /* Espera por un caracter de COM */
   void rs232_stat ( );   /* Estado de COM */
   void rs232_envi ( );   /* Enviar caracter XON o XOFF */   
   FILE *pf;
   char c; 
    char cadena[n];   /* Caracteres leídos */
   int i = 0;   
   if ((pf  = fopen("datos", "w")) == NULL)
   {
      printf ("Error: el fichero datos no se puede abrir");
      exit (1);
   }
   rs232_inic();
   system("cls");
   printf("Recepción de datos. Pulse una tecla para finalizar");
   while ( 1 )
   {
      /* Pulse una tecla para finalizar la recepción */
      if (kbhit() != 0) exit(0);
      rs232_stat();
      if ((v2.h.ah & 1) == 1)      /* ¿Caracter Preparado? */
      {
         rs232_lect();      /* Leer el caracter */
         cadena[i++]; = v2.h.al;   /* Almacenarlo */
         if (i  == n)
         {
            v1.h.al = DC3;   /* Enviar XOFF para detener */
            rs232_envi();   /* la transmisión */
            fwrite(cadena, sizeof(cadena), 1, pf);
            i = 0;
            v1.h.al = DC1;   /* Enviar XON para continuar */
            rs232_envi();   /* la transmisión */
         }
      }
   }
}
void rs232_inic()
{
   v1.x.dx = 0;            /* Seleccionar puerto COM1 */
   v1.h.al = 0xfe;            /* Seleccionar: Baudios, Paridad,
                   * bit Stop y Longitud palabra
                   * ( BBBPPSL )
                   */
   v1.h.ah = INIT;            /* Función (0) de Int 14 a realizar */
   int86 (0x14, &v1, &v2);         /* Llamada a la función */
}
void rs232_lect()
{
   v1.h.ah = READ;            /* Función (2) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}
void rs232_stat()
{
   v1.h.ah = STAT;            /* Función (3) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}
void rs232_envi()
{
   v1.h.ah = SEND;            /* Función (1) de Int 14 a realizar */
   int86(20, &v1, &v2);         /* Llamada a la función */
}
Les comento lo que se supone deben hacer estos programas por si alguien ya lo ha hecho y me puede ayudar.
Lo que tiene que hacer este programa y los otros que me dejaron es leer unas tarjetas con chip llamadas SAMARTCARD tipo Mifare y GCL8K con un lector GemEasyAccess 680SP fabricado por GEMPLUS
Gracias por su ayuda