
------------------------------------------
     Tutorial de programacin grfica
                 por FAC
    ----------------------------------
       Programas de ejemplo en C++
------------------------------------------


Qu tal??? Aqu tienen (por fin) los programas de ejemplo de los tutoriales
traducidos a C++, para aquellos que les interese.

Los programas que se incluyen en este archivo corresponden nicamente a los
primeros cuatro tutoriales, de la forma siguiente:

           Tutorial 1:  - BASICO1.CPP
                        - BASICO2.CPP

           Tutorial 2:  - PALETA1.CPP
                        - PALETA2.CPP
                        - PALETA3.CPP

           Tutorial 3:  - CIRCULOS.CPP
                        - LINEAS.CPP

           Tutorial 4:  - VIRTUAL.CPP
                        - PCX1.CPP
                        - EFECTO1.CPP

A partir del tutorial nmero 5, los ejemplos en C++ se incluirn
directamente con el tutorial.

Tambin se incluye el archivo MODE13.H el cual contiene las declaraciones
de las funciones usadas para trabajar en el modo 13h. Estas funciones
trabajan de la misma manera que sus equivalentes en Pascal, aunque en
algunas de ellas, la implementacin es ligeramente diferente.

La implementacin de las rutinas se encuentra en el archivo MODE13.CPP
y contiene algunas funciones escritas en ensamblador de 32 bits para
acelerar las cosas. El equivalente en Pascal (MODE13.PAS) se presenta
en el Tutorial 6.


Los programas de ejemplo no incluyen nada de comentarios. Perdn, pero
el simple hecho de traducirlos ya es algo tedioso. Adems, las versiones
en Pascal son muy parecidas y de ah pueden obtener los comentarios.


Ooops, yo no fu:
-----------------

        Es una lata cuando la computadora se cuelga porque nuestro programa
        no funciona y entonces hay que resetear la mquina. Y eso no es lo
        peor. Hubo una vez en que uno de mis programas se las arregl para
        borrar la informacin de configuracin del disco duro en el BIOS,
        y todo fu porque estaba tratando de usar el debugger integrado
        en el Turbo Pascal con instrucciones de ensamblador de Pentium.

        Siempre pasan cosas de este tipo. Algunas veces un programa funciona
        en una mquina y se cuelga en otra.

        Lo que quiero decir es que CUALQUIER cosa que pase a causa de
        los programas de ejemplo NO es mi culpa. Los ejemplos y las
        libreras han sido probados y hasta ahora funcionan correctamente.

        Si surge algn error me gustara que me lo reportaran, explicando
        qu funcin caus el error y de preferencia con una copia del
        programa. Pero NO se tomar en cuenta ninguna reclamacin del tipo:

                FAC eres un $#&%# tu &%#* programa no funciona


        Por lo tanto, con el simple hecho de usar cualquier cdigo que
        se presente en los ejemplos, ustedes estn de acuerdo en que
        yo no soy responsable de cualquier dao que el cdigo ocasione.


Notas sobre la compilacin de los ejemplos:
-------------------------------------------

        - Los ejemplos, y cualquier programa que utilice la librera MODE13
          deben de ser compilados usando alguno de los modelos de memoria
          mayores: Compact, Large o Huge.

          Estos modelos utilizan apuntadores tipo FAR los cuales son
          necesarios para acceder grandes cantidades de datos, como son
          las pantallas virtuales.

        - Se recomienda activar la opcin Word Alignment (en el men
          Options | Compiler | Code Generation) para acelerar el acceso
          a variables de longitud mayor que un byte.

        - Se recomienda activar la opcin de optimizacin en velocidad
          (Options | Compiler | Optimizations | Optimize for Speed)
          y desactivar cualquier otra optimizacin para evitar conflictos
          con el cdigo en ensamblador.


Notas sobre el uso de MODE13:
-----------------------------

        - Aunque se puede inclur directamente la librera MODE13 usando
          dos sentencias #include:

                          #include "mode13.h"
                          #include "mode13.cpp"

          lo recomendable es inclur nicamente el encabezado (mode13.h)
          y poner todos los mdulos *.CPP en un proyecto. Esto es sobre
          todo si son varios archivos *.CPP los que componen el programa.


       - La funcin SetMode13() DEBE ser llamada ANTES de usar cualquiera
         de las funciones siguientes: PutPixel, GetPixel, HLine y Line,
         incluso si stas dibujan en una pantalla virtual.

         La razn de esto es que al llamar a SetMode13() se inicializa
         tambin un arreglo precalculado (YOffset[]) que se utiliza en
         las funciones anteriores.

         Si quieren usar cualquiera de esas funciones estando en el modo
         de texto (por ejemplo, para dibujar en una pantalla virtual),
         hagan lo siguiente:

                        SetMode13();
                        SetTextMode();

         De esta forma se inicializa el arreglo YOffset[] y seguimos en
         el modo de texto (aunque la pantalla se borra despus de llamar
         a SetTextMode() ).

         Otra solucin es inicializar el arreglo manualmente, de esta forma:

            for (int i=0; i<200; i++) YOffset[i] = i * 320;


       - El C++ es un lenguaje de menor nivel que el Pascal, y por lo tanto,
         tambin es menos estable. Recuerden que el compilador NO detecta
         todos los errores, y es posible que algo tan comn como olvidar
         los parntesis en la llamada a una funcin sin parmetros puede
         causar que la mquina se congele. Revisen sus programas y SIEMPRE
         gurdenlos ANTES de ejecutarlos y frecuentemente.

         Es gracioso cuando a alguien en el saln se le traba la computadora
         y solo se escucha:

                "AAAAHHHH!!!! NO LO HABIA GRABADO!!!"

         pero no es nada gracioso cuando nos pasa a nosotros.



Comentarios sobre los ejemplos:
-------------------------------

        An sigo pensando que C es el lenguaje ms ilegible y con la peor
        sintaxis que Kernighan y Ritchie pudieron imaginar, pero qu rpido
        es el hijo de su *****.

        Los ejemplos se ejecutan mucho ms rpido en C++ que en Pascal,
        y eso es gracias a las HORAS que uno se tiene que esperar al
        compilar un programa.

        Adems, el C++ tiene un mejor manejo de la memoria que el Pascal.
        Podemos tener arreglos mayores de 64 Kb, lo cual sera excelente
        para un "scroller" o algo as. Incluso no es necesario manejar
        arreglos grandes con apuntadores, basta declararlos como FAR y
        de esa forma tendrn su propio segmento.

        An as, los tutoriales seguirn principalmente en Pascal, con su
        traduccin indocumentada a C++.

        El Pascal es mucho ms fcil de entender y ms rpido de compilar.
        Y se puede compilar en la memoria, algo que C++ no puede hacer.


Final:
------

        Bueno, pues espero que disfruten los ejemplos en C++. Recuerden que
        a partir del Tut 5, los ejemplos vendrn includos en el paquete.

        Si tienen dudas, comentarios o sugerencias, escriban a:

                        Alfonso Alba C.
               e-mail:  ganzo@galia.fc.uaslp.mx

        
-----------------------------------------------------------------------------
                                                Sean felices por un momento
                                                       Vean un demo

                                                                       FAC

