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