Ver la versión completa : ¿Cómo usar gpwrap.h?
anibarro
26/01/2006, 08:36
Hoola buenas, alguien me comento que existia una cabecera que se llamaba gpwrap.h, que redefinia las funciones de entrada salida y memoria, de forma que no tuvieses que modificar esa parte de los programas que tengas hechos para PC.
La libreria en cuestion he conseguido encontrarla, la incluyo en el programa, quito los #include <stdio.h>, <stdlib.h> y <string.h> que ya no hacen falta, compilo, parece que todo funciona...pero nada, no funciona bien :( Ni en los ejemplos mas simples funciona y no tengo ni idea de que falla.
Buscando en el foro encontre que Puck la habia usado y habia q poner el GpFatInit y el GpRelativePathSet, pero tampoco :(
¿Alguien la usa y me puede decir que me falta? Muchas gracias :brindis:
En tu makefile, ¿sigues incluyendo las librerías estàndard del C?
Es que me temo que el linker sigue pillando las funciones de la librería estàndar y no la de ese modulo gpwrap.h.
Es solo una idea.
anibarro
26/01/2006, 18:35
Nada, no es eso :(
Oankali ya se q es pedir mucho, pero cuando tengas un rato podrias probar a hacer un miniejemplo que use esa cabecera y simplemente abra un fichero de texto, lea unos pocos caracteres y los muestre por pantalla?
Algo como:
#include "gpwrap.h"
#define RGB(Red, Green, Blue) (((unsigned int) ((Red) << 11)) + \
((unsigned int) ((Green) << 6)) + \
((unsigned int) ((Blue) << 1)))
void InitGraphics(int depth);
void GpMain (void * arg)
{
int bytesLeidos;
char buffer[11];
GpFatInit();
GpRelativePathSet("gp:\\GPMM\\");
FILE *fe = fopen("texto.txt","rb");
InitGraphics(16);
GpRectFill16(NULL, >Surface[giSurface], 0, 0, 320, 240, RGB(0, 0, 0));
bytesLeidos = fread(buffer, 1, 10, fe);
GpTextOut16(NULL, >Surface[giSurface], 0, 10, buffer, RGB(31, 31, 31));
GpSurfaceFlip(>Surface[giSurface++]);
giSurface &= 0x01;
fclose(fe);
while(1); //Para que no se salga y ver si lo ha leido y puesto en pantalla
}
void InitGraphics(int depth)
{
GpGraphicModeSet(depth, NULL);
GpLcdSurfaceGet(>Surface[0], 0);
GpLcdSurfaceGet(>Surface[1], 1);
giSurface = 0;
GpSurfaceSet(>Surface[giSurface]);
if (!(GpLcdStatusGet() & GPC_LCD_ON_BIT))
GpLcdEnable();
giSurface = 1;
}
Si no puedes, no pasa nada, seguire intentandolo :brindis:
No puedo provar nada por el momento, pero hay algo que me molesta en tu código:
GpFatInit();
GpRelativePathSet("gp:\\GPMM\\");
FILE *fe = fopen("texto.txt","rb");
Resulta que fopen volverá a inicilizar la SMC con GpFatInit() con lo que posiblemente el cambio efectuado por GpRelativePathSet() no sirva de nada.
Yo simplificaría el código poniendo solo esta instrucción:
FILE *fe = fopen("gp:\\GPMM\\texto.txt","rb");
Por cierto, ¿has testeado fe para ver si no devuelve NULL?
anibarro
26/01/2006, 19:10
Madre mia no hay nada como saber :rolleyes: muchisimas gracias, ahora ya funciona perfectamente, no sabes el tiempo que llevaba sin poder hacerlo funcionar [wei5]
Un despiste lo tiene cualquiera :cool2:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.