|
|||||
Amiga.InFo Nº 0 - Noviembre/Diciembre 1994 - Curso de C
NOTA: Pulsando sobre las fotos con borde azul ampliarás la imagen.
Bienvenido al excitante mundo del C, un lenguaje de programación profesional que gusta tanto a los programadores aficionados como alos comerciales. No te preocupes si los primeros listados en C te suenan a "chino". Un listado en C no es más difícil de entender que uno en Basic, cuando se conoce. Al final del curso, más de uno será capaz de mejorarlo.
|
||||||||||||||||||||||||||||||||||||||||||||
|
SAS C es, sin lugar a dudas, el mejor compilador de C para Amiga. A lo largo del curso analizaremos a fondo éste y otros compiladores. |
GNU CC es un compilador cruzado de ámbito universitario. Puede crear un ejecutable para 680X0, PC, VAX, estaciones SUN, etc. |
|
El compilador Aztec C será válido para seguir el Curso de C, aunque te recomiendo que cambies a: Dice, GCC o mejor aún, a SAS/C. |
Instalación de la versión registrada de DICE. Incluye el set completo de "Includes" de Commodore, el código fuente de la c.lib, soporta operaciones en coma flotante, etc. |
| RAM | Disco duro | Discos | |
|---|---|---|---|
| GCC | 3-4 Megas | 30 Megas | --- |
| DICE | 2 Megas | Recomendable | 3 |
| SASC | 2-3 Megas | 10 Megas | 6 |
| Aztec C | 2 Megas | Recomendable | 4 |
Una o dos unidades de disco, o una unidad de disco y un disco duro.
Un televisor o monitor en color, ya que algunos ejemplos llevan gráficos o texto en color (aunque en la mayor parte del curso no se necesite el color).
Una impresora (opcional). Varios de los ejemplos requieren el uso de la impresora.
Workbench 2.0 o preferiblemente 3.0. He centrado el curso en las versiones más recientes del sistema operativo, ya que todavía hay muy poca documentación, y ninguna en castellano, sobre cómo programarlas.
No es necesario poseer profundos conocimientos de informática para abordar la lectura de este curso, aunque sí debes estar familiarizado, al menos, con el Amiga y los conceptos más comunes relacionados con él, bien sea de hardware (discos, ficheros, teclado, pantalla, memoria, ...) o de software (conocimientos básicos de AmigaDOS. Concretamente, necesitas conocer comandos del AmigaDOS: dir, copy, format, delete, type, list, rename, etc. y saber cómo se utilizan los directorios y el acceso a los ficheros).
Encontrarás más información sobre estos conceptos en el manual que acompaña a tu Amiga. También, interesaría que entendieras los conceptos de variable, vector, bucle, subrutina, función, acción, etc.
TODOS los ejemplos que aparecen en el curso han sido compilados y ejecutados sin errores. El texto fuente de los mismos, junto con los ficheros de entrada utilizados y los resultados de salida producidos, están disponibles en el disco de portada.
La gran cantidad de comentarios explicativos que se incorporan en todos los ejemplos, salvo en los más sencillos de este curso, están para tu provecho, con la esperanza de que puedas aprender gracias al ejemplo.
El C fue diseñado e implantado por Dennis Ritchie, en los Laboratorios Bell de AT&T, para ser usado originalmente en la familia DEC PDP-11 de Digital Equipment (hacia el año 1972). El desarrollo del lenguaje ha estado fuertemente unido al del sistema operativo UNIX ya que el autor, Dennis Ritchie, simultaneaba el desarrollo de los dos (UNIX junto con Ken Thompson).
El sistema operativo UNIX, en un principio, estaba escrito en lenguaje ensamblador para el mini-ordenador PDP-7 de DEC, pero las constantes necesidades de mantenimiento, adaptación y crecimiento del sistema, llevaron a Ken Thompson a desarrollar un lenguaje independiente de la máquina.
En 1970 Ken Thompson, creó el lenguaje B inspirándose en el lenguaje BCPL desarrollado por Martin Richard en 1967 anticipándose a la moda de los lenguajes estructurados, Ken Thompson desarrolló un compilador y reescribió el sistema operativo UNIX sobre un ordenador PDP-11.
Posteriormente, en 1972 y basándose en el lenguaje B que Ken Thompson había creado a partir del BCPL, Dennis Ritchie definió el lenguaje C. Los lenguajes BCPL y B ya disponían de instrucciones de control clásicas como: if, while, do, etc. y de conceptos de programación como punteros, asignación dinámica. recursividad, etc. Al lenguaje C se le añadió la noción de tipos de datos, pero de forma menos firme que en los lenguajes ALGOL o PASCAL (anteriores al C).
Ya en 1973 nació un nuevo UNIX escrito por primera vez en un 90% bajo lenguaje C y diseñado para un ordenador PDP-11. Así, paralelo al sistema UNIX, es como nació el propio lenguaje C, un lenguaje escrito por programadores y con todas las utilidades que un programador necesita de un sistema operativo, a la vez que quedaba totalmente abierto a todas las nuevas necesidades que cada programador precisara.
Durante muchos años, el C estándar fue el proporcionado con el sistema operativo UNIX 5 y descrito en "The C Programming Language" por Brian Kernighan y Dennis Ritchie. Se le conoce a menudo como el "estándar K&R". Tanto el UNIX como el C se han implementado posteriormente en un número cada vez mayor de ordenadores, desde los microordenadores de mayor potencia hasta supercomputadores como el Cray-2, y se están transformando en un estándar industrial para el desarrollo de software. En lo que casi podría calificarse de milagro, la mayoría de estas implementaciones eran altamente compatibles entre sí, a nivel de código fuente.
Sin embargo, debido a que no existía un estándar, había discrepancias. Para cambiar esta situación, a principios de 1983 se creó un comité para trabajar en la creación de un estándar ANSI, que definiría de una vez por todas el lenguaje C. Tras siete años de "trabajo", el estándar fue adoptado en diciembre de 1989.
gracias a este estándar, se ha independizado al C del sistema operativo UNIX, soportando en la actualizad la mayoría de sistemas operativos: AmigaDOS, MSDOS, VMS/VAX, SYSTEM 7, OS/2, MACH, etc.
Este curso refleja el estándar ANSI C. Sin embargo, también se cubren importantes aspectos del viejo estándar K&R.
Por lo que hemos visto sobre la historia del lenguaje C, podríamos pensar que es un lenguaje para el desarrollo de sistemas operativos, esto no es exactamente así. Un lenguaje de propósito general, como el C, puede ser utilizado para resolver una gran variedad de problemas informáticos en áreas como:
- Desarrollo de programas ofimáticos (procesadores de textos, bases de datos, hojas de cálculo, etc.).
- Programación de sistemas operativos (UNIX, MACH, LINUX, AmigaDOS, etc.).
- Aplicaciones científicas y de ingeniería (Simulación, Redes, etc.
- Aplicaciones financieras, Gestión comercial o familiar, etc.).
- Programación de microprocesadores.
- Programas de comunicaciones.
- Aplicaciones de inteligencia artificial o robótica.
- Diseño de juegos y pasatiempos en general.
- Programas de educación.
- Para controlar maquinaria compleja.
...y para mil cosas más.
Después de haber leído el párrafo anterior, pensaremos que el lenguaje C sirve para todo tipo de aplicaciones, pero tampoco es del todo cierto. Para resolver determinados problemas disponemos de lenguajes que nos facilitarán el trabajo, por ejemplo, si tenemos que realizar el mantenimiento de un fichero (altas, bajas, consultas, etc) la mejor solución es manejar una base de datos desde AREXX. Esta solución, nos ahorrará tiempo ya que, en C, deberíamos de realizar el programa completo. En la base de datos, tendríamos parte del trabajo resuelto. Además, es muy posible que esa base de datos haya sido programada en C, como es el caso de SuperBase 4.
Cuando se nos planteó el reto de escribir un curso de programación para Amiga, la primera decisión a tomar fue qué lenguaje de programación escoger para los ejemplos. Había varias opciones claras: Modula-2, C, Ensamblador... pero nos quedamos con el C debido a que en los últimos años ha habido mayor tendencia al uso del C entre los programadores profesionales. Vamos a ver algunas de las razones que hacen del C uno de los lenguajes más potentes y populares:
¿Cuales son las características de un lenguaje de programación estructurado?
Pues bien, las dos características principales que distinguen un lenguaje estructurado son, la posibilidad de utilizar subunidades o bloques y la inclusión en el lenguaje o booleano. Un bloque es un conjunto de sentencias, también llamadas instrucciones, indivisibles que están lógicamente relacionadas, es decir, si una instrucción de un bloque es ejecutada, también deben ser ejecutadas todas las restantes del bloque. Por ejemplo, supongamos una sentencia "if" en la que, si la condición es verdadera, deben ejecutarse tres sentencias simples. Si dichas sentencias pueden agruparse conjuntamente y referenciarse fácilmente y además se les puede considerar como una unidad indivisible, entonces forman un bloque. En el Ejemplo 1 observará un fragmento de un programa en C que mostrará el número 007 en la pantalla si X es menor que 20.
No existe ninguna posibilidad de que sólo se escriba en la pantalla 0 ó 7 ó 07 o cualquier número distinto de 007, puesto que las instrucciones entre llaves forman un bloque, y si X es menor que 20, se ejecutarán todas; en caso contrario (X>20 ó X=20) ninguna instrucción del bloque será ejecutada.
| Ejemplo 1 |
|---|
if X<20
{
printf("0");
printf("0");
printf("7");
}
C es un lenguaje estructurado ya que permite la utilización de bloques y la inclusión de bucles controlados por test de tipo lógico o booleano. |
A continuación presentamos algunos ejemplos de lenguajes estructurados y no estructurados.
No estructurados |
Estructurados |
| Tabla 1: Pequeña clasificación de lenguajes según si son estructurados o no. | |
No es un lenguaje de juguete. El C es un lenguaje de programación suficientemente rico y robusto como para ser una seria herramienta en el desarrollo de software profesional.
Está altamente estandarizado debido a que, por fin, tiene una simple y reconocida definición del lenguaje (esta definición estándar se llama ANSI-C).
El C es especialmente bueno para escribir programas y aplicaciones de sistema debido a su facilidad para controlar el hardware a muy bajo nivel. Está considerado como un lenguaje de alto y bajo nivel (para abreviar se dice que el C es un lenguaje de nivel medio). Ésto no significa que sea menos potente o más difícil de usar que lenguajes de alto nivel como BASIC o Modula-2, ni implica que C sea similar al lenguaje ensamblador; simplemente combina elementos de lenguajes de alto nivel con la potencia del lenguaje ensamblador. La Tabla 2 muestra cómo encaja el lenguaje C en el conjunto de lenguajes.
| Nivel Alto: | Lenguaje Natural |
| Nivel Medio: | C |
| Nivel Bajo: | Lenguaje Máquina |
| Tabla 2: Comparación entre los lenguajes de programación más populares. El C es un lenguaje de nivel medio. | |
Por un lado, está considerado como un lenguaje de bajo nivel debido a que proporciona mecanismos que pueden ser utilizados para acceder a los niveles más bajos del ordenador: acceso a los registros, tratamiento de un simple bit, de un byte o de una palabra, manipulación de direcciones y punteros, etc. (elementos básicos con los que funciona un ordenador). Por otro lado, está considerado como un lenguaje de alto nivel debido a que proporciona facilidades propias de los lenguajes de alto nivel, como pueden ser soportar el concepto de tipo de datos (enteros, caracteres y reales. Un tipo de datos define un conjunto de valores que puede tener una variable junto con un conjunto de operaciones que se pueden realizar sobre esa variable), permitir utilizar estructuras de de datos muy complejas, permitir casi todas las conversiones de tipos posibles, etc.
PRECAUCIÓN: C no lleva a cabo comprobación de errores en tiempo de ejecución como puede ser la comprobación de límites de vectores, que realizan otros lenguajes de alto nivel. Estas comprobaciones quedan altamente como responsabilidad del programador.
Esta característica es una de las más importantes del C y es la culpable del gran éxito que está teniendo. La portabilidad permite que un programa diseñado para ejecutarse en una máquina pueda compilarse y ejecutarse en otra completamente diferente, siempre y cuando se respecten unas pocas reglas durante su programación. Ésto presenta la importante ventaja de no tener que ceñirnos a un único fabricante ni modelo, es decir, un programa desarrollado y probado en un ordenador personal bajo sistema operativo AmigaDOS, podría ser compilado y ejecutado sin modificaciones en un ordenador grande, bien bajo sistema operativo Unix u otro sistema cualquiera.
Otra posible combinación puede ser la de coger un fuente en C escrito para Amiga y transferirlo al PC con el "DOStoDOS" o mediante "CROSSDOS", una vez que tengamos el programa en el PC podremos hacer ciertos cambios específicos de los PC's (por ejemplo, los referentes a las diferentes tarjetas gráficas, si es que no hemos respetado la regla de no utilizar características específicas del hardware de la máquina, como son: viewports, copperlist, etc, de Amiga), y compilar el fuente en el PC sin problemas. (es decir, no te hace falta saber nada acerca de segmentos de datos o pila, de cómo se representan los datos en un PC, o cosas por el estilo). El C es, pues, muy superior al BASIC, Pascal o FORTRAN en cuanto a portabilidad.
Otro aspecto importante del lenguaje C es que sólo tiene 32 palabras clave (27 del estándar de Ritchie y Kernigham y 5 añadidas por el comité de estandarización del ANSI), que constituyen las órdenes que conforman el lenguaje. Debido a este pequeño juego de instrucciones y sus funciones, los programas desarrollados en C suelen ser de dimensiones bastantes reducidas en comparación con otros lenguajes de programación. Por ejemplo, el AmigaBASIC de Microsoft tiene 198 palabras reservadas.
Lo compacto del código fuente del C ahorra espacio en el disco, reduce el tiempo de compilación y también la cantidad de escritura que ha de realizar el programador.
Por ejemplo, las palabras clave de Pascal o Modula-2 BEGIN y END son simplemente en C los símbolos "{" "}"; la expresión que en Pascal o Modula 2 sería I:=I+1, en C sería I++: y el código en C equivalente al código en Pascal o Modula-2 del Ejemplo 2 sería el mostrado en el Ejemplo 3. En él se ve que el código puede ser escrito en C, con un ahorro del 60% de caracteres.
Una vez que te acostumbres a las sentencias del C, probablemente no desearás volver a la sintaxis verbal de otros lenguajes de programación bastante más extensa.
| Ejemplo 2 |
|---|
A=A+5;
IF A>20 THEN
BEGIN
A=A-1;
... (" aquí iría el resto del código ")
END
Código escrito en Pascal o Modula-2. Los programas escritos en Modula 2 son más legibles que los escritos en C, pero son de mayor tamaño. |
| Ejemplo 3 |
|---|
If ((a+=5)>20){
a--;
... /* aquí iría el resto del código */
}
Código en C equivalente al del Ejemplo 2 en Pascal o Modula-2. Podemos observar el sustancial ahorro de caracteres que se ha producido. |
COMENTARIO: El C se caracteriza principalmente por la escasez de reglas pero, ésto tiene una gran desventaja, al poder caer en la tentación de desarrollar programas difícilesde entender y mantener. Ésta es la causa de su mala reputación entre los programadores de Pascal o Modula-2. Se sabe que muchos programadores se precian de explotar la capacidad de compactar las expresiones del C a costa de la legibilidad del programa (Dos muestras de ello: el libro de C "The Puzzle", y el concurso anual de código rebuscado). ¡No es necesario escribir código incomprensible!
Las rutinas utilizadas normalmente pueden colocarse en una librería. Dicha librería podrá ser enlazada en los nuevos programas, cuando sea necesario.
Esta modularidad reduce significativamente los errores de programación e incrementa el desarrollo eficiente del software.
C ofrece una enorme librería de rutinas de apoyo en tiempo de ejecución. La mayoría de las implementaciones del C estándar, ofrecen librerías de funciones para: el control entre ficheros de alto y bajo nivel y discos de entrada/salida, control de la pantalla y teclado, conversión de variables, interfaz con el sistema operativo, control de memoria, funciones matemáticas, gráficos, etc.
C es fácil de aprender. Admitámoslo: no es tan fácil de aprender como el Pascal o el BASIC, pero, es ciertamente mucho más sencillo que el lenguaje ensamblador ya que tiene menos órdenes que el Pascal y además mantiene la programación estructurada y la longitud de los nombres de los símbolos (recordemos que el lenguaje ensamblador sólo toma un cierto número de caracteres de las variables y etiquetas y lo restante es simplemente, ignorado).
C es un lenguaje compilado, y como tal, permite la protección del software que desarrollan las compañías profesionales, y por supuesto, también proteje el código que puedas programar tú, de posibles "miradas no deseadas" de otra gente.
Los programadores de AmigaBASIC o AMOS, se ven obligados a suministrar el código fuente de su programa para que se pueda ejecutar. Es entonces, cuando se puede producir modificaciones, copias ilegales, infracción del copyright en poder del autor, etc. El C permite obtener un ejecutable que no guarda ninguna relación con el código fuente que lo generó, de esta forma, se consigue proteger totalmente el código del programa. Si el programa estuviera escrito en AmigaBASIC podríamos modificar, sin problemas, la línea o líneas que se encargan de imprimir el nombre del autor y poner el nuestro.
Si nos colocamos en el extremo opuesto, las ventajas del C se convierten en desventajas. Y, al igual que todos los lenguajes de programación, el C también tiene inconvenientes:
Como el C es un lenguaje compilado, la modificación de programas simples lleva más tiempo del que se emplearía con un lenguaje interpretado, como por ejemplo el AmigaBASIC.
La modularidad del C incrementa el tiempo de compilación en programas pequeños.
Al ser tan conciso se hace menos legible que el Pascal.
La tradición de grandes librerías de funciones estándar hace, normalmente, que el C sea más caro que otros lenguajes.
Lo compacto y flexible del C hace que algunas de sus partes resulten difíciles de aprender, sobre todo la referente a punteros.
Pero incluso con estas desventajas, el C es, probablemente, el mejor lenguaje para muchos propósitos y programadores.
En el próximo artículo, se introducirán los conceptos básicos necesarios para poder seguir el curso. Se presenta y comenta en el mismo una serie de instrucciones para conseguir compilar los ejemplos del curso con los cuatro compiladores de C disponibles para Amiga: SAS-C V6.51, GCC v2.5.8, DICE C V3.0 y por último Aztec C.
Los conceptos y definiciones formales propias del lenguaje C, se introducirán en el siguiente artículo (tercero), para así, poder dar un poco de culturilla general en éste.
Aunque no se traten en detalle los diversos aspectos de la arquitectura de computadoras que todo programador debiera conocer, este artículo presenta un resumen de los conceptos y terminología utilizados en los artículos restantes del curso.
| Nombre: | DICE |
|---|---|
| Autor: | Mathew Dillon |
Descripción:
DICE son las siglas de "Dillon Integrated C Environment". Actualmente esta considerado como el compilador de C, Shareware, más potente para Amiga. El calificativo de Shareware es debido a que su distribución es gratuita, aunque es recomendable el envío de una bonificación al autor. Por un módico precio, recibirás la versión completa en casa. Lleva el compilador y el enlazador o montador (en inglés, linker), pero además, incluye un excelente editor de textos con opciones muy potentes para conseguir un entorno con todo lo necesario, para poder empezar a programar en C. Está acompañadode una amplia documentación, eso sí, en inglés pero si no deseas gastarte mucho dinero en la adquisición de un compilador de C para seguir este curso, la versión registrada de DICE es la mejor opción.
Principales características de DICE.
DME, el editor de textos que acompaña a DICE, permite hacer una rápida referencia en cualquier momento. Simplemente hay que colocarse sobre el nombre de una función, pulsar una tecla, y al momento dispondremos del manual de esa función en una ventana aparte.
Soporta todos los WorkBench. Dispone de un módulo estándar de arranque compatible con todas las versiones existentes del Workbench, es decir, cuando un programa es ejecutado desde el Workbench, se llama a una función diferente de entrada: la wbmain(wbmsg). De lo contrario usaríamos la librería c.lib y al detectar la ejecución de nuestro programa desde el Workbench, retomaría inmediatamente un -1 y abortaría la ejecución del programa.
DICE es bastante rápido. Cuando hacemos residentes los diferentes módulos que forman el compilador, conseguimos que la compilación casi "vuele". Gran parte de esta velocidad se consigue gracias a cargar de golpe ficheros enteros en la memoria. Ésto presenta un pequeño problema de memoria, pero en general, el uso que hace DICE de la memoria es, más o menos, el mismo que hace Aztec C y Lattice (primeras versiones del SAS/C).
El código que genera es compacto y bastante reducido en general. Los tamaños de los programas más pequeños pueden rondar los:
_main(){} 448 bytes, no utiliza stdio/fd.
main(){} 2736 bytes, utiliza algo de stdio.
main(){ algún printf } 5492 bytes, utiliza gran parte de stdio.
El preprocesador es capaz de tratar macros de cualquier tamaño. No tiene límite de símbolos, y además, permite manejar hasta 64 niveles de "includes" y recursiones en las macros.
Soporta la creación de ejecutables residentes sin que el programador tenga que realizar trabajo alguno adicional.
Soporta completamente las versiones del sistema operativo 1.3 y 2.0, y con un fácil mecanismo de extensiones al final de los nombres de los ficheros, permite desarrollar programas para varias versiones de sistema operativo simultáneamente.
Incluye el código fuente de las diferentes librerías: c.lib, m.lib, auto.lib, etc, para poder corregir los bugs que se detecten y así compilar de nuevo la librería ya corregida. Además, incluye el código fuente de casi todas las utilidades que lo acompañan, para que el nuevo programador disponga de ejemplos de gran calidad de donde aprender técnicas de programación en C.
Posee una extensa documentación en inglés sobre cómo instalar el compilador, su utilización, el editor, las funciones estándar de C, las librerías suministradas, cómo realizar librerías propias, cómo generar código para ROMs y EPROMs, mensajes de error, cómo escribir código legible, los errores más comunes que cometen los principiantes, cómo registrarse, explicaciones -paso a paso- para principiantes, bugs conocidos, utilidades suministradas, UNIX, etc.
Las instrucciones complejas para instalar la versión DICE, del disco de portada, están en la página siguiente. Una vez instalado, podrás ojear los programas de ejemplo que lo acompañan. Podrás modificarlos y experimentar con ellos cambiando líneas del código fuente "para ver que ocurre". Te aconsejo que lo hagas, ya que es una muy buena forma de aprender divirtiéndote.
Por desgracia, no podrás compilar programas que usen llamadas a la librería gráfica o a cualquier otra del AmigaDOS, ya que, a la versión de DICE que te hemos suministrado no le hemos podido añadir los llamados "includes", pues son de propiedad de Commodore.
Puedes obtenerlos directamente de Commodore.
Si estás intereado en obtener los "includes" ponte en contacto con nosotros y haremos los trámites por tí.
otra forma de conseguir los "includes" de Commodore es comprando la versión registrada de DICE. Puedes encontrar una explicación completa de cómo registrarte en el fichero register.doc que encontrarás en el directorio docs, una vez que descomprimas la versión "Shareware" de DICE.
Por último, existen dos formas más de conseguirlos, aunque son opciones más caras, la primera es comprar el SAS/C y la segunda es comprar el libro en inglés "Complete Amiga C" de Cliff Ramshaw. (Este libro incluye la versión registrada de DICE y además, los "include" de Commodore).
Hemos preferido llenar el disco de portada al máximo, así que no hemos añadido ningún script para descomprimir DICE; por lo tanto, tendrás que descomprimirlo tu mismo desde una Shell.
DICE está guardado en el disco de portada como dos archivos separados, cada uno de ellos tendrá que ser descomprimido en un disquete aparte. Naturalmente, si dispones de disco duro, podrás instalar DICE en la partición que consideres oportuna.
Instalación:
El texto que sigue a continuación es una explicación detallada de cómo debes instalar la versión de DICE, incluída en el disco de portada del primer ejemplar de AMIGA.InFo. Por favor, lee las instrucciones cuidadosamente, antes de intentar instalarlo.
Necesitarás abrir una Shell y usar unos simples comandos (ed, assign, rename y copy). Si no estás seguro de saber abrir una ventana de Shell, consulta el manual suministrado al comprar tu Amiga.
La versión Shareware de DICE, contenida en el disco de portada, funciona con versiones 1.3 y superiores del Sistema Operativo del Amiga. Si todavía estás usando la 1.2 ¿no crees que ya va siendo hora de que actualices tu equipo?
Las instrucciones que debes seguir varían dependiendo de qué versión del sistema operativo estés utilizando actualmente y también de dónde quieras instalar DICE: en disco duro o en disquetes. Sigue el proceso que necesites de los detallados a continuación.
Instalando DICE en 2 disquetes:
Antes de nada necesitarás dos discos formateados y totalmente vacíos. Puedes formatear los dos discos usando el Workbench, por ejemplo. Consulta el manual de tu Amiga si no estás muy seguro de cómo formatear discos. Una vez formateados, renómbralos como DiceDisk1 y DiceDisk2. Es importante que te asegures de que el nombre de los discos es correcto, o el resto de la instalación no funcionará.
En el directorio llamado DICE, del disco 1 de portada, encontrarás dos ficheros:
dicepart1.lha
dicepart2.lha
Éstos son ficheros comprimidos. Aparentemente, sólo son dos ficheros, pero cada uno de ellos contiene muchos otros. El primer fichero: dicepart1.lha contiene todos los ficheros que han de ir en el primer disco que has formateado, DiceDisk1. El segundo contiene los ficheros para el segundo de los discos, DiceDisk2. Abre una Shell y teclea el comando siguiente. Al final de cada línea presiona la tecla <Return>.
AMIGAINFO1:c/lha x AMIGAINFO1:DICE/dicepart1.lha DiceDisk1:
Sigue las instrucciones que te aparecen en la pantalla, insertando el disco que te pide en cada momento. Si tienes dos unidades de disco, podrás usarlas para acelerar el proceso. Cuando la operación esté completa, y aparezca de nuevo el prompt de la Shell, necesitarás realizar un proceso similar para el segundo disco:
AMIGAINFo1:c/lha x AMIGAINFO1:DICE/dicepart2.lha DiceDisk2:
Una vez acabada la operación, ya dispondrásde dos discos con la versión Shareware de DICE instalada en ellos. No podrás arrancar con ninguno de los dos discos, así que tendrás que arrancar de un disco que contenga el Workbench cada vez que quieras utilizar DICE. Lo más efectivo es que te hagas una copia del Workbench exclusiva para trabajar con él. La puedes llamar, por ejemplo: DiceBench. Puedes realizar la copia usando el comando diskcopy, desde la Shell, o usando el Workbench. El comando relabel te permitirá cambiar el nombre al disco. Llámalo DiceBench. Éste será tu disco de arranque de DICE.
Si estás utilizando Workbench 1.3:
Arranca desde el nuevo DiceBench. Abre una Shell y teclea:
ed s:startup-sequence
Este comando cargará el editor. Para más instrucciones de cómo manejar este editor, consulta el manual suministrado con tu Amiga. Posiciónate al final del fichero que has cargado (tu startup-sequence), y antes del endcli del final del texto, añade las cuatro líneas siguientes:
assign dice: DiceDisk1
assign dlib: DiceDisk2:dlib
assign dinclude: DiceDisk1:include
setenv DCCOPTS "-1.3"
Ahora continúa en el punto Pasos Finales.
Si estás utilizando Workbench 2.0 o superior:
Arranca desde el nuevo DiceBench. Abre una Shell y teclea:
ed s:user-startup
Este comando cargará el editor. Para más instrucciones de cómo manejar este editor, consulta el manual suministrado con tu Amiga. Posiciónate al final del fichero que has cargado (tu user-startup), y añade las cuatro líneas siguientes:
assign dice: DiceDisk1:
assign dlib: DiceDisk2:dlib
assign dinclude: DiceDisk1:include
setenv DCCOPTS "-2.0"
Pasos finales
Graba el texto y sal del editor. Arranca de nuevo, de DiceBench y, usando una Shell, teclea:
ed s:shell-startup
Y añade esta línea al final del texto:
path dice:bin add
graba el texto y sal del editor. Por último, teclea esta línea desde una Shell:
copy DiceDisk1:s/.edrc.floppy DiceBench:s/.edrc
Ahora, ya dispones de DICE instalado totalmente en dos discos. Si tienes múltiples unidades de disco, te ahorrarás un gran número de cambios de disco. Cuando arranques del nuevo DiceBench, te pedirá que insertes discos en varios puntos durante el proceso de arranque. No te preocupes, esto es normal. Puedes continuar en el punto Utilizando DICE.
Instalando DICE en un Disco Duro:
Antes de nada, escoge donde vas a instalar la versión de DICE y crea un nuevo directorio llamado Dice. Por ejemplo, si lo quieres instalar en la partición llamada Work: crea un directorio allí. Puedes hacerlo desde el Workbench si tienes Workbench 2.0 o superior, o utilizando una Shell si tienes la 1.3 (consulta el manual de tu Amiga si no estás muy seguro).
Voy a suponer que has creado un directorio llamado Dice en la partición Work:. Si no es así, sustituye todas las apariciones de Work:Dice, en el texto que sigue por el path apropiado.
Abre una Shell y teclea los comandos siguientes. Al final de cada línea presiona la tecla <Return>. Cada vez que lo hagas, verás un scroll en pantalla de gran cantidad de información. No te preocupes, esto es normal. Es producido por el programa lha cuando extrae los ficheros comprimidos, dentro de los dos ficheros, incluidos en el disco de portada.
AMIGAINFo1:c/lha x AMIGAINFo1:DICE/dicepart1.lha Work:Dice
AMIGAINFo1:c/lha x AMIGAINFo1:DICE/dicepart2.lha Work:Dice
Si estás utilizando Workbench 1.3:
Abre una Shell y teclea:
ed s:startup-sequence
Este comando cargará el editor. Para más instrucciones de cómo manejar este editor, consulta el manual suministrado con tu Amiga. Posicionate al final del fichero que has cargado (tu startup-sequence), y antes del endcli del final del texto, añade las cuatro líneas siguientes:
assign dice: Work:Dice
assign dlib: Work:Dice/dlib
assign dinclude: Work:Dice/include
setenv DCCOPTS "-1.3"
Ahora continúa en el punto Pasos Finales.
Si estas utilizando Workbench 2.0 o superior:
Abre una Shell y teclea:
ed s:user-startup
Éste comando cargará el editor. Para más instrucciones de cómo manejar este editor, consulta el manual suministrado con tu Amiga. Posiciónate al final del fichero que has cargado (tu user-startup), y añade las cuatro líneas siguientes:
assign dice: Work:Dice
assign dlib: Work:Dice/dlib
assign dinclude: Work:Dice/include
setenv DCCOPTS "-2.0"
Pasos Finales:
Graba el texto y sal del editor. Usando una Shell, teclea:
ed s:shell-startup
Y añade esta línea al final del texto:
path dice:bin add
Graba el texto y sal del editor. Por último, teclea esta línea desde una Shell:
copy Dice:s/.edrc.hd s:.edrc
Ahora realiza un reset para asegurarte de que los cambios efectuados toman efecto, y bueno, DICE ya está instalado en tu sistema.
Utilizando DICE:
Ya disponemos del compilador totalmente instalado y preparado para trabajar. Si lo has instalado en el disco duro, entonces no tendrás problemas. Si lo has instalado en disquetes, no olvides que tendrás que arrancar desde una copia del Workbench llamada DiceBench. El AmigaDOS necesita que introduzcas DiceDisk1: cada vez que utilices alguno de los comandos de DICE: dme, dcc, etc. de los guardados en el directorio bin. Si no lo haces así, te mostrará el mensaje de error "command not found". Esto último, sólo es aplicable a los sistemas basado en disquetes.
Hay cuatro pasos que tendremos que seguir para escribir un programa en C: editar, compilar, montar (en inglés, linking) y por último, ejecutar.
1.Editar
Todas las operaciones que podemos hacer con DICE, hay que hacerlas desde una Shell. Por lo tanto, lo primero es abrir una Shell.
Lo siguiente es decidir donde vamos a guardar/grabar nuestro trabajo. La RAM es el "dispositivo" más veloz pero, por supuesto, si se produce un guru o apagas la máquina, perderás todo el trabajo realizado. Debido a ésto, tendrás que tener un disco formateado y vacío para grabar nuestro trabajo, o un directorio en el disco duro.
Todos los ejemplo del curso están en la forma conocida como "código fuente". Para introducirlos en el Amiga usaremos un editor de textos. El programa Ed, que hemos utilizado anteriormente para modificar el startup-sequence, es uno de ellos. Pero DICE tiene incluido un editor mucho mejor, llamado DME. Puedes ejecutar DME desde una Shell, tecleando:
dme
Normalmente, ejecutaremos DME pasándole como parámetro el nombre del fichero de texto que queramos editar. Supongamos que vamos a grabar nuestro código fuente en un disquete llamado MiCodigo: Si tu programa se llama ejemplo.c (por convenio, se pone la extensión .c al final del nombre), entonces teclearemos:
dme MiCodigo:ejemplo.c
(Los usuarios de la versión de DICE en disquetes, tendrán que introducir DiceDisk1 en la unidad de disco antes de teclearlo). Este comando abrirá el editor con un fichero vacío. Simplemente teclea un listado y después selecciona <Save-Quit>. Ya estaremos en condiciones de pasar al siguiente paso.
2 y 3 Compilar y Montar
Compilar es el proceso de traducir el código fuente escrito en C a código máquina, lenguaje ejecutable por la unidad central de proceso del Amiga. La compilación es la función principal de DICE. Antes de poder ejecutar un programa compilado, hay que montarlo. El proceso de montar, enlaza el programa compilado con otros programas y librerías escritas previamente. Afortunadamente, DICE se encarga de compilar y montar el código fuente por nosotros. Podemos efectuar los dos procesos con una simple línea de comandos. Suponiendo que has creado el fichero ejemplo.c con el editor, como he mencionado anteriormente, podemos compilarlo y montarlo con la línea siguiente:
dcc MiCodigo:ejemplo.c -o MiCodigo:ejemplo
(Los usuarios de la versión de DICE en disquetes, tendrán que introducir DiceDisk1 en la unidad de disco antes de teclearlo). El comando "dcc" le indica a DICE que tiene que compilar y montar el ejemplo.c (hay que dar el path completo de donde está el código fuente). La opción -o permite indicar el path y nombre del ejecutable resultante.
Si todo ha ido bien, tendremos un ejecutable llamado ejemplo en el disco Micodigo. (Los usuarios de la versión de DICE en disquetes, tendrán que cambiar varias veces de disco, ésto es normal, no te preocupes). Si el compilador te ha informado de la presencia de algún error, entonces, es que probablemente te has equivocado al teclear el código fuente. Ejecuta de nuevo el editor y verifica el texto que has tecleado. Una vez que hayas corregido el texto, grábalo e intenta la compilación otra vez.
4. Ejecutar tu programa
Cuando, por fin, consigues librarte de los mensajes de error.. sólo falta ejecutar el fichero que produce DICE. Puedes ejecutarlo de la misma forma que ejecutarías otro comando del AmigaDOS, simplemente tecleando el nombre (incluyendo su path completo si fuese necesario) desde una Shell. Si has grabado tu programa compilado en el disco llamado MiCodigo, entonces teclea:
MiCodigo:ejemplo
Si todo va bien, verás el resultado maravilloso que produce tu primer programa en C. (Normalmente un guru como una casa).
La versión que te hemos suministrado de DICE, esta repleta de ficheros de texto (en inglés) que completan la documentación del compilador. Esta documentación en disco te ayudará a usar el sistema de mejor forma posible. Los ficheros de ayuda se encuentran en el directorio doc/. Para los usuarios de disquetes, es este directorio DiceDisk2:doc/. Para los usuarios de disco duro, es este otro directorio dice:doc/. Por favor, realiza el esfuerzo de leerte la documentación (si sabes el suficiente inglés). Te ayudará a solventar muchos de los problemas con los que te vas a ir encontrando, sobre todo, al principio.
Diferencias entre la versión Shareware de DICE y la Registrada
La versión de DICE incluida en el disco de portada, que acompaña al primer ejemplar de AMIGA.InFo, es distribuible libremente. El entorno del compilador y éste funciona totalmente, pero no contiene algunas de las características extras que tiene la versión registrada de DICE, Registrarse cuesta $50 (dólares); encontrarás los detalles de cómo registrarte en el fichero llamado Register.doc situado en el directorio doc/ de los discos de DICE. Alternativamente, existe la posibilidad de que nos pidas la versión registrada de DICE a nosotros. La redacción de AMIGA.InFo realizará los trámites por tí, sin coste alguno.
ventajas de la versión registrada:
- Incluye el set completo de "Includes" de Commodore y la amiga.lib (esencial para sacarle el máximo partido a los gráficos y sonido del Amiga).
- Trae una documentación mucho más extensa, con gran cantidad de programas de ejemplo.
- Contiene el código fuente de la librería de C.
- Soporta los "bitfields" y las opciones: _chip y _geta4.
- Soporta operaciones matemáticas en punto flotante.
Esta última ventaja necesita una pequeña explicación. La versión Shareware de DICE no puede trabajar con variables del tipo "float" (es decir, números con parte fraccionaria). Algunos de los ejemplos de este curso requerirán que el compilador soporte la opción de operaciones en punto flotante para poderlo compilar. Si utilizas la versión Shareware, entonces tendrás que modificar los ejemplos para poderlos compilar.
Por ejemplo, cada vez que te encuentres con una variable del tipo float, en uno de los ejemplo del curso, cambiala al tipo int. Además, dónde veas los dos caracteres %f, dentro de una llamada printf o scanf, sustitúyelos por los dos nuevos caracteres %d. Si hay asignaciones a estas variables, entonces borra la parte decimal de los valores.
Estos cambios permitirán compilar los ejemplos utilizando variables del tipo entero en lugar de las del tipo float. Recuerdo que estos cambios sólo son necesarios si utilizas la versión Shareware de DICE. La versión Registrada, o un compilador comercial, podrán compilar perfectamente los ejemplos sin modificaciones.
Includes de Commodore
Los includes de Commodore son una serie de ficheros que, con ayuda de otro fichero llamado amiga.lib, permiten al programador de C, sacarle la máxima potencia a las facilidades del Amiga. Con la versión Shareware de DICE, podrás realiar simples entradas y salidad vía Shell, pero llamar a las librerías de la ROM del Amiga, para abrir pantallas y ventanas, por ejemplo, no te será posible sin los includes de Commodore. Si te vas a tomar en serio la programación del Amiga, necesitarás estos ficheros, y por supuesto, un compilador de C en condiciones.
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|