From: Nicolas Raitman (new_world@radar.com.ar)
Date: Wed 06 Sep 2000 - 04:34:52 IDT
Look at the comments and pliiiiiiiiiiiiiiiiiiisssssssssss help. #include <stdio.h> #include <stdlib.h> #include <vgagl.h> #include <vga.h> #include <string.h> #include <unistd.h> #include <fcntl.h> struct fecha { int dia; int mes; int anio; }; struct personas { int id; char apellido [40]; char nombre [40]; char direccion [50]; char email [40]; char tel1 [40]; char tel2 [40]; struct fecha cumple; }; void limpiar(); void llenardatos(); void abrir(); #define TEXT 0 #define VIDEOMODE 12 int i, j, rta, xmax, ymax, midx, midy, x1, x2, y1, b, c, fd; GraphicsContext *physical_screen; GraphicsContext *virtual_screen; struct personas *contactos; int main (void) { extern unsigned char *gl_font8x8; vga_disabledriverreport(); vga_init(); vga_setmode(VIDEOMODE); gl_setcontextvga(VIDEOMODE); physical_screen = gl_allocatecontext(); gl_getcontext(physical_screen); gl_setcontextvgavirtual(VIDEOMODE); virtual_screen = gl_allocatecontext(); gl_getcontext(virtual_screen); gl_setcontext(virtual_screen); gl_setfont(8,8,gl_font8x8); gl_setwritemode(FONT_COMPRESSED + WRITEMODE_MASKED); xmax = vga_getxdim(); ymax = vga_getydim(); midx = xmax / 2; midy = ymax / 2; gl_clearscreen(0); vga_setmode(TEXT); exit(EXIT_SUCCESS); } void abrir () { if(fd = open("contactos.dat", O_CREAT, 0644) < 0) { mensaje("Hubo un error al abrir el Archivo"); exit(EXIT_FAILURE); } } void agregar() { abrir(); llenardatos(); } void llenardatos (void) { limpiar(); gl_printf(300,100,"Apellido"); gl_copyscreen(physical_screen); i = 0; /* i believe the problem is here. When this line arrives i get a segmentation fault. Signal 11. Core Dumped. Im not sure, but perhaps there is something bad with the structures. Please test the code and see in which way it can work: receiving the characters and printing it to the location. (I will make the 'cursor' to move, dont worry, but for now i just want to see where is the mistake and in which way I can get a char, store it in the structure and printing it. */ while((contactos->apellido[i] = getchar()) != '\n') { gl_printf(600,100, "%c", contactos->apellido[i]); gl_copyscreen(physical_screen); i++; } getchar(); } void limpiar(void) { gl_clearscreen(0); }
This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:23 IST