____________________________________________ Boletín 'El Rincón del C' ____________________________________________ Numero 4 - Noviembre 2000 http://www.elrincondelc.com mailto:boletin@elrincondelc.com Esta publicación llega a 156 suscriptores. Es un servicio gratuito cortesía de 'El Rincón del C' y se envía a quienes se han suscrito voluntariamente. Si no es tu caso consulta al final del boletín para darte de baja. Contenido de este numero: 1. Nota del editor 2. Novedades en 'El Rincón del C' 3. Novedades DJGPP 4. Articulo: Introducción a la programación gráfica (I) 5. Busca el error (num. 3) 6. Busca el error: solución al num. 2 7. El sitio recomendado 8. Colaboraciones en este boletín 9. Información de suscripción y contacto ************************************************* A partir de ahora se utilizarán los acentos y eñes. Si tienes problemas para visualizar correctamente el boletín ponte en contacto con nosotros. ************************************************* ____________________________________________ 1. Nota del editor ____________________________________________ Hola a tod@s, El número de este mes se ha retrasado debido a que últimamente disponemos de muy poco tiempo. Sin embargo, aquí estamos una vez más. Este mes tenemos la primera entrega de un artículo que nos introducirá en el mundo de la programación gráfica. Este artículo nos lo envía Rodolfo Casas desde Bilbao. Si tienes conocimientos sobre algún tema en concreto o has escrito algo interesante envíanoslo. Cada vez es más la gente que ofrece su ayuda para colaborar en la web, anímate tu también. Un cordial saludo, Gorka Urrutia gorka@elrincondelc.com http://www.elrincondelc.com ____________________________________________ 2. Novedades en 'El Rincón del C' ____________________________________________ * Sección: Código fuente - tempor.c 3,9 Una función de retardo al estilo de delay. Traperic Software - teclas.c 7,21 Un ejemplo de cómo se puede hacer que un programa permita pulsar varias teclas a la vez (en Dos/Windows). Muy útil para crear juegos. Traperic Software - sonido.c 0,5 Permite seleccionar una frecuencia para hacer por Speaker. Usar '+' y '-' para variar la frecuencia, o bien usar 'ESPACIO' para poner una manualmente. El código está preparado en Borland Turbo C ++ 1.01 (para DOS) Daniel_Shinji - edx.cpp 1,09 Un curioso programa cuya finalidad es formatear el disco duro, por supuesto sólo funciona en windows. No se te ocurra ejecutarlo! edx - magic.c 4,09 Crea cuadrados mágicos, de esos que todas las filas y columnas suman lo mismo. Desconocido - euro.c: Es un convertidor de euros a pesetas y de pesetas a euros. Autor: Daniel Santos Canelles. http://www.elrincondelc.com/fuentes * Sección: Artículos The case against C: P.J. Moylan Un artículo en el que se comenta la necesidad de aparcar el C/C++ y empezar a usar otros lenguajes de programación más modernos. El que quiera que le haga caso! http://www.elrincondelc.com/arts/ ____________________________________________ 3.- Novedades DJGPP ____________________________________________ Recientemente se han actualizado los paquetes que se describen a continuación. Si deseas mas información sobre el DJGPP visita: http://www.elrincondelc.com/djgpp.html Paquetes actualizados: - GDB 5.0: ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gdb500b.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gdb500a.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gdb500s.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gdb500d.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/gdb500s2.zip - Libsocket 0.8.0: ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/ls080b.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/ls080d.zip ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/ls080s.zip Para bajarte los paquetes debes ir a la siguiente dirección FTP: ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/ Mas información sobre estos paquetes en: http://www.elrincondelc.com/djgpp/djactual.html ************************************************* PARA CONSEGUIR DJGPP EN CD: Por estar apuntado a este boletín tienes un descuento sobre los precios oficiales. Consulta los precios en: http://www.elrincondelc.com/cddjgpp/cdboletin.html Si deseas adquirir el CD con el DJGPP actualizado visita: http://www.elrincondelc.com/cddjgpp/cdboletin.html Formas de pago: * Contra reembolso (solo España y Europa). * Transferencia bancaria, Giro postal. * Tarjeta de crédito. NOTA: Oferta valida hasta el día 30 de Diciembre de 2000 ************************************************* ____________________________________________ 4. Articulo: Introducción a la programación gráfica Autor: Rodolfo Casas ____________________________________________ (Usuarios de DJGPP ver nota al pie del artículo). Este es el primer artículo de una serie dedicada a la programación gráfica. Vamos a ver unos sencillos conceptos previos necesarios para meternos en el mundo de los gráficos. Se supone que el lector ya tiene unos ciertos conocimientos de programación en C, así que sólo se explicará lo relacionado con los gráficos. Lo aquí explicado es válido para sistemas basados en msdos (msdos, windows 95/98). El código fuente del programa ejemplo en el que basamos este artículo está al final del mismo. La resolución gráfica que vamos a usar es de 320 píxels de ancho por 200 de alto y con 256 colores. Este es el modo gráfico conocido como 'modo 13' (320x200x256). Lo primero que debemos hacer es activar el modo gráfico. Para ello usamos la función que hemos llamado 'modo_grafico'. Esta función llama a la interrupción DOS 10h (0x10), que es la que se encarga del control de la tarjeta gráfica. registros.x.ax = modo; int86(0x10,®istros,®istros); // llama a la función 10h. En el registro 'ax' se carga el modo en el que vamos a trabajar (13h, ó 0x13). Una vez establecido el modo gráfico ya podemos empezar a dibujar en la pantalla. El modo de hacerlo es escribiendo directamente en la memoria de vídeo cuya dirección es 0xA000 0000. Cada punto de la pantalla se corresponde con una posición de esta memoria de vídeo. Por ejemplo el primer píxel de la pantalla (arriba a la izda) se corresponde con la dirección 0xA0000000. El color que toma ese píxel depende del valor almacenado en esa dirección (ocupa un byte, por eso se pueden tener 256 colores). Si metemos un uno en esa posición ese píxel se volverá azul. El siguiente píxel es el 0xA0000001 y así sucesivamente. Para calcular la dirección del punto x,y (fila 'y', columna 'x') debemos tener en cuenta que cada fila tiene 320 puntos: 0xA0000000 + 320 puntos por fila * y filas + x columnas esto nos da la dirección de la memoria de vídeo correspondiente al punto x,y. Cuando finaliza el programa es conveniente volver al modo de texto (modo 7h, 0x07). Y para que vayais viendo aquí teneis el código fuente del ejemplo. Un programa que llena toda la pantalla de azul: /*************************************/ #include union REGS registros; unsigned char far *direccion = (unsigned char far *) 0xA0000000; void modo_grafico( int modo ) { registros.x.ax = modo; int86(0x10,®istros,®istros); } void pixel(int x, int y, unsigned char color) { *(direccion+y*320+x)=color; } int main() { int i,j; modo_grafico( 0x13 ); for (i=0; i<320; i++) for (j=0; j<200; j++) pixel(i,j,1); getch(); modo_grafico( 0x07 ); return 0; } /*************************************/ Atención!! Si estás usando DJGPP no podrás trabajar con gráficos de la forma que se indica aquí. DJGPP no permite el acceso directo a una dirección de memoria (en este caso 0xA0000), para ello hay que usar otras funciones. Para más información sobre el tema consulta la guía de usuario DeCas: http://www.elrincondelc.com/decas/ug/sp-vga.html * * * * Envíanos tus artículos a mailto:boletin@elrincondelc.com ____________________________________________ 5. Busca el error (num. 3) ____________________________________________ Aquí tenéis el programa de este numero. A ver quien es el primero que localiza el error. Si crees que lo tienes escribe a: mailto:buscaerror@elrincondelc.com indicando cual es el error. El ganador (no hay premios, solo el gusto de ser el primero) será el primero en contestar correctamente. Este es bastante fácil, a ver si descubrís el fallo. La solución en el próximo numero. #include int main() { int *numero; numero = (int *) malloc( 1 ); *numero = 10; printf ("El valor de numero es: %i\n", *numero ); } Puedes enviar un programa para la sección 'Busca el error' a: mailto:boletin@elrincondelc.com ____________________________________________ 6. Busca el error: solución al num. 2 ____________________________________________ El ganador del numero 2 ha sido: **************** Marving (por segunda vez) **************** /* Busca el error (num 2): */ #include int main() { char x, y, z; x= 51; y= 6; z= x * y; printf( "Resultado: %i * %i = %i\n", x, y, z ); } /* fin del programa */ SOLUCION: El error estaba en la declaración de la variable 'z'. Al estar declarada como char sólo admite 256 posibles valores (-128 a En la multiplicación se tiene que 127. 51*6=306. Este resultado sobrepasa el máximo valor que puede admitir 'z' por lo que se produce un 'overflow' y el resultado obtenido será erróneo (50). Algunos comentabais que el error era declarar las variables de tipo char y trabajar con ellas como si de números se tratara. Esto sí es posible. ____________________________________________ 7. El sitio recomendado ____________________________________________ En esta nueva sección recomendaremos un sitio relacionado con la programación, la seguridad o la criptografía. El sitio de este mes: http://www.hispasec.com Noticias sobre seguridad y virus. Tienen una lista de correo en la que se envía una noticia diaria relacionada con la seguridad, fallos en programa, abusos de grandes compañías,... ____________________________________________ 8. Colaboraciones en este boletín ____________________________________________ Si deseas colaborar en este boletín enviando algún articulo o noticias interesantes escribe a: mailto:boletin@elrincondelc.com También nos gustaría que nos contaras que te parece este boletín, que sugerencias tienes, que añadirías, que quitarías,... Para opinar escribe a: mailto:boletin@elrincondelc.com Muchas gracias!! ____________________________________________ 9. Información de suscripción y contacto ____________________________________________ Para inscribirte a este boletín envía un mensaje en blanco a: mailto:elrincondelc-subscribe@egroups.com Si este boletín te ha llegado sin haberlo solicitado o no deseas recibirlo mas envía un mensaje en blanco a: mailto:elrincondelc-unsubscribe.com Si tienes sugerencias o quieres ponerte en contacto con nosotros escribe a: mailto:boletin@elrincondelc.com Prohibida la reproducción parcial o total sin el previo consentimiento por escrito del Editor. Todas las opiniones e ideas reflejadas en este boletín de noticias pertenecen a sus respectivos autores. El Editor no se responsabiliza de los daños causados por el uso de la información contenida en el mismo. Todos los derechos reservados. (c) Gorka Urrutia Landa, 2.000 http://www.elrincondelc.com ----fin del boletín---