From: "Carlos Alfredo Barahona FrenÁNdez" Newsgroups: comp.os.msdos.djgpp Subject: set_gfx_mode doesn´t work!! (in Spanish) Lines: 108 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2314.1300 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300 Message-ID: Date: Mon, 07 Aug 2000 23:11:43 GMT NNTP-Posting-Host: 193.152.65.124 X-Complaints-To: usenet AT teleline DOT es X-Trace: telenews.teleline.es 965689903 193.152.65.124 (Tue, 08 Aug 2000 01:11:43 MET DST) NNTP-Posting-Date: Tue, 08 Aug 2000 01:11:43 MET DST Organization: Clientes_Teleline To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Hola ,me llamo Carlos Barahona y estoy trabajando en mi proyecto de final de carrera utilizando DJGPP y Allegro, en MS-DOS. Yo creo que mi instalación del DJGPP está correctamente realizada,ya que he realizado algun programa ejemplo y me lo ha compilado y ejecutado bien.El problema viene cuando llamo a la función set_gfx_mode de Allegro, cuando la ejecuto me da un error de Desbordamiento de División, entonces el Rhide se deja de ejecutar y no puedo hacer ni un simple dir /p porque el ordenador se queda colgado.He seguido la traza del programa y he llegado al punto donde me falla,y siempre es en el mismo sitio, en la linea número 88 del archivo vga.c. A continuación está el codigo de mi programa: void main(void){ int eleccion,color=0; PALETTE defecto; allegro_init(); eleccion='0'&0xFF; while((eleccion=='1'&0xFF) || (eleccion=='0'&0xFF)) { install_keyboard(); printf("\n\nVAMOS A CAMBIAR EL MODO GRµFICO ...\n\n"); printf("\nQue modo desea poner:\n\t\t0->Modo Texto\n\t\t1->Modo 13\n\t\tCualquiera->Salir\n\t\t"); eleccion=readkey(); if((eleccion & 0xff)=='0') modo_texto(); else if((eleccion & 0xff)=='1') modo_13(); else { modo_texto(); allegro_exit(); } } } END_OF_MAIN(); void modo_texto(void) { int error=0; error=set_gfx_mode(GFX_TEXT,0,0,0,0); if(error==-1) { printf("\nNO SE HA PODIDO PONER EL MODO TEXTO\n"); remove_keyboard(); } else { remove_keyboard(); printf("\nSE HA PUESTO CON EXITO EL MODO TEXTO\n"); } getch(); clrscr(); } void modo_13(void) { int error=0,onda=0,opval=0,i=0,j=0; PALETTE defecto; error=set_gfx_mode(GFX_VGA,320,200,0,0);//Here it crashes if(error==-1) { printf("\nNO SE HA PODIDO PONER EL MODO 13\n"); remove_keyboard(); } else { Y ahora el trozo de codigo de las Allegro donde falla: ): if ((w == 320) && (h == 200) && (v_w <= 320) && (v_h <= 200)) { /* standard mode 13h */ b = _make_bitmap(320, 200, 0xA0000, &gfx_vga, 8, 320); if (!b) return NULL; r.x.ax = 0x13; __dpmi_int(0x10, &r);//Here it crashes He intentado recompilar las Allegro tal y como lo explicaba un FAQ: " Note: if the crash happens deep inside an Allegro function, this traceback may not be so useful. When this happens you can recompile Allegro with debugging information (in your Allegro directory, run "make clean", "set DEBUGMODE=1", and "make install", but note that this requires the GNU fileutils package to be installed), and then recompile your program to use the debugging library. Don't forget to rebuild a normal Allegro version (as above, but "set DEBUGMODE=") when you are done, because the debugging lib is very slow. " Y los resultados son los mismos. Mi ordenador es un Pentium 200 MMX con 1 Mega de targeta gráfica, los dos ficheros adjuntos infogfx.txt, infogfx2.txt son los resultados de ejecutar el programa vesainfo y vesainfo -v respectivamente. Por curiosidad,instalé DJGPP y Allegro en Windows-95 y he comprobado que el mismo programa que en MS-DOS no funcionaba, (he probado tanto ejemplos de Allegro,como distintos programas hechos por mi con Allegro), si que lo hace en Windows 95.